@acorex-platform/module-settings-management-client 1.0.1 → 1.0.2

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.
@@ -349,6 +349,26 @@ class AXPSettingPageComponent extends AXPPageLayoutBaseComponent {
349
349
  const payload = await this.hooks.runAsync('settings-page.secondary-actions', { items });
350
350
  return payload.items ?? items;
351
351
  }
352
+ /**
353
+ * Route tab stays on the scope (User / Tenant / Platform). The open group is internal
354
+ * and must not rename every settings tab.
355
+ */
356
+ getRouteTabTitle() {
357
+ let route = this.activatedRoute.snapshot;
358
+ let scopeName = null;
359
+ while (route) {
360
+ const scope = route.paramMap.get('scope')?.trim().toLowerCase();
361
+ if (scope) {
362
+ scopeName = resolvePlatformScopeName(resolvePlatformScopeKey(scope));
363
+ break;
364
+ }
365
+ route = route.parent;
366
+ }
367
+ if (!scopeName) {
368
+ return null;
369
+ }
370
+ return `@settings-management:module.terms.scopes.${scopeName}.title`;
371
+ }
352
372
  async getPageTitle() {
353
373
  const group = this.vm.activateGroup();
354
374
  const groupHeadingKey = group?.pageTitle ?? group?.title;
@@ -447,4 +467,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
447
467
  }], propDecorators: { sidebarTabs: [{ type: i0.ViewChild, args: ['sidebarTabs', { isSignal: true }] }] } });
448
468
 
449
469
  export { AXPSettingPageComponent };
450
- //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-page.component-Ck_FPVsq.mjs.map
470
+ //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-page.component-_U5tsnwC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-settings-management-client-setting-page.component-_U5tsnwC.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-page/setting-page.component.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-page/setting-page.component.html"],"sourcesContent":["\nimport { AXPActionMenuItem, AXPBackButton, AXPExecuteCommand, AXPKeyboardShortcutBinding, AXPKeyboardShortcutPriority, resolvePlatformScopeKey, resolvePlatformScopeName } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsComponent, AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPSettingDefinitionGroup, AXPUnsavedChangesPopstateService, traceSettingsPageRouteLoad } from '@acorex-platform/framework-client/common';\n\nimport { AXHighlightService, AXPDeviceService, AXPHookService, AXPKeyboardShortcutRegistry } from '@acorex-platform/framework-client/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutToolbarComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n resolveDetailsViewFooterCommandShortcuts,\n} from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationEnd, RouterModule } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { AXPSettingsViewModel } from '../settings.viewmodel';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n //\n AXSearchBoxModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXTranslationModule,\n AXButtonModule,\n AXTabsModule,\n AXBadgeModule,\n AXLoadingModule,\n AXDropdownButtonModule,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutToolbarComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n ],\n templateUrl: './setting-page.component.html',\n styleUrl: './setting-page.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXUnsubscriber,\n AXPSettingsViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPSettingPageComponent,\n },\n ],\n host: { class: 'axp-setting-page' },\n})\nexport class AXPSettingPageComponent extends AXPPageLayoutBaseComponent {\n protected vm = inject(AXPSettingsViewModel);\n protected readonly deviceService = inject(AXPDeviceService);\n private activatedRoute = inject(ActivatedRoute);\n private unsubscribe = inject(AXUnsubscriber);\n private readonly highlightService = inject(AXHighlightService);\n private readonly hooks = inject(AXPHookService);\n\n private readonly unsavedChangesPopstate = inject(AXPUnsavedChangesPopstateService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly sidebarTabs = viewChild<AXTabsComponent>('sidebarTabs');\n private sidebarTabChangeSuppressed = false;\n /** Prevents VM→URL sync from stripping the route group during refresh hydration. */\n private loadingFromRoute = false;\n /** Serializes overlapping route loads (e.g. init + NavigationEnd) so `loadingFromRoute` cannot clear early. */\n private routeLoadChain: Promise<void> = Promise.resolve();\n\n /** Syncs the line indicator when the active group changes programmatically (route load / navigation). */\n #sidebarTabsIndicatorEffect = effect(() => {\n const groups = this.vm.groups();\n const activeName = this.vm.activateGroup()?.name;\n if (!groups.length || !activeName || this.vm.isSearching()) {\n return;\n }\n\n const index = groups.findIndex((group) => group.name === activeName);\n if (index < 0) {\n return;\n }\n\n untracked(() =>\n queueMicrotask(() => {\n this.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(index);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }),\n );\n });\n\n #effect = effect(() => {\n if (!this.vm.isLoaded() || this.loadingFromRoute) {\n return;\n }\n const expression = this.vm.searchExpression();\n const app = this.sessionService.application?.name;\n const scope = resolvePlatformScopeName(this.vm.scope());\n const group = this.vm.activateGroup()?.name;\n //\n if (this.vm.isSearching()) {\n this.router.navigate([app, 'settings', scope, group ?? ''], {\n queryParams: { q: expression },\n });\n setTimeout(() => {\n this.highlightService.highlight('#ax-settings', expression!);\n }, 100);\n return;\n }\n // On desktop, scope-only URLs are redirected to the first group in loadFromRoute.\n // Do not sync back to a group-less URL while that redirect is pending.\n if (!group && this.deviceService.isLarge()) {\n return;\n }\n this.router.navigate([app, 'settings', scope, group ?? '']);\n this.highlightService.clear();\n });\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.registerKeyboardShortcuts();\n\n this.unsavedChangesPopstate.registerSource({\n id: 'axp-setting-page',\n isDirty: () => this.vm.isDirty(),\n });\n this.destroyRef.onDestroy(() => this.unsavedChangesPopstate.unregisterSource('axp-setting-page'));\n //\n this.router.events\n .pipe(\n this.unsubscribe.takeUntilDestroy,\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => {\n void this.enqueueLoadFromRoute();\n });\n\n await this.enqueueLoadFromRoute();\n }\n\n private enqueueLoadFromRoute(): Promise<void> {\n const load = this.routeLoadChain.then(() => this.loadFromRoute());\n this.routeLoadChain = load.catch(() => undefined);\n return load;\n }\n\n private async loadFromRoute(): Promise<void> {\n if (this.unsavedChangesPopstate.isHandlingPopstate()) {\n return;\n }\n\n this.loadingFromRoute = true;\n try {\n const snapshot = this.activatedRoute.snapshot;\n const routerScope = resolvePlatformScopeKey(snapshot.paramMap.get('scope')?.trim().toLowerCase()!);\n const vmScope = this.vm.scope();\n const query = snapshot.queryParamMap.get('q');\n const groupFromRoute = this.getGroupFromRouteSync();\n //\n if (vmScope != routerScope || !this.vm.isLoaded()) {\n traceSettingsPageRouteLoad(\n routerScope,\n vmScope !== routerScope ? 'scope-changed' : 'not-loaded-yet',\n );\n await this.vm.load(routerScope);\n }\n\n const activeGroup = this.vm.activateGroup()?.name;\n if (groupFromRoute === activeGroup && this.vm.isDirty() && !this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return;\n }\n\n const hasQuery = !!query?.trim();\n if (groupFromRoute && groupFromRoute === activeGroup && !hasQuery && !this.vm.isSearching()) {\n return;\n }\n\n if (groupFromRoute !== activeGroup) {\n this.vm.unloadActivateGroup();\n }\n if (!hasQuery) {\n this.vm.clearSearch();\n }\n\n let group = groupFromRoute;\n if (!group && this.deviceService.isLarge() && !this.vm.isSearching()) {\n group = this.vm.groups()?.[0]?.name;\n if (group) {\n this.vm.setActivateGroupByName(group);\n this.recompute();\n await this.router.navigate([group], { relativeTo: this.activatedRoute, replaceUrl: true });\n return;\n }\n } else if (group) {\n this.vm.setActivateGroupByName(group);\n if (!this.vm.activateGroup() && this.deviceService.isLarge() && !this.vm.isSearching()) {\n const fallback = this.vm.groups()?.[0]?.name;\n if (fallback) {\n this.vm.setActivateGroupByName(fallback);\n this.recompute();\n await this.router.navigate([fallback], { relativeTo: this.activatedRoute, replaceUrl: true });\n return;\n }\n }\n this.recompute();\n }\n if (hasQuery) {\n await this.vm.search(query!);\n this.recompute();\n }\n } finally {\n this.loadingFromRoute = false;\n }\n }\n\n private getGroupFromRouteSync(): string | undefined {\n let route: ActivatedRouteSnapshot | null = this.activatedRoute.snapshot;\n while (route) {\n const group = route.paramMap.get('group');\n if (group) {\n return group;\n }\n route = route.firstChild ?? null;\n }\n return undefined;\n }\n\n /**\n * `ax-tabs` selects on click before we can confirm. Revert synchronously, then confirm + navigate.\n */\n protected handleSidebarTabChanged(event: AXTabStripChangedEvent): void {\n if (this.sidebarTabChangeSuppressed) {\n return;\n }\n\n const groups = this.vm.groups();\n const target = groups[event.index];\n const activeName = this.vm.activateGroup()?.name;\n\n if (!target || target.name === activeName || this.vm.isSearching()) {\n return;\n }\n\n const activeIndex = groups.findIndex((group) => group.name === activeName);\n if (activeIndex >= 0) {\n this.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(activeIndex);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }\n\n void this.completeGroupSwitch(target.name);\n }\n\n protected async handleSelectGroup(item: AXPSettingDefinitionGroup) {\n if (item.name === this.vm.activateGroup()?.name) {\n return;\n }\n\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n await this.router.navigate([`${item.name}`], { relativeTo: this.activatedRoute });\n }\n\n private async completeGroupSwitch(groupName: string): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n await this.router.navigate([groupName], { relativeTo: this.activatedRoute });\n }\n\n //#region ---- Keyboard Shortcuts ----\n\n private registerKeyboardShortcuts(): void {\n const saveKeys = resolveDetailsViewFooterCommandShortcuts('update-entity');\n const discardKeys = resolveDetailsViewFooterCommandShortcuts('discard');\n const group = '@general:keyboard-shortcuts.groups.settings';\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n if (saveKeys?.length) {\n shortcuts.push({\n keys: saveKeys,\n title: '@general:actions.apply.title',\n group,\n allowInEditableFields: true,\n when: () => this.canExecuteSaveShortcut(),\n handler: () => {\n void this.vm.apply();\n },\n });\n }\n\n if (discardKeys?.length) {\n shortcuts.push({\n keys: discardKeys,\n title: '@general:actions.discard.title',\n group,\n allowInEditableFields: true,\n when: () => this.canExecuteDiscardShortcut(),\n handler: () => {\n void this.executeDiscardViaShortcut();\n },\n });\n }\n\n if (shortcuts.length === 0) {\n return;\n }\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n elementRef: this.elementRef,\n id: 'settings-page-core',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: group,\n shortcuts,\n });\n }\n\n private canExecuteSaveShortcut(): boolean {\n if (this.vm.isSaving() || this.vm.isBusy()) {\n return false;\n }\n return this.vm.isDirty();\n }\n\n private canExecuteDiscardShortcut(): boolean {\n if (this.vm.isSaving() || this.vm.isBusy()) {\n return false;\n }\n if (this.unsavedChangesConfirm.isConfirmPending()) {\n return false;\n }\n return this.vm.isDirty();\n }\n\n private async executeDiscardViaShortcut(): Promise<void> {\n if (!this.canExecuteDiscardShortcut()) {\n return;\n }\n\n const confirmed = await this.unsavedChangesConfirm.confirmIfDirty(true, {\n title: '@general:messages.unsaved-changes.title',\n message: '@general:messages.discard-changes.message',\n approveLeaveOnConfirm: false,\n });\n if (!confirmed) {\n return;\n }\n\n await this.vm.discard();\n }\n\n //#endregion\n\n //#region ---- Leave Page Gate ----\n\n async canDeactivate(): Promise<boolean> {\n if (this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return true;\n }\n\n return this.confirmLeaveIfDirty();\n }\n\n override onBeforeTabClose(): Promise<boolean> {\n return this.unsavedChangesConfirm.confirmIfDirty(this.shouldPromptLeave(), {\n approveLeaveOnConfirm: false,\n });\n }\n\n private shouldPromptLeave(): boolean {\n return this.vm.isDirty();\n }\n\n private async confirmLeaveIfDirty(): Promise<boolean> {\n const wasDirty = this.shouldPromptLeave();\n const confirmed = await this.unsavedChangesConfirm.confirmIfDirty(wasDirty);\n if (confirmed && wasDirty) {\n await this.vm.discard();\n }\n return confirmed;\n }\n\n //#endregion\n\n //#region ---------------- Page Configuration Overrides ----------------\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (!this.vm.activateGroup()) {\n return [];\n }\n\n const items: AXPActionMenuItem[] = [\n {\n title: await this.translateService.translateAsync(\n '@settings-management:settings.actions.restore-defaults.title',\n ),\n icon: 'fa-light fa-rotate-left',\n color: 'danger',\n command: { name: 'restore-defaults' },\n },\n ];\n\n const payload = await this.hooks.runAsync('settings-page.secondary-actions', { items });\n return payload.items ?? items;\n }\n\n /**\n * Route tab stays on the scope (User / Tenant / Platform). The open group is internal\n * and must not rename every settings tab.\n */\n override getRouteTabTitle(): string | null {\n let route: ActivatedRouteSnapshot | null = this.activatedRoute.snapshot;\n let scopeName: string | null = null;\n while (route) {\n const scope = route.paramMap.get('scope')?.trim().toLowerCase();\n if (scope) {\n scopeName = resolvePlatformScopeName(resolvePlatformScopeKey(scope));\n break;\n }\n route = route.parent;\n }\n\n if (!scopeName) {\n return null;\n }\n\n return `@settings-management:module.terms.scopes.${scopeName}.title`;\n }\n\n override async getPageTitle(): Promise<string> {\n const group = this.vm.activateGroup();\n const groupHeadingKey = group?.pageTitle ?? group?.title;\n const scopeTitle = await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeTitle(),\n );\n if (!this.vm.isSearching()) {\n return groupHeadingKey ?? scopeTitle;\n } else {\n return this.translateService.translateAsync('@settings-management:settings.components.search.title', {\n params: { q: this.vm.searchExpression() },\n });\n }\n }\n\n override async getPageDescription(): Promise<string | null> {\n const groupDescription = this.vm.activateGroup()?.description;\n const scopeDescription = await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeDescription(),\n );\n if (!this.vm.isSearching()) {\n return groupDescription ?? scopeDescription;\n } else {\n return this.translateService.translateAsync('@settings-management:settings.components.search.description');\n }\n }\n\n override hasUnsavedChanges(): boolean {\n return this.vm.isDirty();\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n if (this.vm.activateGroup()) {\n return {\n title: await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeTitle(),\n ),\n };\n }\n return null;\n }\n\n override async onBackButtonClick(): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n const app = this.sessionService.application?.name;\n const scope = resolvePlatformScopeName(this.vm.scope());\n this.router.navigate([app, 'settings', scope]);\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n switch (command.name) {\n case 'restore-defaults':\n await this.vm.resetToDefault();\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n @if (vm.showGroups()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n '@settings-management:module.terms.scopes.' + vm.scopeTitle() | translate | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box [delayTime]=\"300\" [ngModel]=\"vm.searchExpression()\" (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"'@settings-management:settings.components.search.placeholder' | translate | async\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs #sidebarTabs [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\">\n @for (item of vm.groups(); track item.name) {\n <ax-tab-item [key]=\"item.name\" [text]=\"(item.title | translate | async)!\"\n [active]=\"vm.activateGroup()?.name === item.name && !vm.isSearching()\">\n <ax-prefix>\n <ax-icon icon=\"{{ item.icon }} fa-fw fa-regular\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content id=\"ax-settings\">\n @if (vm.hasActivateGroup() || vm.isSearching()) {\n <router-outlet></router-outlet>\n } @else {\n <axp-layout-list>\n @for (item of vm.groups(); track $index) {\n <axp-layout-list-item (click)=\"handleSelectGroup(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"font-semibold\">{{ item.title | translate | async }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n }\n </axp-page-content>\n\n @if (vm.isDirty()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.discard.title' | translate | async\" (onClick)=\"vm.discard()\">\n </ax-button>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.apply.title' | translate | async\" (onClick)=\"vm.apply()\" [color]=\"'secondary'\">\n @if (vm.isSaving()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>"],"names":["i9"],"mappings":"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"}
@@ -160,6 +160,16 @@ class AXPSettingsViewComponent {
160
160
  hasWideControlLayout(layout) {
161
161
  return !!layout?.positions && layout.stacked !== true;
162
162
  }
163
+ /**
164
+ * Connection cards already show the provider name, description, and action.
165
+ * A second field title above that card repeats the section.
166
+ */
167
+ showsSettingLabel(setting) {
168
+ if (setting.widget?.type === 'integration-connections-panel') {
169
+ return false;
170
+ }
171
+ return !!(setting.title || setting.description);
172
+ }
163
173
  //#endregion
164
174
  //#region ---- Row Visibility ----
165
175
  /** Whether a section has at least one visible setting row. */
@@ -260,7 +270,7 @@ class AXPSettingsViewComponent {
260
270
  return getSmart(context, key);
261
271
  }
262
272
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPSettingsViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
263
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPSettingsViewComponent, isStandalone: true, selector: "ng-component", host: { classAttribute: "w-full" }, viewQueries: [{ propertyName: "form", first: true, predicate: AXFormComponent, descendants: true, isSignal: true }, { propertyName: "container", first: true, predicate: AXPWidgetContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true\">\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type:
273
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPSettingsViewComponent, isStandalone: true, selector: "ng-component", host: { classAttribute: "w-full" }, viewQueries: [{ propertyName: "form", first: true, predicate: AXFormComponent, descendants: true, isSignal: true }, { propertyName: "container", first: true, predicate: AXPWidgetContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true || !showsSettingLabel(j)\">\n <!--------------------------------------------------------------->\n <!-- ----- Field label when the control is not a self-labeled connection card ----- -->\n @if (showsSettingLabel(j)) {\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n }\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type:
264
274
  //
265
275
  AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i5$1.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i5$1.AXFormComponent, selector: "ax-form", inputs: ["disabled", "readonly", "labelMode", "look", "messageStyle", "updateOn", "inUserInteractionActive"], outputs: ["onValidate", "updateOnChange"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type:
266
276
  //
@@ -290,7 +300,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
290
300
  AXPThemeLayoutSectionComponent,
291
301
  ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
292
302
  class: 'w-full',
293
- }, template: "<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true\">\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>" }]
303
+ }, template: "<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true || !showsSettingLabel(j)\">\n <!--------------------------------------------------------------->\n <!-- ----- Field label when the control is not a self-labeled connection card ----- -->\n @if (showsSettingLabel(j)) {\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n }\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>" }]
294
304
  }], propDecorators: { form: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXFormComponent), { isSignal: true }] }], container: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPWidgetContainerComponent), { isSignal: true }] }] } });
295
305
  function hasSettingContextValue(context, key) {
296
306
  const value = Object.prototype.hasOwnProperty.call(context, key) ? context[key] : getSmart(context, key);
@@ -307,4 +317,4 @@ function hasSettingContextValue(context, key) {
307
317
  }
308
318
 
309
319
  export { AXPSettingsViewComponent };
310
- //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-view.component-BrUkHvXK.mjs.map
320
+ //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-view.component-BioUodsz.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-settings-management-client-setting-view.component-BioUodsz.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-view/setting-view.component.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-view/setting-view.component.html"],"sourcesContent":["import { AXPContextChangeEvent, getSmart } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\n\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPExpressionEvaluatorScope } from '@acorex-platform/framework-shared/core';\nimport {\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingLayoutOptions,\n AXPSettingSectionAction,\n} from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPWidgetCoreModule, AXPWidgetContainerComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutSectionComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPSettingsViewModel } from '../settings.viewmodel';\n\n@Component({\n templateUrl: 'setting-view.component.html',\n imports: [\n CommonModule,\n FormsModule,\n //\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXButtonModule,\n AXBadgeModule,\n AXTranslationModule,\n AXSearchBoxModule,\n AXDropdownButtonModule,\n AXLoadingModule,\n AXFormModule,\n AXValidationModule,\n //\n AXPWidgetCoreModule,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutSectionComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'w-full',\n },\n})\nexport class AXPSettingsViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXPSettingsViewModel);\n private readonly commandService = inject(AXPCommandService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly form = viewChild(AXFormComponent);\n private readonly container = viewChild(AXPWidgetContainerComponent);\n\n //#endregion\n\n //#region ---- State ----\n\n /** Cached row visibility keyed by setting name (from `widget.options.visibility`). */\n protected readonly rowVisibility = signal<Record<string, boolean>>({});\n\n private visibilityRefreshGeneration = 0;\n\n //#endregion\n\n //#region ---- Lifecycle Effects ----\n\n #registerFormEffect = effect(() => {\n const formRef = this.form();\n if (formRef) {\n this.vm.registerForm(formRef);\n }\n });\n\n #statusEffect = effect(() => {\n this.container()?.builderService.setStatus(this.vm.status());\n });\n\n #formDirtyEffect = effect(() => {\n if (this.vm.syncingBaseline()) {\n return;\n }\n\n const container = this.container();\n const isDirty = container?.isFormDirty() ?? false;\n if (this.vm.formDirty() === isDirty) {\n return;\n }\n untracked(() => this.vm.setFormDirty(isDirty));\n });\n\n #applySyncEffect = effect(() => {\n const nonce = this.vm.applySyncNonce();\n if (nonce === 0) {\n return;\n }\n\n const container = this.container();\n\n untracked(async () => {\n this.vm.setSyncingBaseline(true);\n try {\n if (container) {\n await container.replaceContext(this.vm.context());\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n } else {\n this.vm.setFormDirty(false);\n }\n } finally {\n this.vm.setSyncingBaseline(false);\n }\n });\n });\n\n #discardSyncEffect = effect(() => {\n const nonce = this.vm.discardSyncNonce();\n if (nonce === 0) {\n return;\n }\n\n const container = this.container();\n\n untracked(() => {\n try {\n if (container) {\n container.revertAndSettle();\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n }\n } finally {\n this.vm.setSyncingBaseline(false);\n }\n });\n });\n\n #rowVisibilityEffect = effect(() => {\n const context = this.vm.context();\n this.vm.activateGroup();\n this.vm.searchResults();\n this.vm.isSearching();\n const container = this.container();\n\n untracked(() => {\n void this.refreshRowVisibility(context, container);\n });\n });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected handleContextChanged(e: AXPContextChangeEvent): void {\n this.vm.updateContext(e.data);\n }\n\n protected isSectionActionDisabled(action: AXPSettingSectionAction): boolean {\n if (!action.command?.name || !this.commandService.exists(action.command.name)) {\n return true;\n }\n\n if (action.disabledWhenDirty && this.vm.isDirty()) {\n return true;\n }\n\n if (action.requiredSettingKeys?.length) {\n const context = this.vm.context();\n if (!action.requiredSettingKeys.every((key) => hasSettingContextValue(context, key))) {\n return true;\n }\n }\n\n return false;\n }\n\n protected runSectionAction(action: AXPSettingSectionAction): void {\n if (this.isSectionActionDisabled(action) || !action.command?.name) {\n return;\n }\n void this.commandService.execute(action.command.name, action.command.options ?? {});\n }\n\n //#endregion\n\n //#region ---- Layout Helpers ----\n\n /** Side-by-side settings row with wider control column (`layout.positions` without `stacked`). */\n protected hasWideControlLayout(layout?: AXPSettingLayoutOptions): boolean {\n return !!layout?.positions && layout.stacked !== true;\n }\n\n /**\n * Connection cards already show the provider name, description, and action.\n * A second field title above that card repeats the section.\n */\n protected showsSettingLabel(setting: AXPSettingDefinition): boolean {\n if (setting.widget?.type === 'integration-connections-panel') {\n return false;\n }\n return !!(setting.title || setting.description);\n }\n\n //#endregion\n\n //#region ---- Row Visibility ----\n\n /** Whether a section has at least one visible setting row. */\n protected isSectionVisible(section: { settings: AXPSettingDefinition[] }): boolean {\n return section.settings.some((setting) => this.isSettingRowVisible(setting));\n }\n\n /** Whether a setting row should be rendered (supports `widget.options.visibility` expressions). */\n protected isSettingRowVisible(setting: AXPSettingDefinition): boolean {\n const visibility = setting.widget.options?.['visibility'];\n if (visibility == null) {\n return true;\n }\n if (typeof visibility === 'boolean') {\n return visibility;\n }\n return this.rowVisibility()[setting.name] ?? true;\n }\n\n private async refreshRowVisibility(\n context: Record<string, unknown>,\n container: AXPWidgetContainerComponent | undefined,\n ): Promise<void> {\n const generation = ++this.visibilityRefreshGeneration;\n const settings = this.collectVisibleSettings();\n const scope = this.buildExpressionScope(context, container);\n const next: Record<string, boolean> = {};\n\n await Promise.all(\n settings.map(async (setting) => {\n next[setting.name] = await this.resolveRowVisibility(setting.widget.options?.['visibility'], scope);\n }),\n );\n\n if (generation !== this.visibilityRefreshGeneration) {\n return;\n }\n\n this.rowVisibility.set(next);\n }\n\n private collectVisibleSettings(): AXPSettingDefinition[] {\n if (this.vm.isSearching()) {\n const results = this.vm.searchResults();\n if (!results?.length) {\n return [];\n }\n return results.flatMap((group) => group.sections.flatMap((section) => section.settings));\n }\n\n const group = this.vm.activateGroup();\n if (!group?.sections.length) {\n return [];\n }\n\n return group.sections.flatMap((section) => section.settings);\n }\n\n private async resolveRowVisibility(\n visibility: unknown,\n scope: AXPExpressionEvaluatorScope,\n ): Promise<boolean> {\n if (visibility == null) {\n return true;\n }\n if (typeof visibility === 'boolean') {\n return visibility;\n }\n if (typeof visibility === 'string') {\n if (this.expressionEvaluator.isExpression(visibility)) {\n return Boolean(await this.expressionEvaluator.evaluate(visibility, scope));\n }\n return Boolean(visibility);\n }\n return true;\n }\n\n private buildExpressionScope(\n context: Record<string, unknown>,\n container: AXPWidgetContainerComponent | undefined,\n ): AXPExpressionEvaluatorScope {\n return {\n context: {\n eval: (path: string) => {\n if (container) {\n const fromContainer = container.contextService.getValue(path);\n if (fromContainer !== undefined) {\n return fromContainer;\n }\n }\n return this.readSettingContextValue(context, path);\n },\n set: (path: string, value: unknown) => {\n container?.contextService.update(path, value, { origin: 'user' });\n },\n data: () => (container?.contextService.data() as Record<string, unknown>) ?? context,\n isDirty: () => container?.contextService.isDirty() ?? false,\n options: (path?: string) => {\n if (!container) {\n return undefined;\n }\n if (path == null || path === '') {\n return container.contextService.getValue('options');\n }\n return container.contextService.getValue(`options.${path}`);\n },\n },\n events: {},\n widget: {},\n methods: {},\n vars: {},\n };\n }\n\n /** Flat persisted setting keys may contain dots (e.g. `Common:Setting:Navigation.Mode`). */\n private readSettingContextValue(context: Record<string, unknown>, key: string): unknown {\n if (Object.prototype.hasOwnProperty.call(context, key)) {\n return context[key];\n }\n return getSmart(context, key);\n }\n}\n\nfunction hasSettingContextValue(context: Record<string, unknown>, key: string): boolean {\n const value = Object.prototype.hasOwnProperty.call(context, key) ? context[key] : getSmart(context, key);\n\n if (value == null) {\n return false;\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) && value > 0;\n }\n\n return true;\n}\n","<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true || !showsSettingLabel(j)\">\n <!--------------------------------------------------------------->\n <!-- ----- Field label when the control is not a self-labeled connection card ----- -->\n @if (showsSettingLabel(j)) {\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n }\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>"],"names":["i3","i4"],"mappings":"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"}
@@ -2,6 +2,7 @@ import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';
2
2
  import { AXToastService } from '@acorex/components/toast';
3
3
  import { AXLocaleService } from '@acorex/core/locale';
4
4
  import { AXTranslationService } from '@acorex/core/translation';
5
+ import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';
5
6
  import * as i2 from '@acorex-platform/framework-client/common';
6
7
  import { traceSettingsPageLoadStarted, traceSettingsPageLoadComplete, AXPSettingDefinitionProviderService, AXPSettingsService, createUnsavedChangesCanDeactivateGuard, AXP_UNAUTHORIZED_ROUTE, AXP_PROTECTED_ROUTE_GUARDS, traceSettingsAppStartupLoadStarted, traceSettingsAppStartupLoadComplete, AXP_SETTINGS_SYNC_KEYS, AXP_SEARCH_PROVIDER, AXP_SEARCH_DEFINITION_PROVIDER, AXP_MENU_PROVIDER } from '@acorex-platform/framework-client/common';
7
8
  import { getSmart, resolvePlatformScopeName, AXPPlatformScope, resolvePlatformScopeKey } from '@acorex-platform/framework-shared/core';
@@ -11,8 +12,7 @@ import * as i0 from '@angular/core';
11
12
  import { computed, inject, Injectable, NgModule } from '@angular/core';
12
13
  import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
13
14
  import { cloneDeep, isEqual, isNil, isEmpty, get, sortBy } from 'lodash';
14
- import { filter, merge, first, map, firstValueFrom } from 'rxjs';
15
- import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';
15
+ import { filter, merge, combineLatest, map, distinctUntilChanged, first, firstValueFrom } from 'rxjs';
16
16
  import { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';
17
17
  import { Router, ROUTES } from '@angular/router';
18
18
  import { AXPApplicationsPlatformPermissionKeys, RootConfig, AXPSettingsManagementMenuKeys, AXMSettingsManagementCommandKeys, axmSettingsSyncKeys } from '@acorex-platform/module-settings-management-client/contracts';
@@ -162,6 +162,8 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
162
162
  //
163
163
  status: AXPPageStatus.Processing,
164
164
  form: null,
165
+ /** Edition catalog identity last applied to `groups`. Empty until the first successful load. */
166
+ editionAvailabilityKey: '',
165
167
  })), withComputed((store, deviceService = inject(AXPDeviceService)) => ({
166
168
  searchResults: computed(() => {
167
169
  const q = store.searchExpression();
@@ -196,8 +198,10 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
196
198
  scope: scope,
197
199
  status: AXPPageStatus.Processing,
198
200
  });
201
+ let fetchedAvailabilityKey = '';
199
202
  try {
200
203
  const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(scope));
204
+ fetchedAvailabilityKey = settingDefinitionService.getAvailabilityKey();
201
205
  patchState(store, {
202
206
  groups: groups,
203
207
  });
@@ -224,12 +228,43 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
224
228
  console.error('Settings page load failed', error);
225
229
  }
226
230
  finally {
231
+ const latestAvailabilityKey = settingDefinitionService.getAvailabilityKey();
232
+ if (fetchedAvailabilityKey && latestAvailabilityKey !== fetchedAvailabilityKey) {
233
+ const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(store.scope()));
234
+ patchState(store, { groups });
235
+ }
227
236
  // Always leave Processing so Apply/Discard are not stuck disabled after a partial load.
228
237
  patchState(store, {
229
238
  status: AXPPageStatus.Rendered,
239
+ editionAvailabilityKey: settingDefinitionService.getAvailabilityKey(),
230
240
  });
231
241
  }
232
242
  },
243
+ /**
244
+ * Edition features arrived after the page was already open.
245
+ * Refreshes the in-memory catalog only — setting values stay on their existing load.
246
+ */
247
+ async syncGroupsForEdition() {
248
+ if (store.status() !== AXPPageStatus.Rendered) {
249
+ return;
250
+ }
251
+ const availabilityKey = settingDefinitionService.getAvailabilityKey();
252
+ if (!availabilityKey || availabilityKey === store.editionAvailabilityKey()) {
253
+ return;
254
+ }
255
+ const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(store.scope()));
256
+ const previousName = store.activateGroup()?.name;
257
+ const defaults = await settingValueService.scope(store.scope()).defaultValues();
258
+ const nextGroup = previousName ? groups.find((group) => group.name === previousName) : undefined;
259
+ patchState(store, {
260
+ groups,
261
+ activateGroup: nextGroup,
262
+ context: { ...defaults, ...store.context() },
263
+ previousContext: { ...defaults, ...store.previousContext() },
264
+ editionAvailabilityKey: settingDefinitionService.getAvailabilityKey(),
265
+ });
266
+ await this.rebuildSettingSearchIndex();
267
+ },
233
268
  async reload() {
234
269
  await settingDefinitionService.reload();
235
270
  const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(store.scope()));
@@ -241,6 +276,9 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
241
276
  if (oldActivateGroupName) {
242
277
  this.setActivateGroupByName(oldActivateGroupName);
243
278
  }
279
+ patchState(store, {
280
+ editionAvailabilityKey: settingDefinitionService.getAvailabilityKey(),
281
+ });
244
282
  await this.rebuildSettingSearchIndex();
245
283
  },
246
284
  async rebuildSettingSearchIndex() {
@@ -464,38 +502,52 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
464
502
  this.discard();
465
503
  }
466
504
  },
467
- })), withHooks((store, settingValueService = inject(AXPSettingsService), translationService = inject(AXTranslationService), localeService = inject(AXLocaleService)) => ({
468
- async onInit() {
469
- //
470
- settingValueService.onChanged.pipe(filter((c) => c.scope == store.scope())).subscribe((e) => {
471
- e.keys.forEach((k) => {
472
- const currentValue = e.values[k];
473
- const contextValue = get(store.context(), k);
474
- const previousValue = get(store.previousContext(), k);
475
- if (!isEqual(previousValue, currentValue) || !isEqual(currentValue, contextValue)) {
476
- patchState(store, {
477
- previousContext: {
478
- ...store.previousContext(),
479
- [k]: currentValue,
480
- },
481
- context: {
482
- ...store.context(),
483
- [k]: currentValue,
484
- },
485
- formDirty: false,
486
- });
505
+ })), withHooks((store, settingValueService = inject(AXPSettingsService), translationService = inject(AXTranslationService), localeService = inject(AXLocaleService), settingDefinitionService = inject(AXPSettingDefinitionProviderService), sessionService = inject(AXPSessionService)) => {
506
+ let editionSync;
507
+ return {
508
+ async onInit() {
509
+ //
510
+ settingValueService.onChanged.pipe(filter((c) => c.scope == store.scope())).subscribe((e) => {
511
+ e.keys.forEach((k) => {
512
+ const currentValue = e.values[k];
513
+ const contextValue = get(store.context(), k);
514
+ const previousValue = get(store.previousContext(), k);
515
+ if (!isEqual(previousValue, currentValue) || !isEqual(currentValue, contextValue)) {
516
+ patchState(store, {
517
+ previousContext: {
518
+ ...store.previousContext(),
519
+ [k]: currentValue,
520
+ },
521
+ context: {
522
+ ...store.context(),
523
+ [k]: currentValue,
524
+ },
525
+ formDirty: false,
526
+ });
527
+ }
528
+ });
529
+ });
530
+ //
531
+ merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => {
532
+ if (store.isLoaded()) {
533
+ await store.reload();
487
534
  }
488
535
  });
489
- });
490
- //
491
- merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => {
492
- if (store.isLoaded()) {
493
- await store.reload();
494
- }
495
- });
496
- },
497
- onDestroy() { },
498
- })));
536
+ editionSync = combineLatest([
537
+ sessionService.tenant$,
538
+ sessionService.application$,
539
+ sessionService.features$,
540
+ ])
541
+ .pipe(map(() => settingDefinitionService.getAvailabilityKey()), distinctUntilChanged())
542
+ .subscribe(() => {
543
+ void store.syncGroupsForEdition();
544
+ });
545
+ },
546
+ onDestroy() {
547
+ editionSync?.unsubscribe();
548
+ },
549
+ };
550
+ }));
499
551
 
500
552
  class AXPSettingSearchDefinitionProvider {
501
553
  async provide(context) {
@@ -521,10 +573,7 @@ class AXPSettingSearchProvider {
521
573
  this.translateService = inject(AXTranslationService);
522
574
  }
523
575
  async search(text) {
524
- const groupsSetting = this.settingsService.getList(AXPPlatformScope.User);
525
- if (groupsSetting.length == 0) {
526
- groupsSetting.push(...(await this.settingsService.getListAsync(AXPPlatformScope.User)));
527
- }
576
+ const groupsSetting = await this.settingsService.getListAsync(AXPPlatformScope.User);
528
577
  // Step 2: Flatten settings from groups
529
578
  const allSettings = [];
530
579
  const extractSettings = (group) => {
@@ -857,13 +906,13 @@ function routesFacory() {
857
906
  children: [
858
907
  {
859
908
  path: '',
860
- loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-page.component-Ck_FPVsq.mjs').then((c) => c.AXPSettingPageComponent),
909
+ loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-page.component-_U5tsnwC.mjs').then((c) => c.AXPSettingPageComponent),
861
910
  canDeactivate: [axpSettingsPageCanDeactivateGuard],
862
911
  data: { reuse: true },
863
912
  children: [
864
913
  {
865
914
  path: ':group',
866
- loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-view.component-BrUkHvXK.mjs').then((c) => c.AXPSettingsViewComponent),
915
+ loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-view.component-BioUodsz.mjs').then((c) => c.AXPSettingsViewComponent),
867
916
  data: { reuse: false },
868
917
  },
869
918
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-settings-management-client.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-row-visibility.util.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/convert-setting-data.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings.viewmodel.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/search-definition.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/search.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-page-can-deactivate.guard.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-scope.guard.ts","../../../../libs/modules/settings-management/client/src/lib/menu.provider.ts","../../../../libs/modules/settings-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/profile-page/settings-management-profile-sections.hook.ts","../../../../libs/modules/settings-management/client/src/lib/profile-slot-settings-menu.hook.ts","../../../../libs/modules/settings-management/client/src/lib/settings-management.module.ts","../../../../libs/modules/settings-management/client/src/acorex-platform-module-settings-management-client.ts"],"sourcesContent":["import type {\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionSection,\n} from '@acorex-platform/framework-client/common';\n\n/** Settings with `widget.options.visibility === false` are registered but omitted from the settings UI. */\nexport function isSettingStaticallyHidden(setting: AXPSettingDefinition): boolean {\n return setting.widget.options?.['visibility'] === false;\n}\n\nexport function filterSettingsPageVisibleSettings(settings: AXPSettingDefinition[]): AXPSettingDefinition[] {\n return settings.filter((setting) => !isSettingStaticallyHidden(setting));\n}\n\nexport function sectionHasSettingsPageVisibleRows(section: AXPSettingDefinitionSection): boolean {\n return filterSettingsPageVisibleSettings(section.settings).length > 0;\n}\n\n/** Drop statically hidden rows, then omit sections/groups that have nothing left to render. */\nexport function filterSettingsPageVisibleGroups(groups: AXPSettingDefinitionGroup[]): AXPSettingDefinitionGroup[] {\n return groups\n .map((group) => ({\n ...group,\n sections: group.sections\n .map((section) => ({\n ...section,\n settings: filterSettingsPageVisibleSettings(section.settings),\n }))\n .filter((section) => section.settings.length > 0),\n groups: filterSettingsPageVisibleGroups(group.groups),\n }))\n .filter((group) => group.sections.length > 0 || group.groups.length > 0);\n}\n","import { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection } from '@acorex-platform/framework-client/common';\nimport {\n filterSettingsPageVisibleSettings,\n sectionHasSettingsPageVisibleRows,\n} from './settings-row-visibility.util';\n\n/**\n * Filters setting groups for in-page search. When `settingSearchTextByKey` is provided (lowercased\n * translated blobs keyed by setting name), setting matches use it; otherwise a raw key fallback is used.\n */\nexport function searchSettings(\n groups: AXPSettingDefinitionGroup[],\n search: string,\n settingSearchTextByKey?: Record<string, string>,\n): AXPSettingDefinitionGroup[] {\n const trimmed = search?.trim() ?? '';\n if (!trimmed) {\n return [];\n }\n\n const normalizedSearch = trimmed.toLowerCase();\n const sectionMatchResult: AXPSettingDefinitionGroup[] = [];\n const settingMatchResult: AXPSettingDefinitionGroup[] = [];\n const processedGroups = new Set<string>();\n\n const createGroupIdentifier = (group: AXPSettingDefinitionGroup): string => `${group.name}-${group.title}`;\n\n const addGroupToResult = (\n group: AXPSettingDefinitionGroup,\n sections: AXPSettingDefinitionSection[],\n resultArray: AXPSettingDefinitionGroup[]\n ) => {\n const groupId = createGroupIdentifier(group);\n if (!processedGroups.has(groupId)) {\n resultArray.push({\n ...group,\n sections,\n groups: [], // Exclude nested groups\n });\n processedGroups.add(groupId);\n }\n };\n\n const processSections = (\n group: AXPSettingDefinitionGroup,\n filterFn: (section: AXPSettingDefinitionSection) => boolean\n ) => {\n const matchedSections = group.sections.filter(filterFn);\n if (matchedSections.length > 0) {\n addGroupToResult(group, matchedSections, sectionMatchResult);\n }\n };\n\n const processSettings = (\n group: AXPSettingDefinitionGroup,\n filterFn: (section: AXPSettingDefinitionSection) => AXPSettingDefinitionSection | null\n ) => {\n const matchedSections = group.sections\n .map(filterFn)\n .filter((section): section is AXPSettingDefinitionSection => section !== null);\n if (matchedSections.length > 0) {\n addGroupToResult(group, matchedSections, settingMatchResult);\n }\n };\n\n const sectionMatches = (section: AXPSettingDefinitionSection): boolean =>\n sectionHasSettingsPageVisibleRows(section) &&\n (section.name.toLowerCase().includes(normalizedSearch) ||\n section.title.toLowerCase().includes(normalizedSearch));\n\n const settingSearchBlob = (setting: AXPSettingDefinition): string => {\n const fromIndex = settingSearchTextByKey?.[setting.name];\n if (fromIndex) {\n return fromIndex;\n }\n return [setting.name, setting.title, setting.description ?? '', ...(setting.searchTagKeys ?? [])]\n .join(' ')\n .toLowerCase();\n };\n\n const filterSettings = (section: AXPSettingDefinitionSection): AXPSettingDefinitionSection | null => {\n const matchedSettings = filterSettingsPageVisibleSettings(section.settings).filter((setting) => {\n const blob = settingSearchBlob(setting);\n return (\n setting.name.toLowerCase().includes(normalizedSearch) ||\n blob.includes(normalizedSearch)\n );\n });\n return matchedSettings.length > 0 ? { ...section, settings: matchedSettings } : null;\n };\n\n const processGroupRecursively = (group: AXPSettingDefinitionGroup) => {\n processSections(group, sectionMatches); // Match sections with all settings\n processSettings(group, filterSettings); // Match settings within sections\n group.groups.forEach(processGroupRecursively); // Recurse into nested groups\n };\n\n groups.forEach(processGroupRecursively);\n\n return [...sectionMatchResult, ...settingMatchResult];\n}\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXFormComponent } from '@acorex/components/form';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionProviderService,\n AXPSettingDefinitionSection,\n AXPSettingsService,\n traceSettingsPageLoadComplete,\n traceSettingsPageLoadStarted,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPPlatformScope,\n AXPPlatformScopeKey,\n getSmart,\n resolvePlatformScopeName,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\n\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { cloneDeep, get, isEmpty, isEqual, isNil } from 'lodash';\nimport { filter, merge } from 'rxjs';\nimport { searchSettings } from './convert-setting-data';\nimport { filterSettingsPageVisibleGroups, isSettingStaticallyHidden } from './settings-row-visibility.util';\n\n/** Delay before reload so the success toast is visible. */\nconst PAGE_REFRESH_DELAY_MS = 500;\n\n/** Setting keys are flat (may contain dots). Prefer own-property, then smart path. */\nfunction readFlatSettingValue(context: Record<string, unknown>, key: string): unknown {\n if (Object.prototype.hasOwnProperty.call(context, key)) {\n return context[key];\n }\n return getSmart(context, key);\n}\n\nfunction collectSettingKeys(groups: AXPSettingDefinitionGroup[]): string[] {\n const keys: string[] = [];\n const walkSections = (sections: AXPSettingDefinitionSection[]) => {\n for (const section of sections) {\n for (const setting of section.settings) {\n keys.push(setting.name);\n }\n }\n };\n const walkGroups = (gs: AXPSettingDefinitionGroup[]) => {\n for (const group of gs) {\n walkSections(group.sections);\n walkGroups(group.groups);\n }\n };\n walkGroups(groups);\n return keys;\n}\n\nexport const AXPSettingsViewModel = signalStore(\n withState(() => ({\n groups: [] as AXPSettingDefinitionGroup[],\n activateGroup: undefined as AXPSettingDefinitionGroup | undefined,\n scope: 'U' as AXPPlatformScopeKey,\n //\n searchExpression: null as string | null,\n settingSearchTextByKey: {} as Record<string, string>,\n //\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n /** Synced from {@link AXPWidgetContainerComponent.isFormDirty}. */\n formDirty: false,\n /** Bumped after apply so the settings view can commit the container saved baseline. */\n applySyncNonce: 0,\n /** Suppresses container→VM dirty echo while post-save baseline sync runs. */\n syncingBaseline: false,\n /** Bumped after discard so the settings view can revert the container to saved. */\n discardSyncNonce: 0,\n //\n status: AXPPageStatus.Processing,\n form: null as AXFormComponent | null,\n })),\n withComputed((store, deviceService = inject(AXPDeviceService)) => ({\n searchResults: computed(() => {\n const q = store.searchExpression();\n if (q == null || !q.trim()) {\n return [];\n }\n return searchSettings(store.groups(), q, store.settingSearchTextByKey());\n }),\n hasActivateGroup: computed(() => store.activateGroup() != null),\n showGroups: computed(() => store.activateGroup() != null && deviceService.isLarge()),\n scopeTitle: computed(() => {\n return `${resolvePlatformScopeName(store.scope())}.title`;\n }),\n scopeDescription: computed(() => {\n return `${resolvePlatformScopeName(store.scope())}.description`;\n }),\n isSearching: computed(() => store.searchExpression() != null),\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isSaving: computed(() => store.status() == AXPPageStatus.Submitting),\n isLoaded: computed(() => store.groups().length > 0),\n isDirty: computed(() => store.formDirty()),\n })),\n withMethods(\n (\n store,\n settingDefinitionService = inject(AXPSettingDefinitionProviderService),\n settingValueService = inject(AXPSettingsService),\n toastService = inject(AXToastService),\n translateService = inject(AXTranslationService),\n ) => ({\n registerForm(form: AXFormComponent) {\n patchState(store, {\n form: form,\n });\n },\n async load(scope: AXPPlatformScopeKey) {\n traceSettingsPageLoadStarted(scope, 'settings-page-vm-load');\n const startedAt = Date.now();\n patchState(store, {\n scope: scope,\n status: AXPPageStatus.Processing,\n });\n try {\n const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(scope));\n patchState(store, {\n groups: groups,\n });\n await this.rebuildSettingSearchIndex();\n // Settings admin must bind server partition values. `all()` alone can reuse a warm\n // IndexedDB/memory snapshot that omits non-cacheable keys (e.g. SMTP).\n await settingValueService.reload(scope as AXPPlatformScope, 'settings-page-open');\n const currentContext = await settingValueService.scope(scope as AXPPlatformScope).all();\n const defaults = await settingValueService.scope(scope as AXPPlatformScope).defaultValues();\n const context = { ...defaults, ...currentContext };\n patchState(store, {\n context,\n previousContext: cloneDeep(context),\n formDirty: false,\n });\n traceSettingsPageLoadComplete({\n scope,\n groupCount: groups.length,\n valueKeyCount: Object.keys(store.context()).length,\n durationMs: Date.now() - startedAt,\n });\n } catch (error) {\n console.error('Settings page load failed', error);\n } finally {\n // Always leave Processing so Apply/Discard are not stuck disabled after a partial load.\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n }\n },\n async reload() {\n await settingDefinitionService.reload();\n const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(store.scope()));\n const oldActivateGroupName = store.activateGroup()?.name;\n patchState(store, {\n groups: groups,\n activateGroup: undefined,\n });\n if (oldActivateGroupName) {\n this.setActivateGroupByName(oldActivateGroupName);\n }\n await this.rebuildSettingSearchIndex();\n },\n async rebuildSettingSearchIndex() {\n const groups = store.groups();\n const map: Record<string, string> = {};\n const walkSections = async (sections: AXPSettingDefinitionSection[]) => {\n for (const section of sections) {\n for (const setting of section.settings) {\n if (isSettingStaticallyHidden(setting)) {\n continue;\n }\n const parts: string[] = [await translateService.translateAsync(setting.title)];\n if (setting.description) {\n parts.push(await translateService.translateAsync(setting.description));\n }\n if (setting.searchTagKeys?.length) {\n for (const key of setting.searchTagKeys) {\n parts.push(await translateService.translateAsync(key));\n }\n }\n map[setting.name] = parts.join(' ').toLowerCase();\n }\n }\n };\n const walkGroups = async (gs: AXPSettingDefinitionGroup[]) => {\n for (const g of gs) {\n await walkSections(g.sections);\n await walkGroups(g.groups);\n }\n };\n await walkGroups(groups);\n patchState(store, { settingSearchTextByKey: map });\n },\n updateContext(context: Record<string, any>) {\n patchState(store, {\n context,\n });\n },\n setFormDirty(dirty: boolean) {\n if (store.syncingBaseline() || store.formDirty() === dirty) {\n return;\n }\n patchState(store, {\n formDirty: dirty,\n });\n },\n setSyncingBaseline(syncing: boolean) {\n if (store.syncingBaseline() === syncing) {\n return;\n }\n patchState(store, {\n syncingBaseline: syncing,\n });\n },\n setActivateGroup(group: AXPSettingDefinitionGroup) {\n patchState(store, {\n activateGroup: group,\n formDirty: false,\n });\n },\n unloadActivateGroup() {\n patchState(store, {\n activateGroup: undefined,\n formDirty: false,\n });\n },\n setActivateGroupByName(name: string) {\n const group = store.groups().find((g) => g.name === name);\n if (group) {\n patchState(store, {\n activateGroup: group,\n formDirty: false,\n });\n }\n },\n //\n async search(expression: string) {\n if (!isNil(expression) && !isEmpty(expression)) {\n patchState(store, {\n searchExpression: expression,\n formDirty: false,\n });\n } else {\n patchState(store, {\n searchExpression: null,\n formDirty: false,\n });\n }\n },\n clearSearch() {\n patchState(store, {\n searchExpression: null,\n formDirty: false,\n });\n },\n async apply(): Promise<boolean> {\n const form = store.form();\n if (!form || !store.isDirty()) {\n return false;\n }\n\n form.resetErrors();\n patchState(store, {\n status: AXPPageStatus.Submitting,\n });\n\n try {\n const formResult = await form.validate();\n if (!formResult.result) {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:actions.apply.messages.invalid.title'),\n content: await translateService.translateAsync('@general:actions.apply.messages.invalid.message'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n return false;\n }\n\n // Persist only known flat setting keys. Context may contain nested parent objects\n // created by path-based writes (e.g. Common:Setting:Offline → { AllowWorkingOffline }).\n const settingKeys = collectSettingKeys(store.groups());\n const context = store.context();\n const previous = store.previousContext();\n const changedValues: Record<string, unknown> = {};\n for (const key of settingKeys) {\n const value = readFlatSettingValue(context, key);\n const previousValue = readFlatSettingValue(previous, key);\n if (!isEqual(value, previousValue)) {\n changedValues[key] = value;\n }\n }\n await settingValueService.scope(store.scope() as AXPPlatformScope).set(changedValues, { flush: true });\n\n const refreshByKey = await settingDefinitionService.requiresPageRefreshByKey();\n const needsPageRefresh = Object.keys(changedValues).some((key) => refreshByKey[key]);\n\n // Keep VM context flat for the next edit session (drop accidental nested parents).\n const nextContext: Record<string, unknown> = {};\n for (const key of settingKeys) {\n const value = Object.prototype.hasOwnProperty.call(changedValues, key)\n ? changedValues[key]\n : readFlatSettingValue(context, key);\n if (value !== undefined) {\n nextContext[key] = value;\n }\n }\n\n patchState(store, {\n status: AXPPageStatus.Rendered,\n context: nextContext,\n previousContext: cloneDeep(nextContext),\n formDirty: false,\n applySyncNonce: store.applySyncNonce() + 1,\n });\n\n const successTitleKey = needsPageRefresh\n ? '@settings-management:settings.actions.apply.reload.success.title'\n : '@settings-management:settings.actions.apply.success.title';\n const successMessageKey = needsPageRefresh\n ? '@settings-management:settings.actions.apply.reload.success.message'\n : '@settings-management:settings.actions.apply.success.message';\n\n toastService.show({\n color: 'success',\n title: await translateService.translateAsync(successTitleKey),\n content: await translateService.translateAsync(successMessageKey),\n location: 'bottom-center',\n closeButton: true,\n timeOut: needsPageRefresh ? PAGE_REFRESH_DELAY_MS : 3000,\n timeOutProgress: true,\n });\n\n if (needsPageRefresh) {\n setTimeout(() => location.reload(), PAGE_REFRESH_DELAY_MS);\n }\n\n return true;\n } catch {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@settings-management:settings.actions.apply.error.title'),\n content: await translateService.translateAsync('@settings-management:settings.actions.apply.error.message'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n return false;\n }\n },\n applySavedState(context: Record<string, unknown>) {\n const snapshot = cloneDeep(context);\n patchState(store, {\n context: snapshot,\n previousContext: snapshot,\n formDirty: false,\n });\n },\n\n async discard() {\n const form = store.form();\n form?.resetErrors();\n\n const snapshot = cloneDeep(store.previousContext());\n patchState(store, {\n status: AXPPageStatus.Rendered,\n context: snapshot,\n previousContext: snapshot,\n formDirty: false,\n syncingBaseline: true,\n discardSyncNonce: store.discardSyncNonce() + 1,\n });\n },\n async resetToDefault() {\n const defaults = await settingValueService.scope(store.scope() as AXPPlatformScope).defaultValues();\n patchState(store, {\n context: defaults,\n });\n //\n const result = await this.apply();\n if (!result) {\n this.discard();\n }\n },\n }),\n ),\n withHooks(\n (\n store,\n settingValueService = inject(AXPSettingsService),\n translationService = inject(AXTranslationService),\n localeService = inject(AXLocaleService),\n ) => ({\n async onInit() {\n //\n settingValueService.onChanged.pipe(filter((c) => c.scope == store.scope())).subscribe((e) => {\n e.keys.forEach((k) => {\n const currentValue = e.values[k];\n const contextValue = get(store.context(), k);\n const previousValue = get(store.previousContext(), k);\n if (!isEqual(previousValue, currentValue) || !isEqual(currentValue, contextValue)) {\n patchState(store, {\n previousContext: {\n ...store.previousContext(),\n [k]: currentValue,\n },\n context: {\n ...store.context(),\n [k]: currentValue,\n },\n formDirty: false,\n });\n }\n });\n });\n //\n merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => {\n if (store.isLoaded()) {\n await store.reload();\n }\n });\n },\n onDestroy() {},\n }),\n ),\n);\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '@acorex-platform/framework-client/common';\n\nexport class AXPSettingSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('setting', 'Setting', 'setting', 'fa-solid fa-gear', 3, {\n format: {\n id: '{{data.name}}',\n },\n actions: [\n {\n name: 'navigate',\n type: 'view',\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPSearchProvider,\n AXPSearchResult,\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionProviderService,\n} from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { sortBy } from 'lodash';\nimport { isSettingStaticallyHidden } from './settings-row-visibility.util';\n\nexport interface AXPSettingDefinitionSearch extends AXPSettingDefinition {\n group: AXPSettingDefinitionGroup;\n}\n\nexport class AXPSettingSearchProvider implements AXPSearchProvider {\n private settingsService = inject(AXPSettingDefinitionProviderService);\n private sessionService = inject(AXPSessionService);\n private translateService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const groupsSetting = this.settingsService.getList(AXPPlatformScope.User);\n if (groupsSetting.length == 0) {\n groupsSetting.push(...(await this.settingsService.getListAsync(AXPPlatformScope.User)));\n }\n\n // Step 2: Flatten settings from groups\n const allSettings: AXPSettingDefinitionSearch[] = [];\n const extractSettings = (group: AXPSettingDefinitionGroup) => {\n for (const section of group.sections) {\n allSettings.push(...section.settings.map((x) => ({ ...x, group } as AXPSettingDefinitionSearch)));\n }\n for (const subGroup of group.groups) {\n extractSettings(subGroup); // Recursive extraction\n }\n };\n\n for (const group of groupsSetting) {\n extractSettings(group);\n }\n\n const needle = text.trim().toLowerCase();\n if (!needle) {\n return [];\n }\n\n const translatedBlobs = await Promise.all(\n allSettings.map(async (setting) => {\n const parts: string[] = [await this.translateService.translateAsync(setting.title)];\n if (setting.description) {\n parts.push(await this.translateService.translateAsync(setting.description));\n }\n if (setting.searchTagKeys?.length) {\n for (const key of setting.searchTagKeys) {\n parts.push(await this.translateService.translateAsync(key));\n }\n }\n return parts.join(' ').toLowerCase();\n }),\n );\n\n const searchResults = allSettings.filter(\n (setting, i) =>\n !isSettingStaticallyHidden(setting) &&\n (translatedBlobs[i].includes(needle) || setting.name.toLowerCase().includes(needle)),\n );\n\n return sortBy(\n searchResults.map<AXPSearchResult>((setting) => ({\n title: setting.title,\n description: setting.description,\n group: 'setting',\n data: setting,\n command: {\n name: 'navigate',\n options: {\n type: 'router',\n options: {\n path: `/${this.sessionService.application?.name}/settings/user/${setting.group.name}#${setting.title}`,\n },\n }\n },\n parent: setting.group\n ? {\n title: setting.group.title,\n data: setting.group as AXPSettingDefinitionGroup,\n }\n : undefined,\n })),\n ['title']\n );\n }\n}\n","import { createUnsavedChangesCanDeactivateGuard } from '@acorex-platform/framework-client/common';\nimport { AXPSettingPageComponent } from './setting-page/setting-page.component';\n\n//#region ---- Settings Page Can Deactivate Guard ----\n\nexport const axpSettingsPageCanDeactivateGuard = createUnsavedChangesCanDeactivateGuard<AXPSettingPageComponent>();\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXP_UNAUTHORIZED_ROUTE } from '@acorex-platform/framework-client/common';\nimport { AXPApplicationsPlatformPermissionKeys } from '@acorex-platform/module-settings-management-client/contracts';\nimport { resolvePlatformScopeKey } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { first, map } from 'rxjs';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst SCOPE_PERMISSIONS: Record<string, string | null> = {\n P: AXPApplicationsPlatformPermissionKeys.MaintainPlatformSettings,\n T: AXPApplicationsPlatformPermissionKeys.MaintainTenantSettings,\n // Own user settings — always allowed once authenticated.\n U: null,\n};\n\n//#endregion\n\n//#region ----- Guard -----\n\n/**\n * Enforces settings-scope capabilities on direct URL navigation.\n * Menu visibility alone is not enough — hidden Platform Settings items are not\n * menu-matched, so {@link AXPMenuRouteGuard} would otherwise allow the route.\n */\nexport const axpSettingsScopeCanActivateGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n const sessionService = inject(AXPSessionService);\n const router = inject(Router);\n\n return sessionService.isAuthorizedWithLoading$.pipe(\n first(),\n map((): boolean | UrlTree => {\n const scopeParam = resolveScopeParam(route);\n const scopeKey = resolvePlatformScopeKey(scopeParam);\n const requiredPermission = SCOPE_PERMISSIONS[scopeKey];\n\n if (!requiredPermission) {\n return true;\n }\n\n if (sessionService.authorize(requiredPermission)) {\n return true;\n }\n\n return router.parseUrl(AXP_UNAUTHORIZED_ROUTE);\n }),\n );\n};\n\nfunction resolveScopeParam(route: ActivatedRouteSnapshot): string {\n let current: ActivatedRouteSnapshot | null = route;\n while (current) {\n const scope = current.paramMap.get('scope');\n if (scope) {\n return scope;\n }\n current = current.parent;\n }\n return '';\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n AXPApplicationsPlatformPermissionKeys,\n AXPSettingsManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-settings-management-client/contracts';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const appName = this.sessionService.application?.name;\n\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n // Platform Settings — platform console only (not tenant admins).\n context.find(AXPCommonMenuKeys.Platform).addItems([\n {\n name: AXPSettingsManagementMenuKeys.PlatformSettings,\n priority: 999,\n text: '@settings-management:module.terms.scopes.platform.title',\n type: 'menu',\n icon: 'fa-light fa-gear',\n path: `/${appName}/settings/platform`,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPApplicationsPlatformPermissionKeys.MaintainPlatformSettings],\n },\n },\n ]);\n\n // Tenant Settings — under Administration; own user settings are profile-only (no menu policy).\n context.find(AXPCommonMenuKeys.Administration).addItems([\n { name: `${AXPSettingsManagementMenuKeys.TenantApplicationSettings}:divider`, text: '', type: 'break', priority: 998 },\n {\n name: AXPSettingsManagementMenuKeys.TenantApplicationSettings,\n priority: 999,\n text: '@settings-management:module.terms.scopes.tenant.title',\n type: 'menu',\n icon: 'fa-light fa-gear',\n path: `/${appName}/settings/tenant`,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPApplicationsPlatformPermissionKeys.MaintainTenantSettings],\n },\n },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPApplicationsPlatformPermissionKeys\n} from '@acorex-platform/module-settings-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers tenant settings under Administration and platform settings under\n * Applications & Platform. Own user settings are not registered — always available\n * to the signed-in user.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPApplicationsPlatformPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:applications-platform.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, {\n order: 120,\n });\n context.addGroup(groups.ApplicationsPlatform.Root, `${G}.applications-platform.title`, `${G}.applications-platform.description`, {\n order: 110,\n });\n\n context\n .addGroup(\n groups.Administration.Settings,\n `${G}.administration-settings.title`,\n `${G}.administration-settings.description`,\n { parent: groups.Administration.Root, order: 15 },\n )\n .addPermission(keys.MaintainTenantSettings, `${P}.maintain-tenant-settings.title`, `${P}.maintain-tenant-settings.description`, {\n modules: ['SettingsManagement'],\n })\n .endPermission()\n .endGroup();\n\n context\n .addGroup(\n groups.ApplicationsPlatform.Configuration,\n `${G}.applications-platform-configuration.title`,\n `${G}.applications-platform-configuration.description`,\n { parent: groups.ApplicationsPlatform.Root, order: 30 },\n )\n .addPermission(keys.MaintainPlatformSettings, `${P}.maintain-platform-settings.title`, `${P}.maintain-platform-settings.description`, {\n modules: ['PlatformManagement'],\n requiredFeatures: ['PlatformManagement'],\n })\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXMSettingsManagementCommandKeys } from '@acorex-platform/module-settings-management-client/contracts';\r\nimport { inject } from '@angular/core';\r\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\r\n\r\n//#region ---- Types ----\r\n\r\ntype ProfileSectionsPayload = {\r\n sections: Record<string, unknown>[];\r\n groupId?: string;\r\n};\r\n\r\n//#endregion\r\n\r\n//#region ---- Settings management profile sections ----\r\n\r\n/** Contributes settings-related sections to the user profile hub. */\r\nexport const SettingsManagementProfileSectionsHookProvider: AXPHookProvider<\r\n ProfileSectionsPayload,\r\n ProfileSectionsPayload\r\n> = {\r\n key: 'profile-page.sections',\r\n priority: 10,\r\n execute: (payload) => {\r\n if (payload.groupId && payload.groupId !== 'account') {\r\n return payload;\r\n }\r\n\r\n const commandService = inject(AXPCommandService);\r\n const sessionService = inject(AXPSessionService);\r\n const appName = sessionService.application?.name;\r\n\r\n const sections: Record<string, unknown>[] = [];\r\n\r\n if (commandService.exists(AXMSettingsManagementCommandKeys.Client.Export)) {\r\n sections.push({\r\n id: 'export-data',\r\n groupId: 'account',\r\n title: '@settings-management:profile-page.sections.export-data.title',\r\n description: '@settings-management:profile-page.sections.export-data.description',\r\n icon: 'far fa-file-export',\r\n priority: 30,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'export-local-data',\r\n title: '@settings-management:profile-page.sections.export-data.actions.manage',\r\n icon: 'far fa-download',\r\n command: { name: AXMSettingsManagementCommandKeys.Client.Export },\r\n },\r\n ],\r\n });\r\n }\r\n\r\n if (appName) {\r\n sections.push({\r\n id: 'all-preferences',\r\n groupId: 'account',\r\n title: '@settings-management:profile-page.sections.all-preferences.title',\r\n description: '@settings-management:profile-page.sections.all-preferences.description',\r\n icon: 'far fa-sliders',\r\n priority: 40,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'view-all-preferences',\r\n title: '@settings-management:profile-page.sections.all-preferences.actions.manage',\r\n icon: 'far fa-arrow-right',\r\n command: {\r\n name: 'navigate',\r\n options: { path: `/${appName}/settings/user` },\r\n },\r\n },\r\n ],\r\n });\r\n }\r\n\r\n if (!sections.length) {\r\n return payload;\r\n }\r\n\r\n return {\r\n ...payload,\r\n sections: [...payload.sections, ...sections],\r\n };\r\n },\r\n};\r\n\r\n//#endregion\r\n","import { AXPActionMenuItem } from '@acorex-platform/framework-shared/core';\r\nimport { inject } from '@angular/core';\r\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\n\r\n//#region ---- Profile slot settings menu hook ----\r\n\r\n/** Registers the user settings entry in the profile dropdown (always available; no permission). */\r\nexport const ProfileSlotSettingsMenuHookProvider: AXPHookProvider<\r\n { items: AXPActionMenuItem[] },\r\n { items: AXPActionMenuItem[] }\r\n> = {\r\n key: 'profile-slot.menu-items',\r\n priority: 0,\r\n execute: (payload) => {\r\n const sessionService = inject(AXPSessionService);\r\n const appName = sessionService.application?.name;\r\n\r\n if (!appName) {\r\n return payload;\r\n }\r\n\r\n return {\r\n ...payload,\r\n items: [\r\n ...payload.items,\r\n {\r\n name: 'settings',\r\n title: '@auth:profile.settings',\r\n icon: 'fa-light fa-gear',\r\n shortcuts: [{ keys: 'ctrl+shift+u', allowInEditableFields: true }],\r\n command: {\r\n name: 'navigate',\r\n options: {\r\n path: `/${appName}/settings/user`,\r\n },\r\n },\r\n } satisfies AXPActionMenuItem,\r\n ],\r\n };\r\n },\r\n};\r\n\r\n//#endregion\r\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\r\nimport {\r\n AXP_MENU_PROVIDER,\r\n AXP_PROTECTED_ROUTE_GUARDS,\r\n AXP_SEARCH_DEFINITION_PROVIDER,\r\n AXP_SEARCH_PROVIDER,\r\n AXP_SETTINGS_SYNC_KEYS,\r\n AXPPlatformSettingsLoadState,\r\n AXPPlatformSettingsOfflineBootstrapService,\r\n AXPSettingsService,\r\n traceSettingsAppStartupLoadComplete,\r\n traceSettingsAppStartupLoadStarted,\r\n} from '@acorex-platform/framework-client/common';\r\nimport {\r\n AXPAppStartUpService,\r\n AXP_APP_STARTUP_PRIORITY,\r\n AXP_HOOK_PROVIDER,\r\n} from '@acorex-platform/framework-client/core';\r\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\r\nimport { NgModule } from '@angular/core';\r\nimport { Routes, ROUTES } from '@angular/router';\r\nimport { AXPSettingSearchDefinitionProvider } from './features/settings/search-definition.provider';\r\nimport { AXPSettingSearchProvider } from './features/settings/search.provider';\r\nimport { axpSettingsPageCanDeactivateGuard } from './features/settings/settings-page-can-deactivate.guard';\r\nimport { axpSettingsScopeCanActivateGuard } from './features/settings/settings-scope.guard';\r\nimport { AXMMenuProvider } from './menu.provider';\r\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\r\nimport { SettingsManagementProfileSectionsHookProvider } from './features/profile-page/settings-management-profile-sections.hook';\r\nimport { ProfileSlotSettingsMenuHookProvider } from './profile-slot-settings-menu.hook';\r\nimport { axmSettingsSyncKeys } from '@acorex-platform/module-settings-management-client/contracts';\r\nimport { AXCRuntimeRemoteApiModule } from '@acorex-platform/client-connectivity-api';\r\n\r\n//#region ----- Constants -----\r\n\r\nconst PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS = 5;\r\nconst PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS = 2_000;\r\n\r\n//#endregion\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n\r\nasync function loadPlatformSettingsWithRetry(\r\n settingsService: AXPSettingsService,\r\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\r\n): Promise<void> {\r\n // Device offline — skip retries and go straight to offline / unavailable handling.\r\n if (offlineBootstrap.isDeviceOffline()) {\r\n throw new Error('Device is offline');\r\n }\r\n\r\n let lastError: unknown;\r\n for (let attempt = 1; attempt <= PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS; attempt++) {\r\n try {\r\n await settingsService.ensurePlatformSettingsLoaded();\r\n return;\r\n } catch (error) {\r\n lastError = error;\r\n console.error(\r\n `Platform settings bootstrap failed (attempt ${attempt}/${PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS})`,\r\n error,\r\n );\r\n if (offlineBootstrap.isDeviceOffline()) {\r\n throw error;\r\n }\r\n if (attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS) {\r\n await sleep(PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS);\r\n }\r\n }\r\n }\r\n throw lastError;\r\n}\r\n\r\nfunction routesFacory() {\r\n let routes: Routes = [\r\n {\r\n path: ':app/settings/:scope',\r\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS, axpSettingsScopeCanActivateGuard],\r\n data: { tab: true, rootLayout: true },\r\n loadComponent: () => {\r\n return AXPRootLayoutComponent;\r\n },\r\n children: [\r\n {\r\n path: '',\r\n loadComponent: () =>\r\n import('./features/settings/setting-page/setting-page.component').then((c) => c.AXPSettingPageComponent),\r\n canDeactivate: [axpSettingsPageCanDeactivateGuard],\r\n data: { reuse: true },\r\n children: [\r\n {\r\n path: ':group',\r\n loadComponent: () =>\r\n import('./features/settings/setting-view/setting-view.component').then(\r\n (c) => c.AXPSettingsViewComponent,\r\n ),\r\n data: { reuse: false },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ];\r\n return routes;\r\n}\r\n\r\n@NgModule({\r\n imports: [AXCRuntimeRemoteApiModule],\r\n exports: [],\r\n declarations: [],\r\n providers: [\r\n {\r\n provide: AXP_SETTINGS_SYNC_KEYS,\r\n useValue: axmSettingsSyncKeys,\r\n },\r\n {\r\n provide: AXP_SEARCH_PROVIDER,\r\n useClass: AXPSettingSearchProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\r\n useClass: AXPSettingSearchDefinitionProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: ROUTES,\r\n multi: true,\r\n useFactory: routesFacory,\r\n },\r\n {\r\n provide: AXP_MENU_PROVIDER,\r\n useClass: AXMMenuProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\r\n useClass: AXMPermissionDefinitionProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: ProfileSlotSettingsMenuHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: SettingsManagementProfileSectionsHookProvider,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class AXMSettingsManagementModule {\r\n constructor(\r\n appInitService: AXPAppStartUpService,\r\n settingsService: AXPSettingsService,\r\n platformSettingsLoadState: AXPPlatformSettingsLoadState,\r\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\r\n ) {\r\n appInitService.registerTask({\r\n name: 'platform-settings',\r\n priority: AXP_APP_STARTUP_PRIORITY.platformSettings,\r\n run: async () => {\r\n try {\r\n await loadPlatformSettingsWithRetry(settingsService, offlineBootstrap);\r\n platformSettingsLoadState.clear();\r\n } catch (error) {\r\n console.error('Platform settings bootstrap failed after retries', error);\r\n // Never open dialogs here (APP_INITIALIZER — overlay host is null).\r\n // Only inspect IndexedDB; confirm runs later after the app is stable.\r\n let canOfferOffline = false;\r\n try {\r\n canOfferOffline = await offlineBootstrap.canOfferOfflineContinue();\r\n } catch (offlineError) {\r\n console.error('Offline continue cache check failed', offlineError);\r\n }\r\n if (canOfferOffline) {\r\n platformSettingsLoadState.setPendingOfflineContinue(error);\r\n } else {\r\n platformSettingsLoadState.setFailure(error);\r\n }\r\n // Keep only platform-settings-failure-redirect; skip Settings/regional/theme (they hang on API).\r\n appInitService.abortRemainingStartupTasks();\r\n }\r\n },\r\n });\r\n\r\n appInitService.registerTask({\r\n name: 'Settings',\r\n statusText: '@settings-management:app-startup.loading-settings',\r\n priority: AXP_APP_STARTUP_PRIORITY.settings,\r\n run: async () => {\r\n if (\r\n platformSettingsLoadState.hasFailure() ||\r\n platformSettingsLoadState.hasPendingOfflineContinue() ||\r\n platformSettingsLoadState.isOfflineMode()\r\n ) {\r\n return;\r\n }\r\n traceSettingsAppStartupLoadStarted();\r\n const startedAt = Date.now();\r\n const settings = await settingsService.load('app-startup');\r\n traceSettingsAppStartupLoadComplete({\r\n totalKeys: settings.length,\r\n keysByScope: {},\r\n durationMs: Date.now() - startedAt,\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-settings-management-client.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-row-visibility.util.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/convert-setting-data.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings.viewmodel.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/search-definition.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/search.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-page-can-deactivate.guard.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-scope.guard.ts","../../../../libs/modules/settings-management/client/src/lib/menu.provider.ts","../../../../libs/modules/settings-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/settings-management/client/src/lib/features/profile-page/settings-management-profile-sections.hook.ts","../../../../libs/modules/settings-management/client/src/lib/profile-slot-settings-menu.hook.ts","../../../../libs/modules/settings-management/client/src/lib/settings-management.module.ts","../../../../libs/modules/settings-management/client/src/acorex-platform-module-settings-management-client.ts"],"sourcesContent":["import type {\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionSection,\n} from '@acorex-platform/framework-client/common';\n\n/** Settings with `widget.options.visibility === false` are registered but omitted from the settings UI. */\nexport function isSettingStaticallyHidden(setting: AXPSettingDefinition): boolean {\n return setting.widget.options?.['visibility'] === false;\n}\n\nexport function filterSettingsPageVisibleSettings(settings: AXPSettingDefinition[]): AXPSettingDefinition[] {\n return settings.filter((setting) => !isSettingStaticallyHidden(setting));\n}\n\nexport function sectionHasSettingsPageVisibleRows(section: AXPSettingDefinitionSection): boolean {\n return filterSettingsPageVisibleSettings(section.settings).length > 0;\n}\n\n/** Drop statically hidden rows, then omit sections/groups that have nothing left to render. */\nexport function filterSettingsPageVisibleGroups(groups: AXPSettingDefinitionGroup[]): AXPSettingDefinitionGroup[] {\n return groups\n .map((group) => ({\n ...group,\n sections: group.sections\n .map((section) => ({\n ...section,\n settings: filterSettingsPageVisibleSettings(section.settings),\n }))\n .filter((section) => section.settings.length > 0),\n groups: filterSettingsPageVisibleGroups(group.groups),\n }))\n .filter((group) => group.sections.length > 0 || group.groups.length > 0);\n}\n","import { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection } from '@acorex-platform/framework-client/common';\nimport {\n filterSettingsPageVisibleSettings,\n sectionHasSettingsPageVisibleRows,\n} from './settings-row-visibility.util';\n\n/**\n * Filters setting groups for in-page search. When `settingSearchTextByKey` is provided (lowercased\n * translated blobs keyed by setting name), setting matches use it; otherwise a raw key fallback is used.\n */\nexport function searchSettings(\n groups: AXPSettingDefinitionGroup[],\n search: string,\n settingSearchTextByKey?: Record<string, string>,\n): AXPSettingDefinitionGroup[] {\n const trimmed = search?.trim() ?? '';\n if (!trimmed) {\n return [];\n }\n\n const normalizedSearch = trimmed.toLowerCase();\n const sectionMatchResult: AXPSettingDefinitionGroup[] = [];\n const settingMatchResult: AXPSettingDefinitionGroup[] = [];\n const processedGroups = new Set<string>();\n\n const createGroupIdentifier = (group: AXPSettingDefinitionGroup): string => `${group.name}-${group.title}`;\n\n const addGroupToResult = (\n group: AXPSettingDefinitionGroup,\n sections: AXPSettingDefinitionSection[],\n resultArray: AXPSettingDefinitionGroup[]\n ) => {\n const groupId = createGroupIdentifier(group);\n if (!processedGroups.has(groupId)) {\n resultArray.push({\n ...group,\n sections,\n groups: [], // Exclude nested groups\n });\n processedGroups.add(groupId);\n }\n };\n\n const processSections = (\n group: AXPSettingDefinitionGroup,\n filterFn: (section: AXPSettingDefinitionSection) => boolean\n ) => {\n const matchedSections = group.sections.filter(filterFn);\n if (matchedSections.length > 0) {\n addGroupToResult(group, matchedSections, sectionMatchResult);\n }\n };\n\n const processSettings = (\n group: AXPSettingDefinitionGroup,\n filterFn: (section: AXPSettingDefinitionSection) => AXPSettingDefinitionSection | null\n ) => {\n const matchedSections = group.sections\n .map(filterFn)\n .filter((section): section is AXPSettingDefinitionSection => section !== null);\n if (matchedSections.length > 0) {\n addGroupToResult(group, matchedSections, settingMatchResult);\n }\n };\n\n const sectionMatches = (section: AXPSettingDefinitionSection): boolean =>\n sectionHasSettingsPageVisibleRows(section) &&\n (section.name.toLowerCase().includes(normalizedSearch) ||\n section.title.toLowerCase().includes(normalizedSearch));\n\n const settingSearchBlob = (setting: AXPSettingDefinition): string => {\n const fromIndex = settingSearchTextByKey?.[setting.name];\n if (fromIndex) {\n return fromIndex;\n }\n return [setting.name, setting.title, setting.description ?? '', ...(setting.searchTagKeys ?? [])]\n .join(' ')\n .toLowerCase();\n };\n\n const filterSettings = (section: AXPSettingDefinitionSection): AXPSettingDefinitionSection | null => {\n const matchedSettings = filterSettingsPageVisibleSettings(section.settings).filter((setting) => {\n const blob = settingSearchBlob(setting);\n return (\n setting.name.toLowerCase().includes(normalizedSearch) ||\n blob.includes(normalizedSearch)\n );\n });\n return matchedSettings.length > 0 ? { ...section, settings: matchedSettings } : null;\n };\n\n const processGroupRecursively = (group: AXPSettingDefinitionGroup) => {\n processSections(group, sectionMatches); // Match sections with all settings\n processSettings(group, filterSettings); // Match settings within sections\n group.groups.forEach(processGroupRecursively); // Recurse into nested groups\n };\n\n groups.forEach(processGroupRecursively);\n\n return [...sectionMatchResult, ...settingMatchResult];\n}\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXFormComponent } from '@acorex/components/form';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport {\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionProviderService,\n AXPSettingDefinitionSection,\n AXPSettingsService,\n traceSettingsPageLoadComplete,\n traceSettingsPageLoadStarted,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPPlatformScope,\n AXPPlatformScopeKey,\n getSmart,\n resolvePlatformScopeName,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\n\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { cloneDeep, get, isEmpty, isEqual, isNil } from 'lodash';\nimport { combineLatest, distinctUntilChanged, filter, map, merge, type Subscription } from 'rxjs';\nimport { searchSettings } from './convert-setting-data';\nimport { filterSettingsPageVisibleGroups, isSettingStaticallyHidden } from './settings-row-visibility.util';\n\n/** Delay before reload so the success toast is visible. */\nconst PAGE_REFRESH_DELAY_MS = 500;\n\n/** Setting keys are flat (may contain dots). Prefer own-property, then smart path. */\nfunction readFlatSettingValue(context: Record<string, unknown>, key: string): unknown {\n if (Object.prototype.hasOwnProperty.call(context, key)) {\n return context[key];\n }\n return getSmart(context, key);\n}\n\nfunction collectSettingKeys(groups: AXPSettingDefinitionGroup[]): string[] {\n const keys: string[] = [];\n const walkSections = (sections: AXPSettingDefinitionSection[]) => {\n for (const section of sections) {\n for (const setting of section.settings) {\n keys.push(setting.name);\n }\n }\n };\n const walkGroups = (gs: AXPSettingDefinitionGroup[]) => {\n for (const group of gs) {\n walkSections(group.sections);\n walkGroups(group.groups);\n }\n };\n walkGroups(groups);\n return keys;\n}\n\nexport const AXPSettingsViewModel = signalStore(\n withState(() => ({\n groups: [] as AXPSettingDefinitionGroup[],\n activateGroup: undefined as AXPSettingDefinitionGroup | undefined,\n scope: 'U' as AXPPlatformScopeKey,\n //\n searchExpression: null as string | null,\n settingSearchTextByKey: {} as Record<string, string>,\n //\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n /** Synced from {@link AXPWidgetContainerComponent.isFormDirty}. */\n formDirty: false,\n /** Bumped after apply so the settings view can commit the container saved baseline. */\n applySyncNonce: 0,\n /** Suppresses container→VM dirty echo while post-save baseline sync runs. */\n syncingBaseline: false,\n /** Bumped after discard so the settings view can revert the container to saved. */\n discardSyncNonce: 0,\n //\n status: AXPPageStatus.Processing,\n form: null as AXFormComponent | null,\n /** Edition catalog identity last applied to `groups`. Empty until the first successful load. */\n editionAvailabilityKey: '',\n })),\n withComputed((store, deviceService = inject(AXPDeviceService)) => ({\n searchResults: computed(() => {\n const q = store.searchExpression();\n if (q == null || !q.trim()) {\n return [];\n }\n return searchSettings(store.groups(), q, store.settingSearchTextByKey());\n }),\n hasActivateGroup: computed(() => store.activateGroup() != null),\n showGroups: computed(() => store.activateGroup() != null && deviceService.isLarge()),\n scopeTitle: computed(() => {\n return `${resolvePlatformScopeName(store.scope())}.title`;\n }),\n scopeDescription: computed(() => {\n return `${resolvePlatformScopeName(store.scope())}.description`;\n }),\n isSearching: computed(() => store.searchExpression() != null),\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isSaving: computed(() => store.status() == AXPPageStatus.Submitting),\n isLoaded: computed(() => store.groups().length > 0),\n isDirty: computed(() => store.formDirty()),\n })),\n withMethods(\n (\n store,\n settingDefinitionService = inject(AXPSettingDefinitionProviderService),\n settingValueService = inject(AXPSettingsService),\n toastService = inject(AXToastService),\n translateService = inject(AXTranslationService),\n ) => ({\n registerForm(form: AXFormComponent) {\n patchState(store, {\n form: form,\n });\n },\n async load(scope: AXPPlatformScopeKey) {\n traceSettingsPageLoadStarted(scope, 'settings-page-vm-load');\n const startedAt = Date.now();\n patchState(store, {\n scope: scope,\n status: AXPPageStatus.Processing,\n });\n let fetchedAvailabilityKey = '';\n try {\n const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(scope));\n fetchedAvailabilityKey = settingDefinitionService.getAvailabilityKey();\n patchState(store, {\n groups: groups,\n });\n await this.rebuildSettingSearchIndex();\n // Settings admin must bind server partition values. `all()` alone can reuse a warm\n // IndexedDB/memory snapshot that omits non-cacheable keys (e.g. SMTP).\n await settingValueService.reload(scope as AXPPlatformScope, 'settings-page-open');\n const currentContext = await settingValueService.scope(scope as AXPPlatformScope).all();\n const defaults = await settingValueService.scope(scope as AXPPlatformScope).defaultValues();\n const context = { ...defaults, ...currentContext };\n patchState(store, {\n context,\n previousContext: cloneDeep(context),\n formDirty: false,\n });\n traceSettingsPageLoadComplete({\n scope,\n groupCount: groups.length,\n valueKeyCount: Object.keys(store.context()).length,\n durationMs: Date.now() - startedAt,\n });\n } catch (error) {\n console.error('Settings page load failed', error);\n } finally {\n const latestAvailabilityKey = settingDefinitionService.getAvailabilityKey();\n if (fetchedAvailabilityKey && latestAvailabilityKey !== fetchedAvailabilityKey) {\n const groups = filterSettingsPageVisibleGroups(\n await settingDefinitionService.getListAsync(store.scope()),\n );\n patchState(store, { groups });\n }\n // Always leave Processing so Apply/Discard are not stuck disabled after a partial load.\n patchState(store, {\n status: AXPPageStatus.Rendered,\n editionAvailabilityKey: settingDefinitionService.getAvailabilityKey(),\n });\n }\n },\n /**\n * Edition features arrived after the page was already open.\n * Refreshes the in-memory catalog only — setting values stay on their existing load.\n */\n async syncGroupsForEdition(): Promise<void> {\n if (store.status() !== AXPPageStatus.Rendered) {\n return;\n }\n const availabilityKey = settingDefinitionService.getAvailabilityKey();\n if (!availabilityKey || availabilityKey === store.editionAvailabilityKey()) {\n return;\n }\n const groups = filterSettingsPageVisibleGroups(\n await settingDefinitionService.getListAsync(store.scope()),\n );\n const previousName = store.activateGroup()?.name;\n const defaults = await settingValueService.scope(store.scope() as AXPPlatformScope).defaultValues();\n const nextGroup = previousName ? groups.find((group) => group.name === previousName) : undefined;\n patchState(store, {\n groups,\n activateGroup: nextGroup,\n context: { ...defaults, ...store.context() },\n previousContext: { ...defaults, ...store.previousContext() },\n editionAvailabilityKey: settingDefinitionService.getAvailabilityKey(),\n });\n await this.rebuildSettingSearchIndex();\n },\n async reload() {\n await settingDefinitionService.reload();\n const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(store.scope()));\n const oldActivateGroupName = store.activateGroup()?.name;\n patchState(store, {\n groups: groups,\n activateGroup: undefined,\n });\n if (oldActivateGroupName) {\n this.setActivateGroupByName(oldActivateGroupName);\n }\n patchState(store, {\n editionAvailabilityKey: settingDefinitionService.getAvailabilityKey(),\n });\n await this.rebuildSettingSearchIndex();\n },\n async rebuildSettingSearchIndex() {\n const groups = store.groups();\n const map: Record<string, string> = {};\n const walkSections = async (sections: AXPSettingDefinitionSection[]) => {\n for (const section of sections) {\n for (const setting of section.settings) {\n if (isSettingStaticallyHidden(setting)) {\n continue;\n }\n const parts: string[] = [await translateService.translateAsync(setting.title)];\n if (setting.description) {\n parts.push(await translateService.translateAsync(setting.description));\n }\n if (setting.searchTagKeys?.length) {\n for (const key of setting.searchTagKeys) {\n parts.push(await translateService.translateAsync(key));\n }\n }\n map[setting.name] = parts.join(' ').toLowerCase();\n }\n }\n };\n const walkGroups = async (gs: AXPSettingDefinitionGroup[]) => {\n for (const g of gs) {\n await walkSections(g.sections);\n await walkGroups(g.groups);\n }\n };\n await walkGroups(groups);\n patchState(store, { settingSearchTextByKey: map });\n },\n updateContext(context: Record<string, any>) {\n patchState(store, {\n context,\n });\n },\n setFormDirty(dirty: boolean) {\n if (store.syncingBaseline() || store.formDirty() === dirty) {\n return;\n }\n patchState(store, {\n formDirty: dirty,\n });\n },\n setSyncingBaseline(syncing: boolean) {\n if (store.syncingBaseline() === syncing) {\n return;\n }\n patchState(store, {\n syncingBaseline: syncing,\n });\n },\n setActivateGroup(group: AXPSettingDefinitionGroup) {\n patchState(store, {\n activateGroup: group,\n formDirty: false,\n });\n },\n unloadActivateGroup() {\n patchState(store, {\n activateGroup: undefined,\n formDirty: false,\n });\n },\n setActivateGroupByName(name: string) {\n const group = store.groups().find((g) => g.name === name);\n if (group) {\n patchState(store, {\n activateGroup: group,\n formDirty: false,\n });\n }\n },\n //\n async search(expression: string) {\n if (!isNil(expression) && !isEmpty(expression)) {\n patchState(store, {\n searchExpression: expression,\n formDirty: false,\n });\n } else {\n patchState(store, {\n searchExpression: null,\n formDirty: false,\n });\n }\n },\n clearSearch() {\n patchState(store, {\n searchExpression: null,\n formDirty: false,\n });\n },\n async apply(): Promise<boolean> {\n const form = store.form();\n if (!form || !store.isDirty()) {\n return false;\n }\n\n form.resetErrors();\n patchState(store, {\n status: AXPPageStatus.Submitting,\n });\n\n try {\n const formResult = await form.validate();\n if (!formResult.result) {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:actions.apply.messages.invalid.title'),\n content: await translateService.translateAsync('@general:actions.apply.messages.invalid.message'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n return false;\n }\n\n // Persist only known flat setting keys. Context may contain nested parent objects\n // created by path-based writes (e.g. Common:Setting:Offline → { AllowWorkingOffline }).\n const settingKeys = collectSettingKeys(store.groups());\n const context = store.context();\n const previous = store.previousContext();\n const changedValues: Record<string, unknown> = {};\n for (const key of settingKeys) {\n const value = readFlatSettingValue(context, key);\n const previousValue = readFlatSettingValue(previous, key);\n if (!isEqual(value, previousValue)) {\n changedValues[key] = value;\n }\n }\n await settingValueService.scope(store.scope() as AXPPlatformScope).set(changedValues, { flush: true });\n\n const refreshByKey = await settingDefinitionService.requiresPageRefreshByKey();\n const needsPageRefresh = Object.keys(changedValues).some((key) => refreshByKey[key]);\n\n // Keep VM context flat for the next edit session (drop accidental nested parents).\n const nextContext: Record<string, unknown> = {};\n for (const key of settingKeys) {\n const value = Object.prototype.hasOwnProperty.call(changedValues, key)\n ? changedValues[key]\n : readFlatSettingValue(context, key);\n if (value !== undefined) {\n nextContext[key] = value;\n }\n }\n\n patchState(store, {\n status: AXPPageStatus.Rendered,\n context: nextContext,\n previousContext: cloneDeep(nextContext),\n formDirty: false,\n applySyncNonce: store.applySyncNonce() + 1,\n });\n\n const successTitleKey = needsPageRefresh\n ? '@settings-management:settings.actions.apply.reload.success.title'\n : '@settings-management:settings.actions.apply.success.title';\n const successMessageKey = needsPageRefresh\n ? '@settings-management:settings.actions.apply.reload.success.message'\n : '@settings-management:settings.actions.apply.success.message';\n\n toastService.show({\n color: 'success',\n title: await translateService.translateAsync(successTitleKey),\n content: await translateService.translateAsync(successMessageKey),\n location: 'bottom-center',\n closeButton: true,\n timeOut: needsPageRefresh ? PAGE_REFRESH_DELAY_MS : 3000,\n timeOutProgress: true,\n });\n\n if (needsPageRefresh) {\n setTimeout(() => location.reload(), PAGE_REFRESH_DELAY_MS);\n }\n\n return true;\n } catch {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@settings-management:settings.actions.apply.error.title'),\n content: await translateService.translateAsync('@settings-management:settings.actions.apply.error.message'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n return false;\n }\n },\n applySavedState(context: Record<string, unknown>) {\n const snapshot = cloneDeep(context);\n patchState(store, {\n context: snapshot,\n previousContext: snapshot,\n formDirty: false,\n });\n },\n\n async discard() {\n const form = store.form();\n form?.resetErrors();\n\n const snapshot = cloneDeep(store.previousContext());\n patchState(store, {\n status: AXPPageStatus.Rendered,\n context: snapshot,\n previousContext: snapshot,\n formDirty: false,\n syncingBaseline: true,\n discardSyncNonce: store.discardSyncNonce() + 1,\n });\n },\n async resetToDefault() {\n const defaults = await settingValueService.scope(store.scope() as AXPPlatformScope).defaultValues();\n patchState(store, {\n context: defaults,\n });\n //\n const result = await this.apply();\n if (!result) {\n this.discard();\n }\n },\n }),\n ),\n withHooks(\n (\n store,\n settingValueService = inject(AXPSettingsService),\n translationService = inject(AXTranslationService),\n localeService = inject(AXLocaleService),\n settingDefinitionService = inject(AXPSettingDefinitionProviderService),\n sessionService = inject(AXPSessionService),\n ) => {\n let editionSync: Subscription | undefined;\n return {\n async onInit() {\n //\n settingValueService.onChanged.pipe(filter((c) => c.scope == store.scope())).subscribe((e) => {\n e.keys.forEach((k) => {\n const currentValue = e.values[k];\n const contextValue = get(store.context(), k);\n const previousValue = get(store.previousContext(), k);\n if (!isEqual(previousValue, currentValue) || !isEqual(currentValue, contextValue)) {\n patchState(store, {\n previousContext: {\n ...store.previousContext(),\n [k]: currentValue,\n },\n context: {\n ...store.context(),\n [k]: currentValue,\n },\n formDirty: false,\n });\n }\n });\n });\n //\n merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => {\n if (store.isLoaded()) {\n await store.reload();\n }\n });\n editionSync = combineLatest([\n sessionService.tenant$,\n sessionService.application$,\n sessionService.features$,\n ])\n .pipe(\n map(() => settingDefinitionService.getAvailabilityKey()),\n distinctUntilChanged(),\n )\n .subscribe(() => {\n void store.syncGroupsForEdition();\n });\n },\n onDestroy() {\n editionSync?.unsubscribe();\n },\n };\n },\n ),\n);\n","import { AXPSearchDefinitionProvider, AXPSearchDefinitionProviderContext } from '@acorex-platform/framework-client/common';\n\nexport class AXPSettingSearchDefinitionProvider implements AXPSearchDefinitionProvider {\n async provide(context: AXPSearchDefinitionProviderContext): Promise<void> {\n context.addDefinition('setting', 'Setting', 'setting', 'fa-solid fa-gear', 3, {\n format: {\n id: '{{data.name}}',\n },\n actions: [\n {\n name: 'navigate',\n type: 'view',\n priority: 'primary',\n },\n ],\n });\n }\n}\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPSearchProvider,\n AXPSearchResult,\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingDefinitionProviderService,\n} from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { sortBy } from 'lodash';\nimport { isSettingStaticallyHidden } from './settings-row-visibility.util';\n\nexport interface AXPSettingDefinitionSearch extends AXPSettingDefinition {\n group: AXPSettingDefinitionGroup;\n}\n\nexport class AXPSettingSearchProvider implements AXPSearchProvider {\n private settingsService = inject(AXPSettingDefinitionProviderService);\n private sessionService = inject(AXPSessionService);\n private translateService = inject(AXTranslationService);\n\n async search(text: string): Promise<AXPSearchResult[]> {\n const groupsSetting = await this.settingsService.getListAsync(AXPPlatformScope.User);\n\n // Step 2: Flatten settings from groups\n const allSettings: AXPSettingDefinitionSearch[] = [];\n const extractSettings = (group: AXPSettingDefinitionGroup) => {\n for (const section of group.sections) {\n allSettings.push(...section.settings.map((x) => ({ ...x, group } as AXPSettingDefinitionSearch)));\n }\n for (const subGroup of group.groups) {\n extractSettings(subGroup); // Recursive extraction\n }\n };\n\n for (const group of groupsSetting) {\n extractSettings(group);\n }\n\n const needle = text.trim().toLowerCase();\n if (!needle) {\n return [];\n }\n\n const translatedBlobs = await Promise.all(\n allSettings.map(async (setting) => {\n const parts: string[] = [await this.translateService.translateAsync(setting.title)];\n if (setting.description) {\n parts.push(await this.translateService.translateAsync(setting.description));\n }\n if (setting.searchTagKeys?.length) {\n for (const key of setting.searchTagKeys) {\n parts.push(await this.translateService.translateAsync(key));\n }\n }\n return parts.join(' ').toLowerCase();\n }),\n );\n\n const searchResults = allSettings.filter(\n (setting, i) =>\n !isSettingStaticallyHidden(setting) &&\n (translatedBlobs[i].includes(needle) || setting.name.toLowerCase().includes(needle)),\n );\n\n return sortBy(\n searchResults.map<AXPSearchResult>((setting) => ({\n title: setting.title,\n description: setting.description,\n group: 'setting',\n data: setting,\n command: {\n name: 'navigate',\n options: {\n type: 'router',\n options: {\n path: `/${this.sessionService.application?.name}/settings/user/${setting.group.name}#${setting.title}`,\n },\n }\n },\n parent: setting.group\n ? {\n title: setting.group.title,\n data: setting.group as AXPSettingDefinitionGroup,\n }\n : undefined,\n })),\n ['title']\n );\n }\n}\n","import { createUnsavedChangesCanDeactivateGuard } from '@acorex-platform/framework-client/common';\nimport { AXPSettingPageComponent } from './setting-page/setting-page.component';\n\n//#region ---- Settings Page Can Deactivate Guard ----\n\nexport const axpSettingsPageCanDeactivateGuard = createUnsavedChangesCanDeactivateGuard<AXPSettingPageComponent>();\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXP_UNAUTHORIZED_ROUTE } from '@acorex-platform/framework-client/common';\nimport { AXPApplicationsPlatformPermissionKeys } from '@acorex-platform/module-settings-management-client/contracts';\nimport { resolvePlatformScopeKey } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { first, map } from 'rxjs';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst SCOPE_PERMISSIONS: Record<string, string | null> = {\n P: AXPApplicationsPlatformPermissionKeys.MaintainPlatformSettings,\n T: AXPApplicationsPlatformPermissionKeys.MaintainTenantSettings,\n // Own user settings — always allowed once authenticated.\n U: null,\n};\n\n//#endregion\n\n//#region ----- Guard -----\n\n/**\n * Enforces settings-scope capabilities on direct URL navigation.\n * Menu visibility alone is not enough — hidden Platform Settings items are not\n * menu-matched, so {@link AXPMenuRouteGuard} would otherwise allow the route.\n */\nexport const axpSettingsScopeCanActivateGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n const sessionService = inject(AXPSessionService);\n const router = inject(Router);\n\n return sessionService.isAuthorizedWithLoading$.pipe(\n first(),\n map((): boolean | UrlTree => {\n const scopeParam = resolveScopeParam(route);\n const scopeKey = resolvePlatformScopeKey(scopeParam);\n const requiredPermission = SCOPE_PERMISSIONS[scopeKey];\n\n if (!requiredPermission) {\n return true;\n }\n\n if (sessionService.authorize(requiredPermission)) {\n return true;\n }\n\n return router.parseUrl(AXP_UNAUTHORIZED_ROUTE);\n }),\n );\n};\n\nfunction resolveScopeParam(route: ActivatedRouteSnapshot): string {\n let current: ActivatedRouteSnapshot | null = route;\n while (current) {\n const scope = current.paramMap.get('scope');\n if (scope) {\n return scope;\n }\n current = current.parent;\n }\n return '';\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport {\n AXPApplicationsPlatformPermissionKeys,\n AXPSettingsManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-settings-management-client/contracts';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const appName = this.sessionService.application?.name;\n\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n // Platform Settings — platform console only (not tenant admins).\n context.find(AXPCommonMenuKeys.Platform).addItems([\n {\n name: AXPSettingsManagementMenuKeys.PlatformSettings,\n priority: 999,\n text: '@settings-management:module.terms.scopes.platform.title',\n type: 'menu',\n icon: 'fa-light fa-gear',\n path: `/${appName}/settings/platform`,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPApplicationsPlatformPermissionKeys.MaintainPlatformSettings],\n },\n },\n ]);\n\n // Tenant Settings — under Administration; own user settings are profile-only (no menu policy).\n context.find(AXPCommonMenuKeys.Administration).addItems([\n { name: `${AXPSettingsManagementMenuKeys.TenantApplicationSettings}:divider`, text: '', type: 'break', priority: 998 },\n {\n name: AXPSettingsManagementMenuKeys.TenantApplicationSettings,\n priority: 999,\n text: '@settings-management:module.terms.scopes.tenant.title',\n type: 'menu',\n icon: 'fa-light fa-gear',\n path: `/${appName}/settings/tenant`,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPApplicationsPlatformPermissionKeys.MaintainTenantSettings],\n },\n },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPApplicationsPlatformPermissionKeys\n} from '@acorex-platform/module-settings-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers tenant settings under Administration and platform settings under\n * Applications & Platform. Own user settings are not registered — always available\n * to the signed-in user.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPApplicationsPlatformPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:applications-platform.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.Administration.Root, `${G}.administration.title`, `${G}.administration.description`, {\n order: 120,\n });\n context.addGroup(groups.ApplicationsPlatform.Root, `${G}.applications-platform.title`, `${G}.applications-platform.description`, {\n order: 110,\n });\n\n context\n .addGroup(\n groups.Administration.Settings,\n `${G}.administration-settings.title`,\n `${G}.administration-settings.description`,\n { parent: groups.Administration.Root, order: 15 },\n )\n .addPermission(keys.MaintainTenantSettings, `${P}.maintain-tenant-settings.title`, `${P}.maintain-tenant-settings.description`, {\n modules: ['SettingsManagement'],\n })\n .endPermission()\n .endGroup();\n\n context\n .addGroup(\n groups.ApplicationsPlatform.Configuration,\n `${G}.applications-platform-configuration.title`,\n `${G}.applications-platform-configuration.description`,\n { parent: groups.ApplicationsPlatform.Root, order: 30 },\n )\n .addPermission(keys.MaintainPlatformSettings, `${P}.maintain-platform-settings.title`, `${P}.maintain-platform-settings.description`, {\n modules: ['PlatformManagement'],\n requiredFeatures: ['PlatformManagement'],\n })\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXMSettingsManagementCommandKeys } from '@acorex-platform/module-settings-management-client/contracts';\r\nimport { inject } from '@angular/core';\r\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\r\n\r\n//#region ---- Types ----\r\n\r\ntype ProfileSectionsPayload = {\r\n sections: Record<string, unknown>[];\r\n groupId?: string;\r\n};\r\n\r\n//#endregion\r\n\r\n//#region ---- Settings management profile sections ----\r\n\r\n/** Contributes settings-related sections to the user profile hub. */\r\nexport const SettingsManagementProfileSectionsHookProvider: AXPHookProvider<\r\n ProfileSectionsPayload,\r\n ProfileSectionsPayload\r\n> = {\r\n key: 'profile-page.sections',\r\n priority: 10,\r\n execute: (payload) => {\r\n if (payload.groupId && payload.groupId !== 'account') {\r\n return payload;\r\n }\r\n\r\n const commandService = inject(AXPCommandService);\r\n const sessionService = inject(AXPSessionService);\r\n const appName = sessionService.application?.name;\r\n\r\n const sections: Record<string, unknown>[] = [];\r\n\r\n if (commandService.exists(AXMSettingsManagementCommandKeys.Client.Export)) {\r\n sections.push({\r\n id: 'export-data',\r\n groupId: 'account',\r\n title: '@settings-management:profile-page.sections.export-data.title',\r\n description: '@settings-management:profile-page.sections.export-data.description',\r\n icon: 'far fa-file-export',\r\n priority: 30,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'export-local-data',\r\n title: '@settings-management:profile-page.sections.export-data.actions.manage',\r\n icon: 'far fa-download',\r\n command: { name: AXMSettingsManagementCommandKeys.Client.Export },\r\n },\r\n ],\r\n });\r\n }\r\n\r\n if (appName) {\r\n sections.push({\r\n id: 'all-preferences',\r\n groupId: 'account',\r\n title: '@settings-management:profile-page.sections.all-preferences.title',\r\n description: '@settings-management:profile-page.sections.all-preferences.description',\r\n icon: 'far fa-sliders',\r\n priority: 40,\r\n layout: { colSpan: 6 },\r\n actions: [\r\n {\r\n name: 'view-all-preferences',\r\n title: '@settings-management:profile-page.sections.all-preferences.actions.manage',\r\n icon: 'far fa-arrow-right',\r\n command: {\r\n name: 'navigate',\r\n options: { path: `/${appName}/settings/user` },\r\n },\r\n },\r\n ],\r\n });\r\n }\r\n\r\n if (!sections.length) {\r\n return payload;\r\n }\r\n\r\n return {\r\n ...payload,\r\n sections: [...payload.sections, ...sections],\r\n };\r\n },\r\n};\r\n\r\n//#endregion\r\n","import { AXPActionMenuItem } from '@acorex-platform/framework-shared/core';\r\nimport { inject } from '@angular/core';\r\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\r\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\r\n\r\n//#region ---- Profile slot settings menu hook ----\r\n\r\n/** Registers the user settings entry in the profile dropdown (always available; no permission). */\r\nexport const ProfileSlotSettingsMenuHookProvider: AXPHookProvider<\r\n { items: AXPActionMenuItem[] },\r\n { items: AXPActionMenuItem[] }\r\n> = {\r\n key: 'profile-slot.menu-items',\r\n priority: 0,\r\n execute: (payload) => {\r\n const sessionService = inject(AXPSessionService);\r\n const appName = sessionService.application?.name;\r\n\r\n if (!appName) {\r\n return payload;\r\n }\r\n\r\n return {\r\n ...payload,\r\n items: [\r\n ...payload.items,\r\n {\r\n name: 'settings',\r\n title: '@auth:profile.settings',\r\n icon: 'fa-light fa-gear',\r\n shortcuts: [{ keys: 'ctrl+shift+u', allowInEditableFields: true }],\r\n command: {\r\n name: 'navigate',\r\n options: {\r\n path: `/${appName}/settings/user`,\r\n },\r\n },\r\n } satisfies AXPActionMenuItem,\r\n ],\r\n };\r\n },\r\n};\r\n\r\n//#endregion\r\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\r\nimport {\r\n AXP_MENU_PROVIDER,\r\n AXP_PROTECTED_ROUTE_GUARDS,\r\n AXP_SEARCH_DEFINITION_PROVIDER,\r\n AXP_SEARCH_PROVIDER,\r\n AXP_SETTINGS_SYNC_KEYS,\r\n AXPPlatformSettingsLoadState,\r\n AXPPlatformSettingsOfflineBootstrapService,\r\n AXPSettingsService,\r\n traceSettingsAppStartupLoadComplete,\r\n traceSettingsAppStartupLoadStarted,\r\n} from '@acorex-platform/framework-client/common';\r\nimport {\r\n AXPAppStartUpService,\r\n AXP_APP_STARTUP_PRIORITY,\r\n AXP_HOOK_PROVIDER,\r\n} from '@acorex-platform/framework-client/core';\r\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\r\nimport { NgModule } from '@angular/core';\r\nimport { Routes, ROUTES } from '@angular/router';\r\nimport { AXPSettingSearchDefinitionProvider } from './features/settings/search-definition.provider';\r\nimport { AXPSettingSearchProvider } from './features/settings/search.provider';\r\nimport { axpSettingsPageCanDeactivateGuard } from './features/settings/settings-page-can-deactivate.guard';\r\nimport { axpSettingsScopeCanActivateGuard } from './features/settings/settings-scope.guard';\r\nimport { AXMMenuProvider } from './menu.provider';\r\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\r\nimport { SettingsManagementProfileSectionsHookProvider } from './features/profile-page/settings-management-profile-sections.hook';\r\nimport { ProfileSlotSettingsMenuHookProvider } from './profile-slot-settings-menu.hook';\r\nimport { axmSettingsSyncKeys } from '@acorex-platform/module-settings-management-client/contracts';\r\nimport { AXCRuntimeRemoteApiModule } from '@acorex-platform/client-connectivity-api';\r\n\r\n//#region ----- Constants -----\r\n\r\nconst PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS = 5;\r\nconst PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS = 2_000;\r\n\r\n//#endregion\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n\r\nasync function loadPlatformSettingsWithRetry(\r\n settingsService: AXPSettingsService,\r\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\r\n): Promise<void> {\r\n // Device offline — skip retries and go straight to offline / unavailable handling.\r\n if (offlineBootstrap.isDeviceOffline()) {\r\n throw new Error('Device is offline');\r\n }\r\n\r\n let lastError: unknown;\r\n for (let attempt = 1; attempt <= PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS; attempt++) {\r\n try {\r\n await settingsService.ensurePlatformSettingsLoaded();\r\n return;\r\n } catch (error) {\r\n lastError = error;\r\n console.error(\r\n `Platform settings bootstrap failed (attempt ${attempt}/${PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS})`,\r\n error,\r\n );\r\n if (offlineBootstrap.isDeviceOffline()) {\r\n throw error;\r\n }\r\n if (attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS) {\r\n await sleep(PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS);\r\n }\r\n }\r\n }\r\n throw lastError;\r\n}\r\n\r\nfunction routesFacory() {\r\n let routes: Routes = [\r\n {\r\n path: ':app/settings/:scope',\r\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS, axpSettingsScopeCanActivateGuard],\r\n data: { tab: true, rootLayout: true },\r\n loadComponent: () => {\r\n return AXPRootLayoutComponent;\r\n },\r\n children: [\r\n {\r\n path: '',\r\n loadComponent: () =>\r\n import('./features/settings/setting-page/setting-page.component').then((c) => c.AXPSettingPageComponent),\r\n canDeactivate: [axpSettingsPageCanDeactivateGuard],\r\n data: { reuse: true },\r\n children: [\r\n {\r\n path: ':group',\r\n loadComponent: () =>\r\n import('./features/settings/setting-view/setting-view.component').then(\r\n (c) => c.AXPSettingsViewComponent,\r\n ),\r\n data: { reuse: false },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ];\r\n return routes;\r\n}\r\n\r\n@NgModule({\r\n imports: [AXCRuntimeRemoteApiModule],\r\n exports: [],\r\n declarations: [],\r\n providers: [\r\n {\r\n provide: AXP_SETTINGS_SYNC_KEYS,\r\n useValue: axmSettingsSyncKeys,\r\n },\r\n {\r\n provide: AXP_SEARCH_PROVIDER,\r\n useClass: AXPSettingSearchProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\r\n useClass: AXPSettingSearchDefinitionProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: ROUTES,\r\n multi: true,\r\n useFactory: routesFacory,\r\n },\r\n {\r\n provide: AXP_MENU_PROVIDER,\r\n useClass: AXMMenuProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\r\n useClass: AXMPermissionDefinitionProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: ProfileSlotSettingsMenuHookProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: SettingsManagementProfileSectionsHookProvider,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class AXMSettingsManagementModule {\r\n constructor(\r\n appInitService: AXPAppStartUpService,\r\n settingsService: AXPSettingsService,\r\n platformSettingsLoadState: AXPPlatformSettingsLoadState,\r\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\r\n ) {\r\n appInitService.registerTask({\r\n name: 'platform-settings',\r\n priority: AXP_APP_STARTUP_PRIORITY.platformSettings,\r\n run: async () => {\r\n try {\r\n await loadPlatformSettingsWithRetry(settingsService, offlineBootstrap);\r\n platformSettingsLoadState.clear();\r\n } catch (error) {\r\n console.error('Platform settings bootstrap failed after retries', error);\r\n // Never open dialogs here (APP_INITIALIZER — overlay host is null).\r\n // Only inspect IndexedDB; confirm runs later after the app is stable.\r\n let canOfferOffline = false;\r\n try {\r\n canOfferOffline = await offlineBootstrap.canOfferOfflineContinue();\r\n } catch (offlineError) {\r\n console.error('Offline continue cache check failed', offlineError);\r\n }\r\n if (canOfferOffline) {\r\n platformSettingsLoadState.setPendingOfflineContinue(error);\r\n } else {\r\n platformSettingsLoadState.setFailure(error);\r\n }\r\n // Keep only platform-settings-failure-redirect; skip Settings/regional/theme (they hang on API).\r\n appInitService.abortRemainingStartupTasks();\r\n }\r\n },\r\n });\r\n\r\n appInitService.registerTask({\r\n name: 'Settings',\r\n statusText: '@settings-management:app-startup.loading-settings',\r\n priority: AXP_APP_STARTUP_PRIORITY.settings,\r\n run: async () => {\r\n if (\r\n platformSettingsLoadState.hasFailure() ||\r\n platformSettingsLoadState.hasPendingOfflineContinue() ||\r\n platformSettingsLoadState.isOfflineMode()\r\n ) {\r\n return;\r\n }\r\n traceSettingsAppStartupLoadStarted();\r\n const startedAt = Date.now();\r\n const settings = await settingsService.load('app-startup');\r\n traceSettingsAppStartupLoadComplete({\r\n totalKeys: settings.length,\r\n keysByScope: {},\r\n durationMs: Date.now() - startedAt,\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@acorex-platform/module-settings-management-client",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0 || ^22.0.0",
7
7
  "@angular/core": "^21.0.0 || ^22.0.0"
8
8
  },
9
9
  "dependencies": {
10
- "@acorex-platform/client-connectivity-api": "1.0.1",
10
+ "@acorex-platform/client-connectivity-api": "1.0.2",
11
11
  "tslib": "^2.3.0"
12
12
  },
13
13
  "module": "fesm2022/acorex-platform-module-settings-management-client.mjs",
@@ -21,6 +21,7 @@ declare const AXPSettingsViewModel: _angular_core.Type<{
21
21
  discardSyncNonce: _angular_core.Signal<number>;
22
22
  status: _angular_core.Signal<AXPPageStatus>;
23
23
  form: _ngrx_signals.DeepSignal<AXFormComponent> | _angular_core.Signal<null>;
24
+ editionAvailabilityKey: _angular_core.Signal<string>;
24
25
  searchResults: _angular_core.Signal<AXPSettingDefinitionGroup[]>;
25
26
  hasActivateGroup: _angular_core.Signal<boolean>;
26
27
  showGroups: _angular_core.Signal<boolean>;
@@ -33,6 +34,7 @@ declare const AXPSettingsViewModel: _angular_core.Type<{
33
34
  isDirty: _angular_core.Signal<boolean>;
34
35
  registerForm: (form: AXFormComponent) => void;
35
36
  load: (scope: AXPPlatformScopeKey) => Promise<void>;
37
+ syncGroupsForEdition: () => Promise<void>;
36
38
  reload: () => Promise<void>;
37
39
  rebuildSettingSearchIndex: () => Promise<void>;
38
40
  updateContext: (context: Record<string, any>) => void;
@@ -61,6 +63,7 @@ declare const AXPSettingsViewModel: _angular_core.Type<{
61
63
  discardSyncNonce: number;
62
64
  status: AXPPageStatus;
63
65
  form: AXFormComponent | null;
66
+ editionAvailabilityKey: string;
64
67
  }>>;
65
68
 
66
69
  declare class AXMSettingsManagementModule {
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-module-settings-management-client-setting-page.component-Ck_FPVsq.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-page/setting-page.component.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-page/setting-page.component.html"],"sourcesContent":["\nimport { AXPActionMenuItem, AXPBackButton, AXPExecuteCommand, AXPKeyboardShortcutBinding, AXPKeyboardShortcutPriority, resolvePlatformScopeKey, resolvePlatformScopeName } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsComponent, AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPSettingDefinitionGroup, AXPUnsavedChangesPopstateService, traceSettingsPageRouteLoad } from '@acorex-platform/framework-client/common';\n\nimport { AXHighlightService, AXPDeviceService, AXPHookService, AXPKeyboardShortcutRegistry } from '@acorex-platform/framework-client/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutToolbarComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n resolveDetailsViewFooterCommandShortcuts,\n} from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationEnd, RouterModule } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { AXPSettingsViewModel } from '../settings.viewmodel';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n //\n AXSearchBoxModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXTranslationModule,\n AXButtonModule,\n AXTabsModule,\n AXBadgeModule,\n AXLoadingModule,\n AXDropdownButtonModule,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutToolbarComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n ],\n templateUrl: './setting-page.component.html',\n styleUrl: './setting-page.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXUnsubscriber,\n AXPSettingsViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPSettingPageComponent,\n },\n ],\n host: { class: 'axp-setting-page' },\n})\nexport class AXPSettingPageComponent extends AXPPageLayoutBaseComponent {\n protected vm = inject(AXPSettingsViewModel);\n protected readonly deviceService = inject(AXPDeviceService);\n private activatedRoute = inject(ActivatedRoute);\n private unsubscribe = inject(AXUnsubscriber);\n private readonly highlightService = inject(AXHighlightService);\n private readonly hooks = inject(AXPHookService);\n\n private readonly unsavedChangesPopstate = inject(AXPUnsavedChangesPopstateService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly sidebarTabs = viewChild<AXTabsComponent>('sidebarTabs');\n private sidebarTabChangeSuppressed = false;\n /** Prevents VM→URL sync from stripping the route group during refresh hydration. */\n private loadingFromRoute = false;\n /** Serializes overlapping route loads (e.g. init + NavigationEnd) so `loadingFromRoute` cannot clear early. */\n private routeLoadChain: Promise<void> = Promise.resolve();\n\n /** Syncs the line indicator when the active group changes programmatically (route load / navigation). */\n #sidebarTabsIndicatorEffect = effect(() => {\n const groups = this.vm.groups();\n const activeName = this.vm.activateGroup()?.name;\n if (!groups.length || !activeName || this.vm.isSearching()) {\n return;\n }\n\n const index = groups.findIndex((group) => group.name === activeName);\n if (index < 0) {\n return;\n }\n\n untracked(() =>\n queueMicrotask(() => {\n this.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(index);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }),\n );\n });\n\n #effect = effect(() => {\n if (!this.vm.isLoaded() || this.loadingFromRoute) {\n return;\n }\n const expression = this.vm.searchExpression();\n const app = this.sessionService.application?.name;\n const scope = resolvePlatformScopeName(this.vm.scope());\n const group = this.vm.activateGroup()?.name;\n //\n if (this.vm.isSearching()) {\n this.router.navigate([app, 'settings', scope, group ?? ''], {\n queryParams: { q: expression },\n });\n setTimeout(() => {\n this.highlightService.highlight('#ax-settings', expression!);\n }, 100);\n return;\n }\n // On desktop, scope-only URLs are redirected to the first group in loadFromRoute.\n // Do not sync back to a group-less URL while that redirect is pending.\n if (!group && this.deviceService.isLarge()) {\n return;\n }\n this.router.navigate([app, 'settings', scope, group ?? '']);\n this.highlightService.clear();\n });\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.registerKeyboardShortcuts();\n\n this.unsavedChangesPopstate.registerSource({\n id: 'axp-setting-page',\n isDirty: () => this.vm.isDirty(),\n });\n this.destroyRef.onDestroy(() => this.unsavedChangesPopstate.unregisterSource('axp-setting-page'));\n //\n this.router.events\n .pipe(\n this.unsubscribe.takeUntilDestroy,\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => {\n void this.enqueueLoadFromRoute();\n });\n\n await this.enqueueLoadFromRoute();\n }\n\n private enqueueLoadFromRoute(): Promise<void> {\n const load = this.routeLoadChain.then(() => this.loadFromRoute());\n this.routeLoadChain = load.catch(() => undefined);\n return load;\n }\n\n private async loadFromRoute(): Promise<void> {\n if (this.unsavedChangesPopstate.isHandlingPopstate()) {\n return;\n }\n\n this.loadingFromRoute = true;\n try {\n const snapshot = this.activatedRoute.snapshot;\n const routerScope = resolvePlatformScopeKey(snapshot.paramMap.get('scope')?.trim().toLowerCase()!);\n const vmScope = this.vm.scope();\n const query = snapshot.queryParamMap.get('q');\n const groupFromRoute = this.getGroupFromRouteSync();\n //\n if (vmScope != routerScope || !this.vm.isLoaded()) {\n traceSettingsPageRouteLoad(\n routerScope,\n vmScope !== routerScope ? 'scope-changed' : 'not-loaded-yet',\n );\n await this.vm.load(routerScope);\n }\n\n const activeGroup = this.vm.activateGroup()?.name;\n if (groupFromRoute === activeGroup && this.vm.isDirty() && !this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return;\n }\n\n const hasQuery = !!query?.trim();\n if (groupFromRoute && groupFromRoute === activeGroup && !hasQuery && !this.vm.isSearching()) {\n return;\n }\n\n if (groupFromRoute !== activeGroup) {\n this.vm.unloadActivateGroup();\n }\n if (!hasQuery) {\n this.vm.clearSearch();\n }\n\n let group = groupFromRoute;\n if (!group && this.deviceService.isLarge() && !this.vm.isSearching()) {\n group = this.vm.groups()?.[0]?.name;\n if (group) {\n this.vm.setActivateGroupByName(group);\n this.recompute();\n await this.router.navigate([group], { relativeTo: this.activatedRoute, replaceUrl: true });\n return;\n }\n } else if (group) {\n this.vm.setActivateGroupByName(group);\n if (!this.vm.activateGroup() && this.deviceService.isLarge() && !this.vm.isSearching()) {\n const fallback = this.vm.groups()?.[0]?.name;\n if (fallback) {\n this.vm.setActivateGroupByName(fallback);\n this.recompute();\n await this.router.navigate([fallback], { relativeTo: this.activatedRoute, replaceUrl: true });\n return;\n }\n }\n this.recompute();\n }\n if (hasQuery) {\n await this.vm.search(query!);\n this.recompute();\n }\n } finally {\n this.loadingFromRoute = false;\n }\n }\n\n private getGroupFromRouteSync(): string | undefined {\n let route: ActivatedRouteSnapshot | null = this.activatedRoute.snapshot;\n while (route) {\n const group = route.paramMap.get('group');\n if (group) {\n return group;\n }\n route = route.firstChild ?? null;\n }\n return undefined;\n }\n\n /**\n * `ax-tabs` selects on click before we can confirm. Revert synchronously, then confirm + navigate.\n */\n protected handleSidebarTabChanged(event: AXTabStripChangedEvent): void {\n if (this.sidebarTabChangeSuppressed) {\n return;\n }\n\n const groups = this.vm.groups();\n const target = groups[event.index];\n const activeName = this.vm.activateGroup()?.name;\n\n if (!target || target.name === activeName || this.vm.isSearching()) {\n return;\n }\n\n const activeIndex = groups.findIndex((group) => group.name === activeName);\n if (activeIndex >= 0) {\n this.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(activeIndex);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }\n\n void this.completeGroupSwitch(target.name);\n }\n\n protected async handleSelectGroup(item: AXPSettingDefinitionGroup) {\n if (item.name === this.vm.activateGroup()?.name) {\n return;\n }\n\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n await this.router.navigate([`${item.name}`], { relativeTo: this.activatedRoute });\n }\n\n private async completeGroupSwitch(groupName: string): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n await this.router.navigate([groupName], { relativeTo: this.activatedRoute });\n }\n\n //#region ---- Keyboard Shortcuts ----\n\n private registerKeyboardShortcuts(): void {\n const saveKeys = resolveDetailsViewFooterCommandShortcuts('update-entity');\n const discardKeys = resolveDetailsViewFooterCommandShortcuts('discard');\n const group = '@general:keyboard-shortcuts.groups.settings';\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n if (saveKeys?.length) {\n shortcuts.push({\n keys: saveKeys,\n title: '@general:actions.apply.title',\n group,\n allowInEditableFields: true,\n when: () => this.canExecuteSaveShortcut(),\n handler: () => {\n void this.vm.apply();\n },\n });\n }\n\n if (discardKeys?.length) {\n shortcuts.push({\n keys: discardKeys,\n title: '@general:actions.discard.title',\n group,\n allowInEditableFields: true,\n when: () => this.canExecuteDiscardShortcut(),\n handler: () => {\n void this.executeDiscardViaShortcut();\n },\n });\n }\n\n if (shortcuts.length === 0) {\n return;\n }\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n elementRef: this.elementRef,\n id: 'settings-page-core',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: group,\n shortcuts,\n });\n }\n\n private canExecuteSaveShortcut(): boolean {\n if (this.vm.isSaving() || this.vm.isBusy()) {\n return false;\n }\n return this.vm.isDirty();\n }\n\n private canExecuteDiscardShortcut(): boolean {\n if (this.vm.isSaving() || this.vm.isBusy()) {\n return false;\n }\n if (this.unsavedChangesConfirm.isConfirmPending()) {\n return false;\n }\n return this.vm.isDirty();\n }\n\n private async executeDiscardViaShortcut(): Promise<void> {\n if (!this.canExecuteDiscardShortcut()) {\n return;\n }\n\n const confirmed = await this.unsavedChangesConfirm.confirmIfDirty(true, {\n title: '@general:messages.unsaved-changes.title',\n message: '@general:messages.discard-changes.message',\n approveLeaveOnConfirm: false,\n });\n if (!confirmed) {\n return;\n }\n\n await this.vm.discard();\n }\n\n //#endregion\n\n //#region ---- Leave Page Gate ----\n\n async canDeactivate(): Promise<boolean> {\n if (this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return true;\n }\n\n return this.confirmLeaveIfDirty();\n }\n\n override onBeforeTabClose(): Promise<boolean> {\n return this.unsavedChangesConfirm.confirmIfDirty(this.shouldPromptLeave(), {\n approveLeaveOnConfirm: false,\n });\n }\n\n private shouldPromptLeave(): boolean {\n return this.vm.isDirty();\n }\n\n private async confirmLeaveIfDirty(): Promise<boolean> {\n const wasDirty = this.shouldPromptLeave();\n const confirmed = await this.unsavedChangesConfirm.confirmIfDirty(wasDirty);\n if (confirmed && wasDirty) {\n await this.vm.discard();\n }\n return confirmed;\n }\n\n //#endregion\n\n //#region ---------------- Page Configuration Overrides ----------------\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (!this.vm.activateGroup()) {\n return [];\n }\n\n const items: AXPActionMenuItem[] = [\n {\n title: await this.translateService.translateAsync(\n '@settings-management:settings.actions.restore-defaults.title',\n ),\n icon: 'fa-light fa-rotate-left',\n color: 'danger',\n command: { name: 'restore-defaults' },\n },\n ];\n\n const payload = await this.hooks.runAsync('settings-page.secondary-actions', { items });\n return payload.items ?? items;\n }\n\n override async getPageTitle(): Promise<string> {\n const group = this.vm.activateGroup();\n const groupHeadingKey = group?.pageTitle ?? group?.title;\n const scopeTitle = await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeTitle(),\n );\n if (!this.vm.isSearching()) {\n return groupHeadingKey ?? scopeTitle;\n } else {\n return this.translateService.translateAsync('@settings-management:settings.components.search.title', {\n params: { q: this.vm.searchExpression() },\n });\n }\n }\n\n override async getPageDescription(): Promise<string | null> {\n const groupDescription = this.vm.activateGroup()?.description;\n const scopeDescription = await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeDescription(),\n );\n if (!this.vm.isSearching()) {\n return groupDescription ?? scopeDescription;\n } else {\n return this.translateService.translateAsync('@settings-management:settings.components.search.description');\n }\n }\n\n override hasUnsavedChanges(): boolean {\n return this.vm.isDirty();\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n if (this.vm.activateGroup()) {\n return {\n title: await this.translateService.translateAsync(\n '@settings-management:module.terms.scopes.' + this.vm.scopeTitle(),\n ),\n };\n }\n return null;\n }\n\n override async onBackButtonClick(): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n const app = this.sessionService.application?.name;\n const scope = resolvePlatformScopeName(this.vm.scope());\n this.router.navigate([app, 'settings', scope]);\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n switch (command.name) {\n case 'restore-defaults':\n await this.vm.resetToDefault();\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n @if (vm.showGroups()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n '@settings-management:module.terms.scopes.' + vm.scopeTitle() | translate | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box [delayTime]=\"300\" [ngModel]=\"vm.searchExpression()\" (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"'@settings-management:settings.components.search.placeholder' | translate | async\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs #sidebarTabs [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\">\n @for (item of vm.groups(); track item.name) {\n <ax-tab-item [key]=\"item.name\" [text]=\"(item.title | translate | async)!\"\n [active]=\"vm.activateGroup()?.name === item.name && !vm.isSearching()\">\n <ax-prefix>\n <ax-icon icon=\"{{ item.icon }} fa-fw fa-regular\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content id=\"ax-settings\">\n @if (vm.hasActivateGroup() || vm.isSearching()) {\n <router-outlet></router-outlet>\n } @else {\n <axp-layout-list>\n @for (item of vm.groups(); track $index) {\n <axp-layout-list-item (click)=\"handleSelectGroup(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"font-semibold\">{{ item.title | translate | async }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n }\n </axp-page-content>\n\n @if (vm.isDirty()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.discard.title' | translate | async\" (onClick)=\"vm.discard()\">\n </ax-button>\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isBusy() || vm.isSaving()\"\n [text]=\"'@general:actions.apply.title' | translate | async\" (onClick)=\"vm.apply()\" [color]=\"'secondary'\">\n @if (vm.isSaving()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>"],"names":["i9"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFM,MAAO,uBAAwB,SAAQ,0BAA0B,CAAA;AAvCvE,IAAA,WAAA,GAAA;;AAwCY,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACxB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACnD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC7C,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAE9B,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACjE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,2BAA2B,CAAC;QACtD,IAAA,CAAA,WAAW,GAAG,SAAS,CAAkB,aAAa;wFAAC;QAChE,IAAA,CAAA,0BAA0B,GAAG,KAAK;;QAElC,IAAA,CAAA,gBAAgB,GAAG,KAAK;;AAExB,QAAA,IAAA,CAAA,cAAc,GAAkB,OAAO,CAAC,OAAO,EAAE;;AAGzD,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,MAAK;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI;AAChD,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;gBAC1D;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACpE,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACb;YACF;AAEA,YAAA,SAAS,CAAC,MACR,cAAc,CAAC,MAAK;AAClB,gBAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,gBAAA,IAAI;oBACF,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC;gBACnC;wBAAU;AACR,oBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;gBACzC;YACF,CAAC,CAAC,CACH;QACH,CAAC;wGAAC;AAEF,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAK;AACpB,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBAChD;YACF;YACA,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI;YACjD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI;;AAE3C,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;AAC1D,oBAAA,WAAW,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE;AAC/B,iBAAA,CAAC;gBACF,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,cAAc,EAAE,UAAW,CAAC;gBAC9D,CAAC,EAAE,GAAG,CAAC;gBACP;YACF;;;YAGA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE;gBAC1C;YACF;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAC/B,CAAC;oFAAC;AAuWH,IAAA;;AAxZC,IAAA,2BAA2B;AAwB3B,IAAA,OAAO;AA2BE,IAAA,MAAM,QAAQ,GAAA;AACrB,QAAA,MAAM,KAAK,CAAC,QAAQ,EAAE;QAEtB,IAAI,CAAC,yBAAyB,EAAE;AAEhC,QAAA,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC;AACzC,YAAA,EAAE,EAAE,kBAAkB;YACtB,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;AACjC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;;QAEjG,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CACH,IAAI,CAAC,WAAW,CAAC,gBAAgB,EACjC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC;aAElD,SAAS,CAAC,MAAK;AACd,YAAA,KAAK,IAAI,CAAC,oBAAoB,EAAE;AAClC,QAAA,CAAC,CAAC;AAEJ,QAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;IACnC;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;AACjD,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,MAAM,aAAa,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,EAAE;YACpD;QACF;AAEA,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ;AAC7C,YAAA,MAAM,WAAW,GAAG,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAG,CAAC;YAClG,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;YAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;AAC7C,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE;;AAEnD,YAAA,IAAI,OAAO,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE;AACjD,gBAAA,0BAA0B,CACxB,WAAW,EACX,OAAO,KAAK,WAAW,GAAG,eAAe,GAAG,gBAAgB,CAC7D;gBACD,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;YACjC;YAEA,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI;AACjD,YAAA,IAAI,cAAc,KAAK,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,EAAE;gBAC1G;YACF;YAEA,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE;AAChC,YAAA,IAAI,cAAc,IAAI,cAAc,KAAK,WAAW,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;gBAC3F;YACF;AAEA,YAAA,IAAI,cAAc,KAAK,WAAW,EAAE;AAClC,gBAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;YAC/B;YACA,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;YACvB;YAEA,IAAI,KAAK,GAAG,cAAc;AAC1B,YAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;AACpE,gBAAA,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI;gBACnC,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC;oBACrC,IAAI,CAAC,SAAS,EAAE;oBAChB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;oBAC1F;gBACF;YACF;iBAAO,IAAI,KAAK,EAAE;AAChB,gBAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;AACtF,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI;oBAC5C,IAAI,QAAQ,EAAE;AACZ,wBAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC;wBACxC,IAAI,CAAC,SAAS,EAAE;wBAChB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;wBAC7F;oBACF;gBACF;gBACA,IAAI,CAAC,SAAS,EAAE;YAClB;YACA,IAAI,QAAQ,EAAE;gBACZ,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAM,CAAC;gBAC5B,IAAI,CAAC,SAAS,EAAE;YAClB;QACF;gBAAU;AACR,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC/B;IACF;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,KAAK,GAAkC,IAAI,CAAC,cAAc,CAAC,QAAQ;QACvE,OAAO,KAAK,EAAE;YACZ,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;YACzC,IAAI,KAAK,EAAE;AACT,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI;QAClC;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACO,IAAA,uBAAuB,CAAC,KAA6B,EAAA;AAC7D,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;YACnC;QACF;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI;AAEhD,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;YAClE;QACF;AAEA,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AAC1E,QAAA,IAAI,WAAW,IAAI,CAAC,EAAE;AACpB,YAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,YAAA,IAAI;gBACF,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC;YACzC;oBAAU;AACR,gBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;YACzC;QACF;QAEA,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5C;IAEU,MAAM,iBAAiB,CAAC,IAA+B,EAAA;AAC/D,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE;YAC/C;QACF;QAEA,IAAI,EAAE,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE;YACvC;QACF;QAEA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA,EAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACnF;IAEQ,MAAM,mBAAmB,CAAC,SAAiB,EAAA;QACjD,IAAI,EAAE,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE;YACvC;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9E;;IAIQ,yBAAyB,GAAA;AAC/B,QAAA,MAAM,QAAQ,GAAG,wCAAwC,CAAC,eAAe,CAAC;AAC1E,QAAA,MAAM,WAAW,GAAG,wCAAwC,CAAC,SAAS,CAAC;QACvE,MAAM,KAAK,GAAG,6CAA6C;QAC3D,MAAM,SAAS,GAAiC,EAAE;AAElD,QAAA,IAAI,QAAQ,EAAE,MAAM,EAAE;YACpB,SAAS,CAAC,IAAI,CAAC;AACb,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,8BAA8B;gBACrC,KAAK;AACL,gBAAA,qBAAqB,EAAE,IAAI;AAC3B,gBAAA,IAAI,EAAE,MAAM,IAAI,CAAC,sBAAsB,EAAE;gBACzC,OAAO,EAAE,MAAK;AACZ,oBAAA,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;gBACtB,CAAC;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,IAAI,WAAW,EAAE,MAAM,EAAE;YACvB,SAAS,CAAC,IAAI,CAAC;AACb,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,KAAK,EAAE,gCAAgC;gBACvC,KAAK;AACL,gBAAA,qBAAqB,EAAE,IAAI;AAC3B,gBAAA,IAAI,EAAE,MAAM,IAAI,CAAC,yBAAyB,EAAE;gBAC5C,OAAO,EAAE,MAAK;AACZ,oBAAA,KAAK,IAAI,CAAC,yBAAyB,EAAE;gBACvC,CAAC;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC7B,KAAK,EAAE,IAAI,CAAC,UAAU;YACtB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,EAAE,EAAE,oBAAoB;YACxB,QAAQ,EAAE,2BAA2B,CAAC,IAAI;AAC1C,YAAA,KAAK,EAAE,KAAK;YACZ,SAAS;AACV,SAAA,CAAC;IACJ;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE;AAC1C,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;IAC1B;IAEQ,yBAAyB,GAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE;AAC1C,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,EAAE;AACjD,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;IAC1B;AAEQ,IAAA,MAAM,yBAAyB,GAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE;YACrC;QACF;QAEA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,EAAE;AACtE,YAAA,KAAK,EAAE,yCAAyC;AAChD,YAAA,OAAO,EAAE,2CAA2C;AACpD,YAAA,qBAAqB,EAAE,KAAK;AAC7B,SAAA,CAAC;QACF,IAAI,CAAC,SAAS,EAAE;YACd;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;IACzB;;;AAMA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,EAAE;AAClD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;IACnC;IAES,gBAAgB,GAAA;QACvB,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;AACzE,YAAA,qBAAqB,EAAE,KAAK;AAC7B,SAAA,CAAC;IACJ;IAEQ,iBAAiB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;IAC1B;AAEQ,IAAA,MAAM,mBAAmB,GAAA;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACzC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC3E,QAAA,IAAI,SAAS,IAAI,QAAQ,EAAE;AACzB,YAAA,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;QACzB;AACA,QAAA,OAAO,SAAS;IAClB;;;AAMS,IAAA,MAAM,qBAAqB,GAAA;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE;AAC5B,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,KAAK,GAAwB;AACjC,YAAA;gBACE,KAAK,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAC/C,8DAA8D,CAC/D;AACD,gBAAA,IAAI,EAAE,yBAAyB;AAC/B,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;AACtC,aAAA;SACF;AAED,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC;AACvF,QAAA,OAAO,OAAO,CAAC,KAAK,IAAI,KAAK;IAC/B;AAES,IAAA,MAAM,YAAY,GAAA;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;QACrC,MAAM,eAAe,GAAG,KAAK,EAAE,SAAS,IAAI,KAAK,EAAE,KAAK;AACxD,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAC3D,2CAA2C,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CACnE;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;YAC1B,OAAO,eAAe,IAAI,UAAU;QACtC;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,uDAAuD,EAAE;gBACnG,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE;AAC1C,aAAA,CAAC;QACJ;IACF;AAES,IAAA,MAAM,kBAAkB,GAAA;QAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,WAAW;AAC7D,QAAA,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACjE,2CAA2C,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CACzE;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;YAC1B,OAAO,gBAAgB,IAAI,gBAAgB;QAC7C;aAAO;YACL,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,6DAA6D,CAAC;QAC5G;IACF;IAES,iBAAiB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;IAC1B;AAES,IAAA,MAAM,aAAa,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE;YAC3B,OAAO;AACL,gBAAA,KAAK,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAC/C,2CAA2C,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CACnE;aACF;QACH;AACA,QAAA,OAAO,IAAI;IACb;AAES,IAAA,MAAM,iBAAiB,GAAA;QAC9B,IAAI,EAAE,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE;YACvC;QACF;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI;QACjD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAChD;IAES,MAAM,OAAO,CAAC,OAA0B,EAAA;AAC/C,QAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,YAAA,KAAK,kBAAkB;AACrB,gBAAA,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE;gBAC9B;;IAEN;8GAzaW,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EAVvB;YACT,cAAc;YACd,oBAAoB;AACpB,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,uBAAuB;AACrC,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClFH,0xFAmEkB,EAAA,MAAA,EAAA,CAAA,2jJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlBd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,8VACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;AAEZ,gBAAA,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,+BAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,mBAAmB,8BACnB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,8KACf,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBAEtB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,4BAA4B,EAAA,QAAA,EAAA,qfAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,2BAA2B,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,+BAA+B,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC/B,8BAA8B,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,6BAA6B,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,gCAAgC,EAAA,QAAA,EAAA,mDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAgBvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAvCnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,YAAY;;wBAEZ,iBAAiB;wBACjB,iBAAiB;wBACjB,mBAAmB;wBACnB,mBAAmB;wBACnB,cAAc;wBACd,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,sBAAsB;;wBAEtB,sBAAsB;wBACtB,4BAA4B;wBAC5B,2BAA2B;wBAC3B,+BAA+B;wBAC/B,8BAA8B;wBAC9B,6BAA6B;wBAC7B,gCAAgC;AACjC,qBAAA,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B;wBACT,cAAc;wBACd,oBAAoB;AACpB,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,uBAAyB;AACrC,yBAAA;AACF,qBAAA,EAAA,IAAA,EACK,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAA,QAAA,EAAA,0xFAAA,EAAA,MAAA,EAAA,CAAA,2jJAAA,CAAA,EAAA;yEAcuB,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-module-settings-management-client-setting-view.component-BrUkHvXK.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-view/setting-view.component.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-view/setting-view.component.html"],"sourcesContent":["import { AXPContextChangeEvent, getSmart } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\n\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPExpressionEvaluatorScope } from '@acorex-platform/framework-shared/core';\nimport {\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingLayoutOptions,\n AXPSettingSectionAction,\n} from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPWidgetCoreModule, AXPWidgetContainerComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutSectionComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPSettingsViewModel } from '../settings.viewmodel';\n\n@Component({\n templateUrl: 'setting-view.component.html',\n imports: [\n CommonModule,\n FormsModule,\n //\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXButtonModule,\n AXBadgeModule,\n AXTranslationModule,\n AXSearchBoxModule,\n AXDropdownButtonModule,\n AXLoadingModule,\n AXFormModule,\n AXValidationModule,\n //\n AXPWidgetCoreModule,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutSectionComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'w-full',\n },\n})\nexport class AXPSettingsViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXPSettingsViewModel);\n private readonly commandService = inject(AXPCommandService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly form = viewChild(AXFormComponent);\n private readonly container = viewChild(AXPWidgetContainerComponent);\n\n //#endregion\n\n //#region ---- State ----\n\n /** Cached row visibility keyed by setting name (from `widget.options.visibility`). */\n protected readonly rowVisibility = signal<Record<string, boolean>>({});\n\n private visibilityRefreshGeneration = 0;\n\n //#endregion\n\n //#region ---- Lifecycle Effects ----\n\n #registerFormEffect = effect(() => {\n const formRef = this.form();\n if (formRef) {\n this.vm.registerForm(formRef);\n }\n });\n\n #statusEffect = effect(() => {\n this.container()?.builderService.setStatus(this.vm.status());\n });\n\n #formDirtyEffect = effect(() => {\n if (this.vm.syncingBaseline()) {\n return;\n }\n\n const container = this.container();\n const isDirty = container?.isFormDirty() ?? false;\n if (this.vm.formDirty() === isDirty) {\n return;\n }\n untracked(() => this.vm.setFormDirty(isDirty));\n });\n\n #applySyncEffect = effect(() => {\n const nonce = this.vm.applySyncNonce();\n if (nonce === 0) {\n return;\n }\n\n const container = this.container();\n\n untracked(async () => {\n this.vm.setSyncingBaseline(true);\n try {\n if (container) {\n await container.replaceContext(this.vm.context());\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n } else {\n this.vm.setFormDirty(false);\n }\n } finally {\n this.vm.setSyncingBaseline(false);\n }\n });\n });\n\n #discardSyncEffect = effect(() => {\n const nonce = this.vm.discardSyncNonce();\n if (nonce === 0) {\n return;\n }\n\n const container = this.container();\n\n untracked(() => {\n try {\n if (container) {\n container.revertAndSettle();\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n }\n } finally {\n this.vm.setSyncingBaseline(false);\n }\n });\n });\n\n #rowVisibilityEffect = effect(() => {\n const context = this.vm.context();\n this.vm.activateGroup();\n this.vm.searchResults();\n this.vm.isSearching();\n const container = this.container();\n\n untracked(() => {\n void this.refreshRowVisibility(context, container);\n });\n });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected handleContextChanged(e: AXPContextChangeEvent): void {\n this.vm.updateContext(e.data);\n }\n\n protected isSectionActionDisabled(action: AXPSettingSectionAction): boolean {\n if (!action.command?.name || !this.commandService.exists(action.command.name)) {\n return true;\n }\n\n if (action.disabledWhenDirty && this.vm.isDirty()) {\n return true;\n }\n\n if (action.requiredSettingKeys?.length) {\n const context = this.vm.context();\n if (!action.requiredSettingKeys.every((key) => hasSettingContextValue(context, key))) {\n return true;\n }\n }\n\n return false;\n }\n\n protected runSectionAction(action: AXPSettingSectionAction): void {\n if (this.isSectionActionDisabled(action) || !action.command?.name) {\n return;\n }\n void this.commandService.execute(action.command.name, action.command.options ?? {});\n }\n\n //#endregion\n\n //#region ---- Layout Helpers ----\n\n /** Side-by-side settings row with wider control column (`layout.positions` without `stacked`). */\n protected hasWideControlLayout(layout?: AXPSettingLayoutOptions): boolean {\n return !!layout?.positions && layout.stacked !== true;\n }\n\n //#endregion\n\n //#region ---- Row Visibility ----\n\n /** Whether a section has at least one visible setting row. */\n protected isSectionVisible(section: { settings: AXPSettingDefinition[] }): boolean {\n return section.settings.some((setting) => this.isSettingRowVisible(setting));\n }\n\n /** Whether a setting row should be rendered (supports `widget.options.visibility` expressions). */\n protected isSettingRowVisible(setting: AXPSettingDefinition): boolean {\n const visibility = setting.widget.options?.['visibility'];\n if (visibility == null) {\n return true;\n }\n if (typeof visibility === 'boolean') {\n return visibility;\n }\n return this.rowVisibility()[setting.name] ?? true;\n }\n\n private async refreshRowVisibility(\n context: Record<string, unknown>,\n container: AXPWidgetContainerComponent | undefined,\n ): Promise<void> {\n const generation = ++this.visibilityRefreshGeneration;\n const settings = this.collectVisibleSettings();\n const scope = this.buildExpressionScope(context, container);\n const next: Record<string, boolean> = {};\n\n await Promise.all(\n settings.map(async (setting) => {\n next[setting.name] = await this.resolveRowVisibility(setting.widget.options?.['visibility'], scope);\n }),\n );\n\n if (generation !== this.visibilityRefreshGeneration) {\n return;\n }\n\n this.rowVisibility.set(next);\n }\n\n private collectVisibleSettings(): AXPSettingDefinition[] {\n if (this.vm.isSearching()) {\n const results = this.vm.searchResults();\n if (!results?.length) {\n return [];\n }\n return results.flatMap((group) => group.sections.flatMap((section) => section.settings));\n }\n\n const group = this.vm.activateGroup();\n if (!group?.sections.length) {\n return [];\n }\n\n return group.sections.flatMap((section) => section.settings);\n }\n\n private async resolveRowVisibility(\n visibility: unknown,\n scope: AXPExpressionEvaluatorScope,\n ): Promise<boolean> {\n if (visibility == null) {\n return true;\n }\n if (typeof visibility === 'boolean') {\n return visibility;\n }\n if (typeof visibility === 'string') {\n if (this.expressionEvaluator.isExpression(visibility)) {\n return Boolean(await this.expressionEvaluator.evaluate(visibility, scope));\n }\n return Boolean(visibility);\n }\n return true;\n }\n\n private buildExpressionScope(\n context: Record<string, unknown>,\n container: AXPWidgetContainerComponent | undefined,\n ): AXPExpressionEvaluatorScope {\n return {\n context: {\n eval: (path: string) => {\n if (container) {\n const fromContainer = container.contextService.getValue(path);\n if (fromContainer !== undefined) {\n return fromContainer;\n }\n }\n return this.readSettingContextValue(context, path);\n },\n set: (path: string, value: unknown) => {\n container?.contextService.update(path, value, { origin: 'user' });\n },\n data: () => (container?.contextService.data() as Record<string, unknown>) ?? context,\n isDirty: () => container?.contextService.isDirty() ?? false,\n options: (path?: string) => {\n if (!container) {\n return undefined;\n }\n if (path == null || path === '') {\n return container.contextService.getValue('options');\n }\n return container.contextService.getValue(`options.${path}`);\n },\n },\n events: {},\n widget: {},\n methods: {},\n vars: {},\n };\n }\n\n /** Flat persisted setting keys may contain dots (e.g. `Common:Setting:Navigation.Mode`). */\n private readSettingContextValue(context: Record<string, unknown>, key: string): unknown {\n if (Object.prototype.hasOwnProperty.call(context, key)) {\n return context[key];\n }\n return getSmart(context, key);\n }\n}\n\nfunction hasSettingContextValue(context: Record<string, unknown>, key: string): boolean {\n const value = Object.prototype.hasOwnProperty.call(context, key) ? context[key] : getSmart(context, key);\n\n if (value == null) {\n return false;\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) && value > 0;\n }\n\n return true;\n}\n","<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true\">\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>"],"names":["i3","i4"],"mappings":"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"}