@acorex-platform/module-settings-management-client 0.0.28 → 0.0.32

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.
@@ -166,6 +166,15 @@ class AXPSettingPageComponent extends AXPPageLayoutBaseComponent {
166
166
  }
167
167
  else if (group) {
168
168
  this.vm.setActivateGroupByName(group);
169
+ if (!this.vm.activateGroup() && this.deviceService.isLarge() && !this.vm.isSearching()) {
170
+ const fallback = this.vm.groups()?.[0]?.name;
171
+ if (fallback) {
172
+ this.vm.setActivateGroupByName(fallback);
173
+ this.recompute();
174
+ await this.router.navigate([fallback], { relativeTo: this.activatedRoute, replaceUrl: true });
175
+ return;
176
+ }
177
+ }
169
178
  this.recompute();
170
179
  }
171
180
  if (hasQuery) {
@@ -397,7 +406,7 @@ class AXPSettingPageComponent extends AXPPageLayoutBaseComponent {
397
406
  provide: AXPPageLayoutBase,
398
407
  useExisting: AXPSettingPageComponent,
399
408
  },
400
- ], viewQueries: [{ propertyName: "sidebarTabs", first: true, predicate: ["sidebarTabs"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<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>", styles: ["@layer properties;.axp-setting-page ax-tabs{--ax-comp-tabs-default-border-radius: 0}.axp-setting-page ax-tabs ax-tab-item{margin-block:0px;border-radius:0!important;padding-block:calc(var(--spacing, .25rem) * 3);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-setting-page axp-layout-section axp-layout-content{display:flex;width:100%;flex-direction:column}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-divide-y-reverse: 0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-border-style: dashed;border-style:dashed}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){border-color:var(--color-gray-200, oklch(92.8% .006 264.531))}.axp-setting-page axp-layout-section axp-layout-content .--item-container{display:grid;align-items:flex-start;column-gap:calc(var(--spacing, .25rem) * 6);row-gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 4);grid-template-columns:minmax(0,1fr)}@media(width>=64rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 6)}}@media(width>=80rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 8)}}@media(width>=96rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 10)}}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container{grid-template-columns:minmax(11rem,34%) minmax(0,max-content)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container:has(.--is-hidden){display:none}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{min-width:0px;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{grid-column:auto}}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{min-width:0px;width:100%;max-width:100%;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{grid-column:2;width:clamp(14rem,36vw,24rem)}}@media(min-width:1024px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(16rem,28vw,28rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(18rem,24vw,32rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control{grid-template-columns:minmax(0,1fr)}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-label,.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{grid-column:1 / -1}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{width:100%;max-width:100%}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(20rem,50vw,36rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(24rem,40vw,42rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container axp-layout-description{margin-top:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}.axp-setting-page axp-layout-start-side{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.axp-setting-page #ax-settings{padding:calc(var(--spacing, .25rem) * 4)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-divide-y-reverse{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-divide-y-reverse: 0;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type:
409
+ ], viewQueries: [{ propertyName: "sidebarTabs", first: true, predicate: ["sidebarTabs"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<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>", styles: ["@layer properties;.axp-setting-page ax-tabs{--ax-comp-tabs-default-border-radius: 0}.axp-setting-page ax-tabs ax-tab-item{margin-block:0px;border-radius:0!important;padding-block:calc(var(--spacing, .25rem) * 3);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-setting-page axp-layout-section axp-layout-content{display:flex;width:100%;flex-direction:column}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-divide-y-reverse: 0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-border-style: dashed;border-style:dashed}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){border-color:rgba(var(--ax-sys-color-border-default))}.axp-setting-page axp-layout-section axp-layout-content .--item-container{display:grid;align-items:flex-start;column-gap:calc(var(--spacing, .25rem) * 6);row-gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 4);grid-template-columns:minmax(0,1fr)}@media(width>=64rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 6)}}@media(width>=80rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 8)}}@media(width>=96rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 10)}}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container{grid-template-columns:minmax(11rem,34%) minmax(0,max-content)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container:has(.--is-hidden){display:none}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{min-width:0px;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{grid-column:auto}}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{min-width:0px;width:100%;max-width:100%;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{grid-column:2;width:clamp(14rem,36vw,24rem)}}@media(min-width:1024px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(16rem,28vw,28rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(18rem,24vw,32rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control{grid-template-columns:minmax(0,1fr)}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-label,.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{grid-column:1 / -1}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{width:100%;max-width:100%}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(20rem,50vw,36rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(24rem,40vw,42rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container axp-layout-description{margin-top:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}.axp-setting-page axp-layout-start-side{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.axp-setting-page #ax-settings{padding:calc(var(--spacing, .25rem) * 4)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-divide-y-reverse{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-divide-y-reverse: 0;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type:
401
410
  //
402
411
  AXSearchBoxModule }, { kind: "component", type: i3.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorClearButtonComponent, selector: "ax-clear-button", 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: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i7.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i7.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i8.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type:
403
412
  //
@@ -434,8 +443,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
434
443
  provide: AXPPageLayoutBase,
435
444
  useExisting: AXPSettingPageComponent,
436
445
  },
437
- ], host: { class: 'axp-setting-page' }, template: "<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>", styles: ["@layer properties;.axp-setting-page ax-tabs{--ax-comp-tabs-default-border-radius: 0}.axp-setting-page ax-tabs ax-tab-item{margin-block:0px;border-radius:0!important;padding-block:calc(var(--spacing, .25rem) * 3);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-setting-page axp-layout-section axp-layout-content{display:flex;width:100%;flex-direction:column}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-divide-y-reverse: 0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-border-style: dashed;border-style:dashed}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){border-color:var(--color-gray-200, oklch(92.8% .006 264.531))}.axp-setting-page axp-layout-section axp-layout-content .--item-container{display:grid;align-items:flex-start;column-gap:calc(var(--spacing, .25rem) * 6);row-gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 4);grid-template-columns:minmax(0,1fr)}@media(width>=64rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 6)}}@media(width>=80rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 8)}}@media(width>=96rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 10)}}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container{grid-template-columns:minmax(11rem,34%) minmax(0,max-content)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container:has(.--is-hidden){display:none}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{min-width:0px;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{grid-column:auto}}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{min-width:0px;width:100%;max-width:100%;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{grid-column:2;width:clamp(14rem,36vw,24rem)}}@media(min-width:1024px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(16rem,28vw,28rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(18rem,24vw,32rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control{grid-template-columns:minmax(0,1fr)}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-label,.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{grid-column:1 / -1}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{width:100%;max-width:100%}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(20rem,50vw,36rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(24rem,40vw,42rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container axp-layout-description{margin-top:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}.axp-setting-page axp-layout-start-side{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.axp-setting-page #ax-settings{padding:calc(var(--spacing, .25rem) * 4)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-divide-y-reverse{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-divide-y-reverse: 0;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
446
+ ], host: { class: 'axp-setting-page' }, template: "<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>", styles: ["@layer properties;.axp-setting-page ax-tabs{--ax-comp-tabs-default-border-radius: 0}.axp-setting-page ax-tabs ax-tab-item{margin-block:0px;border-radius:0!important;padding-block:calc(var(--spacing, .25rem) * 3);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-setting-page axp-layout-section axp-layout-content{display:flex;width:100%;flex-direction:column}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-divide-y-reverse: 0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){--tw-border-style: dashed;border-style:dashed}:where(.axp-setting-page axp-layout-section axp-layout-content>:not(:last-child)){border-color:rgba(var(--ax-sys-color-border-default))}.axp-setting-page axp-layout-section axp-layout-content .--item-container{display:grid;align-items:flex-start;column-gap:calc(var(--spacing, .25rem) * 6);row-gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 4);grid-template-columns:minmax(0,1fr)}@media(width>=64rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 6)}}@media(width>=80rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 8)}}@media(width>=96rem){.axp-setting-page axp-layout-section axp-layout-content .--item-container{padding-inline:calc(var(--spacing, .25rem) * 10)}}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container{grid-template-columns:minmax(11rem,34%) minmax(0,max-content)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container:has(.--is-hidden){display:none}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{min-width:0px;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-label{grid-column:auto}}.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{min-width:0px;width:100%;max-width:100%;grid-column:1 / -1}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{grid-column:2;width:clamp(14rem,36vw,24rem)}}@media(min-width:1024px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(16rem,28vw,28rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container .--item-control{width:clamp(18rem,24vw,32rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control{grid-template-columns:minmax(0,1fr)}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-label,.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{grid-column:1 / -1}.axp-setting-page axp-layout-section axp-layout-content .--item-container.--stacked-control .--item-control{width:100%;max-width:100%}@media(min-width:640px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(20rem,50vw,36rem)}}@media(min-width:1280px){.axp-setting-page axp-layout-section axp-layout-content .--item-container.--wide-control .--item-control{width:clamp(24rem,40vw,42rem)}}.axp-setting-page axp-layout-section axp-layout-content .--item-container axp-layout-description{margin-top:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}.axp-setting-page axp-layout-start-side{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.axp-setting-page #ax-settings{padding:calc(var(--spacing, .25rem) * 4)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-divide-y-reverse{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-divide-y-reverse: 0;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
438
447
  }], propDecorators: { sidebarTabs: [{ type: i0.ViewChild, args: ['sidebarTabs', { isSignal: true }] }] } });
439
448
 
440
449
  export { AXPSettingPageComponent };
441
- //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-page.component-eAaMh3-8.mjs.map
450
+ //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-page.component-DSbwsvRl.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-settings-management-client-setting-page.component-DSbwsvRl.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":"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"}
@@ -162,6 +162,10 @@ class AXPSettingsViewComponent {
162
162
  }
163
163
  //#endregion
164
164
  //#region ---- Row Visibility ----
165
+ /** Whether a section has at least one visible setting row. */
166
+ isSectionVisible(section) {
167
+ return section.settings.some((setting) => this.isSettingRowVisible(setting));
168
+ }
165
169
  /** Whether a setting row should be rendered (supports `widget.options.visibility` expressions). */
166
170
  isSettingRowVisible(setting) {
167
171
  const visibility = setting.widget.options?.['visibility'];
@@ -256,7 +260,7 @@ class AXPSettingsViewComponent {
256
260
  return getSmart(context, key);
257
261
  }
258
262
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPSettingsViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
259
- 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 <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\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 <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\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:
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:
260
264
  //
261
265
  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", "size", "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:
262
266
  //
@@ -286,7 +290,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
286
290
  AXPThemeLayoutSectionComponent,
287
291
  ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
288
292
  class: 'w-full',
289
- }, 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 <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\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 <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\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>" }]
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>" }]
290
294
  }], propDecorators: { form: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXFormComponent), { isSignal: true }] }], container: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPWidgetContainerComponent), { isSignal: true }] }] } });
291
295
  function hasSettingContextValue(context, key) {
292
296
  const value = Object.prototype.hasOwnProperty.call(context, key) ? context[key] : getSmart(context, key);
@@ -303,4 +307,4 @@ function hasSettingContextValue(context, key) {
303
307
  }
304
308
 
305
309
  export { AXPSettingsViewComponent };
306
- //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-view.component-CSJ-1pfO.mjs.map
310
+ //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-view.component-BVXPAqwc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-settings-management-client-setting-view.component-BVXPAqwc.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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"}
@@ -20,6 +20,32 @@ import { AXPCommonMenuKeys, AXPCommonPermissionGroupKeys } from '@acorex-platfor
20
20
  import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
21
21
  import { AXCRuntimeRemoteApiModule } from '@acorex-platform/client-connectivity-api';
22
22
 
23
+ /** Settings with `widget.options.visibility === false` are registered but omitted from the settings UI. */
24
+ function isSettingStaticallyHidden(setting) {
25
+ return setting.widget.options?.['visibility'] === false;
26
+ }
27
+ function filterSettingsPageVisibleSettings(settings) {
28
+ return settings.filter((setting) => !isSettingStaticallyHidden(setting));
29
+ }
30
+ function sectionHasSettingsPageVisibleRows(section) {
31
+ return filterSettingsPageVisibleSettings(section.settings).length > 0;
32
+ }
33
+ /** Drop statically hidden rows, then omit sections/groups that have nothing left to render. */
34
+ function filterSettingsPageVisibleGroups(groups) {
35
+ return groups
36
+ .map((group) => ({
37
+ ...group,
38
+ sections: group.sections
39
+ .map((section) => ({
40
+ ...section,
41
+ settings: filterSettingsPageVisibleSettings(section.settings),
42
+ }))
43
+ .filter((section) => section.settings.length > 0),
44
+ groups: filterSettingsPageVisibleGroups(group.groups),
45
+ }))
46
+ .filter((group) => group.sections.length > 0 || group.groups.length > 0);
47
+ }
48
+
23
49
  /**
24
50
  * Filters setting groups for in-page search. When `settingSearchTextByKey` is provided (lowercased
25
51
  * translated blobs keyed by setting name), setting matches use it; otherwise a raw key fallback is used.
@@ -59,8 +85,9 @@ function searchSettings(groups, search, settingSearchTextByKey) {
59
85
  addGroupToResult(group, matchedSections, settingMatchResult);
60
86
  }
61
87
  };
62
- const sectionMatches = (section) => section.name.toLowerCase().includes(normalizedSearch) ||
63
- section.title.toLowerCase().includes(normalizedSearch);
88
+ const sectionMatches = (section) => sectionHasSettingsPageVisibleRows(section) &&
89
+ (section.name.toLowerCase().includes(normalizedSearch) ||
90
+ section.title.toLowerCase().includes(normalizedSearch));
64
91
  const settingSearchBlob = (setting) => {
65
92
  const fromIndex = settingSearchTextByKey?.[setting.name];
66
93
  if (fromIndex) {
@@ -71,7 +98,7 @@ function searchSettings(groups, search, settingSearchTextByKey) {
71
98
  .toLowerCase();
72
99
  };
73
100
  const filterSettings = (section) => {
74
- const matchedSettings = section.settings.filter((setting) => {
101
+ const matchedSettings = filterSettingsPageVisibleSettings(section.settings).filter((setting) => {
75
102
  const blob = settingSearchBlob(setting);
76
103
  return (setting.name.toLowerCase().includes(normalizedSearch) ||
77
104
  blob.includes(normalizedSearch));
@@ -170,7 +197,7 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
170
197
  status: AXPPageStatus.Processing,
171
198
  });
172
199
  try {
173
- const groups = await settingDefinitionService.getListAsync(scope);
200
+ const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(scope));
174
201
  patchState(store, {
175
202
  groups: groups,
176
203
  });
@@ -205,7 +232,7 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
205
232
  },
206
233
  async reload() {
207
234
  await settingDefinitionService.reload();
208
- const groups = await settingDefinitionService.getListAsync(store.scope());
235
+ const groups = filterSettingsPageVisibleGroups(await settingDefinitionService.getListAsync(store.scope()));
209
236
  const oldActivateGroupName = store.activateGroup()?.name;
210
237
  patchState(store, {
211
238
  groups: groups,
@@ -222,6 +249,9 @@ const AXPSettingsViewModel = signalStore(withState(() => ({
222
249
  const walkSections = async (sections) => {
223
250
  for (const section of sections) {
224
251
  for (const setting of section.settings) {
252
+ if (isSettingStaticallyHidden(setting)) {
253
+ continue;
254
+ }
225
255
  const parts = [await translateService.translateAsync(setting.title)];
226
256
  if (setting.description) {
227
257
  parts.push(await translateService.translateAsync(setting.description));
@@ -544,7 +574,8 @@ class AXPSettingSearchProvider {
544
574
  }
545
575
  return parts.join(' ').toLowerCase();
546
576
  }));
547
- const searchResults = allSettings.filter((setting, i) => translatedBlobs[i].includes(needle) || setting.name.toLowerCase().includes(needle));
577
+ const searchResults = allSettings.filter((setting, i) => !isSettingStaticallyHidden(setting) &&
578
+ (translatedBlobs[i].includes(needle) || setting.name.toLowerCase().includes(needle)));
548
579
  return sortBy(searchResults.map((setting) => ({
549
580
  title: setting.title,
550
581
  description: setting.description,
@@ -811,10 +842,6 @@ function sleep(ms) {
811
842
  return new Promise((resolve) => setTimeout(resolve, ms));
812
843
  }
813
844
  async function loadPlatformSettingsWithRetry(settingsService, offlineBootstrap) {
814
- // Device offline — skip retries and go straight to offline / unavailable handling.
815
- if (offlineBootstrap.isDeviceOffline()) {
816
- throw new Error('Device is offline');
817
- }
818
845
  let lastError;
819
846
  for (let attempt = 1; attempt <= PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS; attempt++) {
820
847
  try {
@@ -824,7 +851,10 @@ async function loadPlatformSettingsWithRetry(settingsService, offlineBootstrap)
824
851
  catch (error) {
825
852
  lastError = error;
826
853
  console.error(`Platform settings bootstrap failed (attempt ${attempt}/${PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS})`, error);
827
- if (offlineBootstrap.isDeviceOffline()) {
854
+ // `navigator.onLine` is a hint only — always try the API at least once
855
+ // (headless / Playwright often starts with onLine=false while localhost works).
856
+ const skipRemainingRetries = attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS && offlineBootstrap.isDeviceOffline();
857
+ if (skipRemainingRetries) {
828
858
  throw error;
829
859
  }
830
860
  if (attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS) {
@@ -846,13 +876,13 @@ function routesFacory() {
846
876
  children: [
847
877
  {
848
878
  path: '',
849
- loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-page.component-eAaMh3-8.mjs').then((c) => c.AXPSettingPageComponent),
879
+ loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-page.component-DSbwsvRl.mjs').then((c) => c.AXPSettingPageComponent),
850
880
  canDeactivate: [axpSettingsPageCanDeactivateGuard],
851
881
  data: { reuse: true },
852
882
  children: [
853
883
  {
854
884
  path: ':group',
855
- loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-view.component-CSJ-1pfO.mjs').then((c) => c.AXPSettingsViewComponent),
885
+ loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-view.component-BVXPAqwc.mjs').then((c) => c.AXPSettingsViewComponent),
856
886
  data: { reuse: false },
857
887
  },
858
888
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-settings-management-client.mjs","sources":["../../../../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/manifest.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 { AXPSettingDefinition, AXPSettingDefinitionGroup, AXPSettingDefinitionSection } from '@acorex-platform/framework-client/common';\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 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 = 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';\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 = 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 = 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 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","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-settings-management-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Settings Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const SettingsManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'platform',\n domain: 'platform',\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\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';\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 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';\nimport { inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDistributedEventListenerProvider } from '@acorex-platform/framework-client/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\n\n//#region ---- Types ----\n\ntype ProfileSectionsPayload = {\n sections: Record<string, unknown>[];\n groupId?: string;\n};\n\n//#endregion\n\n//#region ---- Settings management profile sections ----\n\n/** Contributes settings-related sections to the user profile hub. */\nexport const SettingsManagementProfileSectionsHookProvider: AXPDistributedEventListenerProvider<\n ProfileSectionsPayload,\n ProfileSectionsPayload\n> = {\n key: 'profile-page.sections',\n priority: 10,\n execute: (payload) => {\n if (payload.groupId && payload.groupId !== 'account') {\n return payload;\n }\n\n const commandService = inject(AXPCommandService);\n const sessionService = inject(AXPSessionService);\n const appName = sessionService.application?.name;\n\n const sections: Record<string, unknown>[] = [];\n\n if (commandService.exists(AXMSettingsManagementCommandKeys.Client.Export)) {\n sections.push({\n id: 'export-data',\n groupId: 'account',\n title: '@settings-management:profile-page.sections.export-data.title',\n description: '@settings-management:profile-page.sections.export-data.description',\n icon: 'far fa-file-export',\n priority: 30,\n layout: { colSpan: 6 },\n actions: [\n {\n name: 'export-local-data',\n title: '@settings-management:profile-page.sections.export-data.actions.manage',\n icon: 'far fa-download',\n command: { name: AXMSettingsManagementCommandKeys.Client.Export },\n },\n ],\n });\n }\n\n if (appName) {\n sections.push({\n id: 'all-preferences',\n groupId: 'account',\n title: '@settings-management:profile-page.sections.all-preferences.title',\n description: '@settings-management:profile-page.sections.all-preferences.description',\n icon: 'far fa-sliders',\n priority: 40,\n layout: { colSpan: 6 },\n actions: [\n {\n name: 'view-all-preferences',\n title: '@settings-management:profile-page.sections.all-preferences.actions.manage',\n icon: 'far fa-arrow-right',\n command: {\n name: 'navigate',\n options: { path: `/${appName}/settings/user` },\n },\n },\n ],\n });\n }\n\n if (!sections.length) {\n return payload;\n }\n\n return {\n ...payload,\n sections: [...payload.sections, ...sections],\n };\n },\n};\n\n//#endregion\n","import { AXPActionMenuItem } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDistributedEventListenerProvider } from '@acorex-platform/framework-client/core';\n\n//#region ---- Profile slot settings menu hook ----\n\n/** Registers the user settings entry in the profile dropdown (always available; no permission). */\nexport const ProfileSlotSettingsMenuHookProvider: AXPDistributedEventListenerProvider<\n { items: AXPActionMenuItem[] },\n { items: AXPActionMenuItem[] }\n> = {\n key: 'profile-slot.menu-items',\n priority: 0,\n execute: (payload) => {\n const sessionService = inject(AXPSessionService);\n const appName = sessionService.application?.name;\n\n if (!appName) {\n return payload;\n }\n\n return {\n ...payload,\n items: [\n ...payload.items,\n {\n name: 'settings',\n title: '@auth:profile.settings',\n icon: 'fa-light fa-gear',\n shortcuts: [{ keys: 'ctrl+shift+u', allowInEditableFields: true }],\n command: {\n name: 'navigate',\n options: {\n path: `/${appName}/settings/user`,\n },\n },\n } satisfies AXPActionMenuItem,\n ],\n };\n },\n};\n\n//#endregion\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_PROTECTED_ROUTE_GUARDS,\n AXP_SEARCH_DEFINITION_PROVIDER,\n AXP_SEARCH_PROVIDER,\n AXP_SETTINGS_SYNC_KEYS,\n AXPPlatformSettingsLoadState,\n AXPPlatformSettingsOfflineBootstrapService,\n AXPSettingsService,\n traceSettingsAppStartupLoadComplete,\n traceSettingsAppStartupLoadStarted,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPAppStartUpService,\n AXP_APP_STARTUP_PRIORITY,\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n AXP_MODULE_MANIFEST_PROVIDER,\n} from '@acorex-platform/framework-client/core';\nimport { SettingsManagementManifest } from './manifest';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { AXPSettingSearchDefinitionProvider } from './features/settings/search-definition.provider';\nimport { AXPSettingSearchProvider } from './features/settings/search.provider';\nimport { axpSettingsPageCanDeactivateGuard } from './features/settings/settings-page-can-deactivate.guard';\nimport { axpSettingsScopeCanActivateGuard } from './features/settings/settings-scope.guard';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { SettingsManagementProfileSectionsHookProvider } from './features/profile-page/settings-management-profile-sections.hook';\nimport { ProfileSlotSettingsMenuHookProvider } from './profile-slot-settings-menu.hook';\nimport { axmSettingsSyncKeys } from '@acorex-platform/module-settings-management-client/contracts';\nimport { AXCRuntimeRemoteApiModule } from '@acorex-platform/client-connectivity-api';\n\n//#region ----- Constants -----\n\nconst PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS = 5;\nconst PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS = 2_000;\n\n//#endregion\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function loadPlatformSettingsWithRetry(\n settingsService: AXPSettingsService,\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\n): Promise<void> {\n // Device offline — skip retries and go straight to offline / unavailable handling.\n if (offlineBootstrap.isDeviceOffline()) {\n throw new Error('Device is offline');\n }\n\n let lastError: unknown;\n for (let attempt = 1; attempt <= PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS; attempt++) {\n try {\n await settingsService.ensurePlatformSettingsLoaded();\n return;\n } catch (error) {\n lastError = error;\n console.error(\n `Platform settings bootstrap failed (attempt ${attempt}/${PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS})`,\n error,\n );\n if (offlineBootstrap.isDeviceOffline()) {\n throw error;\n }\n if (attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS) {\n await sleep(PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS);\n }\n }\n }\n throw lastError;\n}\n\nfunction routesFacory() {\n let routes: Routes = [\n {\n path: ':app/settings/:scope',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS, axpSettingsScopeCanActivateGuard],\n data: { tab: true, rootLayout: true },\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/settings/setting-page/setting-page.component').then((c) => c.AXPSettingPageComponent),\n canDeactivate: [axpSettingsPageCanDeactivateGuard],\n data: { reuse: true },\n children: [\n {\n path: ':group',\n loadComponent: () =>\n import('./features/settings/setting-view/setting-view.component').then(\n (c) => c.AXPSettingsViewComponent,\n ),\n data: { reuse: false },\n },\n ],\n },\n ],\n },\n ];\n return routes;\n}\n\n@NgModule({\n imports: [AXCRuntimeRemoteApiModule],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXP_SETTINGS_SYNC_KEYS,\n useValue: axmSettingsSyncKeys,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXPSettingSearchProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXPSettingSearchDefinitionProvider,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: SettingsManagementManifest,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: ProfileSlotSettingsMenuHookProvider,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: SettingsManagementProfileSectionsHookProvider,\n multi: true,\n },\n ],\n})\nexport class AXMSettingsManagementModule {\n constructor(\n appInitService: AXPAppStartUpService,\n settingsService: AXPSettingsService,\n platformSettingsLoadState: AXPPlatformSettingsLoadState,\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\n ) {\n appInitService.registerTask({\n name: 'platform-settings',\n priority: AXP_APP_STARTUP_PRIORITY.platformSettings,\n run: async () => {\n try {\n await loadPlatformSettingsWithRetry(settingsService, offlineBootstrap);\n platformSettingsLoadState.clear();\n } catch (error) {\n console.error('Platform settings bootstrap failed after retries', error);\n // Never open dialogs here (APP_INITIALIZER — overlay host is null).\n // Only inspect IndexedDB; confirm runs later after the app is stable.\n let canOfferOffline = false;\n try {\n canOfferOffline = await offlineBootstrap.canOfferOfflineContinue();\n } catch (offlineError) {\n console.error('Offline continue cache check failed', offlineError);\n }\n if (canOfferOffline) {\n platformSettingsLoadState.setPendingOfflineContinue(error);\n } else {\n platformSettingsLoadState.setFailure(error);\n }\n // Keep only platform-settings-failure-redirect; skip Settings/regional/theme (they hang on API).\n appInitService.abortRemainingStartupTasks();\n }\n },\n });\n\n appInitService.registerTask({\n name: 'Settings',\n statusText: '@settings-management:app-startup.loading-settings',\n priority: AXP_APP_STARTUP_PRIORITY.settings,\n run: async () => {\n if (\n platformSettingsLoadState.hasFailure() ||\n platformSettingsLoadState.hasPendingOfflineContinue() ||\n platformSettingsLoadState.isOfflineMode()\n ) {\n return;\n }\n traceSettingsAppStartupLoadStarted();\n const startedAt = Date.now();\n const settings = await settingsService.load('app-startup');\n traceSettingsAppStartupLoadComplete({\n totalKeys: settings.length,\n keysByScope: {},\n durationMs: Date.now() - startedAt,\n });\n },\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAEA;;;AAGG;SACa,cAAc,CAC5B,MAAmC,EACnC,MAAc,EACd,sBAA+C,EAAA;IAE/C,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;IACpC,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE;IAC9C,MAAM,kBAAkB,GAAgC,EAAE;IAC1D,MAAM,kBAAkB,GAAgC,EAAE;AAC1D,IAAA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU;AAEzC,IAAA,MAAM,qBAAqB,GAAG,CAAC,KAAgC,KAAa,CAAA,EAAG,KAAK,CAAC,IAAI,CAAA,CAAA,EAAI,KAAK,CAAC,KAAK,EAAE;IAE1G,MAAM,gBAAgB,GAAG,CACvB,KAAgC,EAChC,QAAuC,EACvC,WAAwC,KACtC;AACF,QAAA,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACjC,WAAW,CAAC,IAAI,CAAC;AACf,gBAAA,GAAG,KAAK;gBACR,QAAQ;gBACR,MAAM,EAAE,EAAE;AACX,aAAA,CAAC;AACF,YAAA,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;QAC9B;AACF,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,CACtB,KAAgC,EAChC,QAA2D,KACzD;QACF,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;AACvD,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,kBAAkB,CAAC;QAC9D;AACF,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,CACtB,KAAgC,EAChC,QAAsF,KACpF;AACF,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC;aAC3B,GAAG,CAAC,QAAQ;aACZ,MAAM,CAAC,CAAC,OAAO,KAA6C,OAAO,KAAK,IAAI,CAAC;AAChF,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,kBAAkB,CAAC;QAC9D;AACF,IAAA,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,CAAC,OAAoC,KAC1D,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AAExD,IAAA,MAAM,iBAAiB,GAAG,CAAC,OAA6B,KAAY;QAClE,MAAM,SAAS,GAAG,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;QACxD,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,SAAS;QAClB;QACA,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;aAC7F,IAAI,CAAC,GAAG;AACR,aAAA,WAAW,EAAE;AAClB,IAAA,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,CAAC,OAAoC,KAAwC;QAClG,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC1D,YAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC;YACvC,QACE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACrD,gBAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AAEnC,QAAA,CAAC,CAAC;QACF,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI;AACtF,IAAA,CAAC;AAED,IAAA,MAAM,uBAAuB,GAAG,CAAC,KAAgC,KAAI;AACnE,QAAA,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACvC,QAAA,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAChD,IAAA,CAAC;AAED,IAAA,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC;AAEvC,IAAA,OAAO,CAAC,GAAG,kBAAkB,EAAE,GAAG,kBAAkB,CAAC;AACvD;;ACpEA;AACA,MAAM,qBAAqB,GAAG,GAAG;AAEjC;AACA,SAAS,oBAAoB,CAAC,OAAgC,EAAE,GAAW,EAAA;AACzE,IAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;AACtD,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC;IACrB;AACA,IAAA,OAAO,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;AAC/B;AAEA,SAAS,kBAAkB,CAAC,MAAmC,EAAA;IAC7D,MAAM,IAAI,GAAa,EAAE;AACzB,IAAA,MAAM,YAAY,GAAG,CAAC,QAAuC,KAAI;AAC/D,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC9B,YAAA,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;AACtC,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACzB;QACF;AACF,IAAA,CAAC;AACD,IAAA,MAAM,UAAU,GAAG,CAAC,EAA+B,KAAI;AACrD,QAAA,KAAK,MAAM,KAAK,IAAI,EAAE,EAAE;AACtB,YAAA,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC5B,YAAA,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1B;AACF,IAAA,CAAC;IACD,UAAU,CAAC,MAAM,CAAC;AAClB,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,oBAAoB,GAAG,WAAW,CAC7C,SAAS,CAAC,OAAO;AACf,IAAA,MAAM,EAAE,EAAiC;AACzC,IAAA,aAAa,EAAE,SAAkD;AACjE,IAAA,KAAK,EAAE,GAA0B;;AAEjC,IAAA,gBAAgB,EAAE,IAAqB;AACvC,IAAA,sBAAsB,EAAE,EAA4B;;AAEpD,IAAA,eAAe,EAAE,EAAyB;AAC1C,IAAA,OAAO,EAAE,EAAyB;;AAElC,IAAA,SAAS,EAAE,KAAK;;AAEhB,IAAA,cAAc,EAAE,CAAC;;AAEjB,IAAA,eAAe,EAAE,KAAK;;AAEtB,IAAA,gBAAgB,EAAE,CAAC;;IAEnB,MAAM,EAAE,aAAa,CAAC,UAAU;AAChC,IAAA,IAAI,EAAE,IAA8B;AACrC,CAAA,CAAC,CAAC,EACH,YAAY,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM;AACjE,IAAA,aAAa,EAAE,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,gBAAgB,EAAE;QAClC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;AAC1B,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,sBAAsB,EAAE,CAAC;AAC1E,IAAA,CAAC,CAAC;AACF,IAAA,gBAAgB,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC;AAC/D,IAAA,UAAU,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,aAAa,EAAE,IAAI,IAAI,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;AACpF,IAAA,UAAU,EAAE,QAAQ,CAAC,MAAK;QACxB,OAAO,CAAA,EAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA,MAAA,CAAQ;AAC3D,IAAA,CAAC,CAAC;AACF,IAAA,gBAAgB,EAAE,QAAQ,CAAC,MAAK;QAC9B,OAAO,CAAA,EAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA,YAAA,CAAc;AACjE,IAAA,CAAC,CAAC;AACF,IAAA,WAAW,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC;AAC7D,IAAA,MAAM,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,IAAI,aAAa,CAAC,UAAU,CAAC;AAClE,IAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,IAAI,aAAa,CAAC,UAAU,CAAC;AACpE,IAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,OAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;AAC3C,CAAA,CAAC,CAAC,EACH,WAAW,CACT,CACE,KAAK,EACL,wBAAwB,GAAG,MAAM,CAAC,mCAAmC,CAAC,EACtE,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAChD,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,EACrC,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC,MAC3C;AACJ,IAAA,YAAY,CAAC,IAAqB,EAAA;QAChC,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,CAAC,KAA0B,EAAA;AACnC,QAAA,4BAA4B,CAAC,KAAK,EAAE,uBAAuB,CAAC;AAC5D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;QAC5B,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,aAAa,CAAC,UAAU;AACjC,SAAA,CAAC;AACF,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,YAAY,CAAC,KAAK,CAAC;YACjE,UAAU,CAAC,KAAK,EAAE;AAChB,gBAAA,MAAM,EAAE,MAAM;AACf,aAAA,CAAC;AACF,YAAA,MAAM,IAAI,CAAC,yBAAyB,EAAE;;;YAGtC,MAAM,mBAAmB,CAAC,MAAM,CAAC,KAAyB,EAAE,oBAAoB,CAAC;AACjF,YAAA,MAAM,cAAc,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,KAAyB,CAAC,CAAC,GAAG,EAAE;AACvF,YAAA,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,KAAyB,CAAC,CAAC,aAAa,EAAE;YAC3F,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,cAAc,EAAE;YAClD,UAAU,CAAC,KAAK,EAAE;gBAChB,OAAO;AACP,gBAAA,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC;AACnC,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;AACF,YAAA,6BAA6B,CAAC;gBAC5B,KAAK;gBACL,UAAU,EAAE,MAAM,CAAC,MAAM;gBACzB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM;AAClD,gBAAA,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;AACnC,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;QACnD;gBAAU;;YAER,UAAU,CAAC,KAAK,EAAE;gBAChB,MAAM,EAAE,aAAa,CAAC,QAAQ;AAC/B,aAAA,CAAC;QACJ;IACF,CAAC;AACD,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,wBAAwB,CAAC,MAAM,EAAE;AACvC,QAAA,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzE,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,IAAI;QACxD,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,aAAa,EAAE,SAAS;AACzB,SAAA,CAAC;QACF,IAAI,oBAAoB,EAAE;AACxB,YAAA,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAAC;QACnD;AACA,QAAA,MAAM,IAAI,CAAC,yBAAyB,EAAE;IACxC,CAAC;AACD,IAAA,MAAM,yBAAyB,GAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;QAC7B,MAAM,GAAG,GAA2B,EAAE;AACtC,QAAA,MAAM,YAAY,GAAG,OAAO,QAAuC,KAAI;AACrE,YAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC9B,gBAAA,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;AACtC,oBAAA,MAAM,KAAK,GAAa,CAAC,MAAM,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,oBAAA,IAAI,OAAO,CAAC,WAAW,EAAE;AACvB,wBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACxE;AACA,oBAAA,IAAI,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE;AACjC,wBAAA,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,aAAa,EAAE;4BACvC,KAAK,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBACxD;oBACF;AACA,oBAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;gBACnD;YACF;AACF,QAAA,CAAC;AACD,QAAA,MAAM,UAAU,GAAG,OAAO,EAA+B,KAAI;AAC3D,YAAA,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;AAClB,gBAAA,MAAM,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC9B,gBAAA,MAAM,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;YAC5B;AACF,QAAA,CAAC;AACD,QAAA,MAAM,UAAU,CAAC,MAAM,CAAC;QACxB,UAAU,CAAC,KAAK,EAAE,EAAE,sBAAsB,EAAE,GAAG,EAAE,CAAC;IACpD,CAAC;AACD,IAAA,aAAa,CAAC,OAA4B,EAAA;QACxC,UAAU,CAAC,KAAK,EAAE;YAChB,OAAO;AACR,SAAA,CAAC;IACJ,CAAC;AACD,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,KAAK,CAAC,eAAe,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,EAAE;YAC1D;QACF;QACA,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ,CAAC;AACD,IAAA,kBAAkB,CAAC,OAAgB,EAAA;AACjC,QAAA,IAAI,KAAK,CAAC,eAAe,EAAE,KAAK,OAAO,EAAE;YACvC;QACF;QACA,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,eAAe,EAAE,OAAO;AACzB,SAAA,CAAC;IACJ,CAAC;AACD,IAAA,gBAAgB,CAAC,KAAgC,EAAA;QAC/C,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ,CAAC;IACD,mBAAmB,GAAA;QACjB,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,aAAa,EAAE,SAAS;AACxB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ,CAAC;AACD,IAAA,sBAAsB,CAAC,IAAY,EAAA;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;QACzD,IAAI,KAAK,EAAE;YACT,UAAU,CAAC,KAAK,EAAE;AAChB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;QACJ;IACF,CAAC;;IAED,MAAM,MAAM,CAAC,UAAkB,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC9C,UAAU,CAAC,KAAK,EAAE;AAChB,gBAAA,gBAAgB,EAAE,UAAU;AAC5B,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;QACJ;aAAO;YACL,UAAU,CAAC,KAAK,EAAE;AAChB,gBAAA,gBAAgB,EAAE,IAAI;AACtB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;QACJ;IACF,CAAC;IACD,WAAW,GAAA;QACT,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ,CAAC;AACD,IAAA,MAAM,KAAK,GAAA;AACT,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE;QACzB,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,CAAC,WAAW,EAAE;QAClB,UAAU,CAAC,KAAK,EAAE;YAChB,MAAM,EAAE,aAAa,CAAC,UAAU;AACjC,SAAA,CAAC;AAEF,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;AACxC,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gBACtB,UAAU,CAAC,KAAK,EAAE;oBAChB,MAAM,EAAE,aAAa,CAAC,QAAQ;AAC/B,iBAAA,CAAC;gBACF,YAAY,CAAC,IAAI,CAAC;AAChB,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,KAAK,EAAE,MAAM,gBAAgB,CAAC,cAAc,CAAC,+CAA+C,CAAC;AAC7F,oBAAA,OAAO,EAAE,MAAM,gBAAgB,CAAC,cAAc,CAAC,iDAAiD,CAAC;AACjG,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;AACF,gBAAA,OAAO,KAAK;YACd;;;YAIA,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACtD,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE;AAC/B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,EAAE;YACxC,MAAM,aAAa,GAA4B,EAAE;AACjD,YAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;gBAC7B,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC;gBAChD,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC;gBACzD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;AAClC,oBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK;gBAC5B;YACF;YACA,MAAM,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAsB,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAEtG,YAAA,MAAM,YAAY,GAAG,MAAM,wBAAwB,CAAC,wBAAwB,EAAE;YAC9E,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC;;YAGpF,MAAM,WAAW,GAA4B,EAAE;AAC/C,YAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;AAC7B,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG;AACnE,sBAAE,aAAa,CAAC,GAAG;AACnB,sBAAE,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC;AACtC,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,oBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;gBAC1B;YACF;YAEA,UAAU,CAAC,KAAK,EAAE;gBAChB,MAAM,EAAE,aAAa,CAAC,QAAQ;AAC9B,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC;AACvC,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC;AAC3C,aAAA,CAAC;YAEF,MAAM,eAAe,GAAG;AACtB,kBAAE;kBACA,2DAA2D;YAC/D,MAAM,iBAAiB,GAAG;AACxB,kBAAE;kBACA,6DAA6D;YAEjE,YAAY,CAAC,IAAI,CAAC;AAChB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,MAAM,gBAAgB,CAAC,cAAc,CAAC,eAAe,CAAC;AAC7D,gBAAA,OAAO,EAAE,MAAM,gBAAgB,CAAC,cAAc,CAAC,iBAAiB,CAAC;AACjE,gBAAA,QAAQ,EAAE,eAAe;AACzB,gBAAA,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE,gBAAgB,GAAG,qBAAqB,GAAG,IAAI;AACxD,gBAAA,eAAe,EAAE,IAAI;AACtB,aAAA,CAAC;YAEF,IAAI,gBAAgB,EAAE;gBACpB,UAAU,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC;YAC5D;AAEA,YAAA,OAAO,IAAI;QACb;AAAE,QAAA,MAAM;YACN,UAAU,CAAC,KAAK,EAAE;gBAChB,MAAM,EAAE,aAAa,CAAC,QAAQ;AAC/B,aAAA,CAAC;YACF,YAAY,CAAC,IAAI,CAAC;AAChB,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,MAAM,gBAAgB,CAAC,cAAc,CAAC,yDAAyD,CAAC;AACvG,gBAAA,OAAO,EAAE,MAAM,gBAAgB,CAAC,cAAc,CAAC,2DAA2D,CAAC;AAC3G,gBAAA,QAAQ,EAAE,eAAe;AACzB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,eAAe,EAAE,IAAI;AACtB,aAAA,CAAC;AACF,YAAA,OAAO,KAAK;QACd;IACF,CAAC;AACD,IAAA,eAAe,CAAC,OAAgC,EAAA;AAC9C,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;QACnC,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,eAAe,EAAE,QAAQ;AACzB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC;IACJ,CAAC;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE;QACzB,IAAI,EAAE,WAAW,EAAE;QAEnB,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QACnD,UAAU,CAAC,KAAK,EAAE;YAChB,MAAM,EAAE,aAAa,CAAC,QAAQ;AAC9B,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,eAAe,EAAE,QAAQ;AACzB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC;AAC/C,SAAA,CAAC;IACJ,CAAC;AACD,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAsB,CAAC,CAAC,aAAa,EAAE;QACnG,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,OAAO,EAAE,QAAQ;AAClB,SAAA,CAAC;;AAEF,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE;QACjC,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,OAAO,EAAE;QAChB;IACF,CAAC;AACF,CAAA,CAAC,CACH,EACD,SAAS,CACP,CACE,KAAK,EACL,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAChD,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,EACjD,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,MACnC;AACJ,IAAA,MAAM,MAAM,GAAA;;AAEV,QAAA,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YAC1F,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;gBACnB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC5C,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE;oBACjF,UAAU,CAAC,KAAK,EAAE;AAChB,wBAAA,eAAe,EAAE;4BACf,GAAG,KAAK,CAAC,eAAe,EAAE;4BAC1B,CAAC,CAAC,GAAG,YAAY;AAClB,yBAAA;AACD,wBAAA,OAAO,EAAE;4BACP,GAAG,KAAK,CAAC,OAAO,EAAE;4BAClB,CAAC,CAAC,GAAG,YAAY;AAClB,yBAAA;AACD,wBAAA,SAAS,EAAE,KAAK;AACjB,qBAAA,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;AAEF,QAAA,KAAK,CAAC,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,YAAW;AACzF,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE;AACpB,gBAAA,MAAM,KAAK,CAAC,MAAM,EAAE;YACtB;AACF,QAAA,CAAC,CAAC;IACJ,CAAC;AACD,IAAA,SAAS,KAAI,CAAC;CACf,CAAC,CACH;;ACnbH;AAKA;AAEA;AAEA;;;AAGG;AACI,MAAM,0BAA0B,GAAsB;AAC3D,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AAC9B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,QAAQ,EAAE,IAAI;;CAGf;AAED;;MCxBa,kCAAkC,CAAA;IAC7C,MAAM,OAAO,CAAC,OAA2C,EAAA;AACvD,QAAA,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,EAAE;AAC5E,YAAA,MAAM,EAAE;AACN,gBAAA,EAAE,EAAE,eAAe;AACpB,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,QAAQ,EAAE,SAAS;AACpB,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AACD;;MCAY,wBAAwB,CAAA;AAArC,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,mCAAmC,CAAC;AAC7D,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAyEzD;IAvEE,MAAM,MAAM,CAAC,IAAY,EAAA;AACvB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACzE,QAAA,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;AAC7B,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACzF;;QAGA,MAAM,WAAW,GAAiC,EAAE;AACpD,QAAA,MAAM,eAAe,GAAG,CAAC,KAAgC,KAAI;AAC3D,YAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;gBACpC,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAiC,CAAA,CAAC,CAAC;YACnG;AACA,YAAA,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;AACnC,gBAAA,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC5B;AACF,QAAA,CAAC;AAED,QAAA,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;YACjC,eAAe,CAAC,KAAK,CAAC;QACxB;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QACxC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,WAAW,CAAC,GAAG,CAAC,OAAO,OAAO,KAAI;AAChC,YAAA,MAAM,KAAK,GAAa,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnF,YAAA,IAAI,OAAO,CAAC,WAAW,EAAE;AACvB,gBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC7E;AACA,YAAA,IAAI,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE;AACjC,gBAAA,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,aAAa,EAAE;AACvC,oBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC7D;YACF;YACA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QACtC,CAAC,CAAC,CACH;AAED,QAAA,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CACtC,CAAC,OAAO,EAAE,CAAC,KACT,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CACrF;QAED,OAAO,MAAM,CACX,aAAa,CAAC,GAAG,CAAkB,CAAC,OAAO,MAAM;YAC/C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,kBAAkB,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAA,CAAE;AACvG,qBAAA;AACF;AACF,aAAA;YACD,MAAM,EAAE,OAAO,CAAC;AACd,kBAAE;AACA,oBAAA,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;oBAC1B,IAAI,EAAE,OAAO,CAAC,KAAkC;AACjD;AACD,kBAAE,SAAS;AACd,SAAA,CAAC,CAAC,EACH,CAAC,OAAO,CAAC,CACV;IACH;AACD;;AC1FD;AAEO,MAAM,iCAAiC,GAAG,sCAAsC,EAA2B;AAElH;;ACPA;AAUA;AAEA;AAEA,MAAM,iBAAiB,GAAkC;IACvD,CAAC,EAAE,qCAAqC,CAAC,wBAAwB;IACjE,CAAC,EAAE,qCAAqC,CAAC,sBAAsB;;AAE/D,IAAA,CAAC,EAAE,IAAI;CACR;AAED;AAEA;AAEA;;;;AAIG;AACI,MAAM,gCAAgC,GAAkB,CAAC,KAA6B,KAAI;AAC/F,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAE7B,IAAA,OAAO,cAAc,CAAC,wBAAwB,CAAC,IAAI,CACjD,KAAK,EAAE,EACP,GAAG,CAAC,MAAwB;AAC1B,QAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC;AAC3C,QAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC;AACpD,QAAA,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,QAAQ,CAAC;QAEtD,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,cAAc,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE;AAChD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAChD,CAAC,CAAC,CACH;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA6B,EAAA;IACtD,IAAI,OAAO,GAAkC,KAAK;IAClD,OAAO,OAAO,EAAE;QACd,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;QAC3C,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM;IAC1B;AACA,IAAA,OAAO,EAAE;AACX;AAEA;;MCvDa,eAAe,CAAA;AAA5B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;IA2CpD;IAzCE,MAAM,OAAO,CAAC,OAA+B,EAAA;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI;QAErD,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;QAC5E,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;;QAGA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;AAChD,YAAA;gBACE,IAAI,EAAE,6BAA6B,CAAC,gBAAgB;AACpD,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,IAAI,EAAE,yDAAyD;AAC/D,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,CAAA,CAAA,EAAI,OAAO,CAAA,kBAAA,CAAoB;AACrC,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC,oBAAA,WAAW,EAAE,CAAC,qCAAqC,CAAC,wBAAwB,CAAC;AAC9E,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;;QAGF,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;AACtD,YAAA,EAAE,IAAI,EAAE,CAAA,EAAG,6BAA6B,CAAC,yBAAyB,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE;AACtH,YAAA;gBACE,IAAI,EAAE,6BAA6B,CAAC,yBAAyB;AAC7D,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,IAAI,EAAE,uDAAuD;AAC7D,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,CAAA,CAAA,EAAI,OAAO,CAAA,gBAAA,CAAkB;AACnC,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC,oBAAA,WAAW,EAAE,CAAC,qCAAqC,CAAC,sBAAsB,CAAC;AAC5E,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AACD;;ACxCD;AAEA;AAEA;;;;AAIG;MAEU,+BAA+B,CAAA;IAC1C,MAAM,MAAM,CAAC,OAA+C,EAAA;QAC1D,MAAM,IAAI,GAAG,qCAAqC;QAClD,MAAM,MAAM,GAAG,4BAA4B;QAC3C,MAAM,CAAC,GAAG,2CAA2C;QACrD,MAAM,CAAC,GAAG,2BAA2B;AAErC,QAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA,EAAG,CAAC,CAAA,qBAAA,CAAuB,EAAE,CAAA,EAAG,CAAC,6BAA6B,EAAE;AAC3G,YAAA,KAAK,EAAE,GAAG;AACX,SAAA,CAAC;AACF,QAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAA,EAAG,CAAC,CAAA,4BAAA,CAA8B,EAAE,CAAA,EAAG,CAAC,oCAAoC,EAAE;AAC/H,YAAA,KAAK,EAAE,GAAG;AACX,SAAA,CAAC;QAEF;AACG,aAAA,QAAQ,CACP,MAAM,CAAC,cAAc,CAAC,QAAQ,EAC9B,CAAA,EAAG,CAAC,CAAA,8BAAA,CAAgC,EACpC,CAAA,EAAG,CAAC,CAAA,oCAAA,CAAsC,EAC1C,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AAElD,aAAA,aAAa,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAA,EAAG,CAAC,CAAA,+BAAA,CAAiC,EAAE,CAAA,EAAG,CAAC,CAAA,qCAAA,CAAuC,EAAE;YAC9H,OAAO,EAAE,CAAC,oBAAoB,CAAC;SAChC;AACA,aAAA,aAAa;AACb,aAAA,QAAQ,EAAE;QAEb;AACG,aAAA,QAAQ,CACP,MAAM,CAAC,oBAAoB,CAAC,aAAa,EACzC,CAAA,EAAG,CAAC,CAAA,0CAAA,CAA4C,EAChD,CAAA,EAAG,CAAC,CAAA,gDAAA,CAAkD,EACtD,EAAE,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;AAExD,aAAA,aAAa,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAA,EAAG,CAAC,CAAA,iCAAA,CAAmC,EAAE,CAAA,EAAG,CAAC,CAAA,uCAAA,CAAyC,EAAE;YACpI,OAAO,EAAE,CAAC,oBAAoB,CAAC;YAC/B,gBAAgB,EAAE,CAAC,oBAAoB,CAAC;SACzC;AACA,aAAA,aAAa;AACb,aAAA,QAAQ,EAAE;IACf;8GAxCW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA/B,+BAA+B,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C;;;ACXD;AAEA;AAEA;AACO,MAAM,6CAA6C,GAGtD;AACF,IAAA,GAAG,EAAE,uBAAuB;AAC5B,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,OAAO,EAAE,CAAC,OAAO,KAAI;QACnB,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE;AACpD,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChD,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChD,QAAA,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,EAAE,IAAI;QAEhD,MAAM,QAAQ,GAA8B,EAAE;QAE9C,IAAI,cAAc,CAAC,MAAM,CAAC,gCAAgC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACzE,QAAQ,CAAC,IAAI,CAAC;AACZ,gBAAA,EAAE,EAAE,aAAa;AACjB,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,KAAK,EAAE,8DAA8D;AACrE,gBAAA,WAAW,EAAE,oEAAoE;AACjF,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AACtB,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,IAAI,EAAE,mBAAmB;AACzB,wBAAA,KAAK,EAAE,uEAAuE;AAC9E,wBAAA,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,EAAE,IAAI,EAAE,gCAAgC,CAAC,MAAM,CAAC,MAAM,EAAE;AAClE,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC;QACJ;QAEA,IAAI,OAAO,EAAE;YACX,QAAQ,CAAC,IAAI,CAAC;AACZ,gBAAA,EAAE,EAAE,iBAAiB;AACrB,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,KAAK,EAAE,kEAAkE;AACzE,gBAAA,WAAW,EAAE,wEAAwE;AACrF,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;AACtB,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,IAAI,EAAE,sBAAsB;AAC5B,wBAAA,KAAK,EAAE,2EAA2E;AAClF,wBAAA,IAAI,EAAE,oBAAoB;AAC1B,wBAAA,OAAO,EAAE;AACP,4BAAA,IAAI,EAAE,UAAU;AAChB,4BAAA,OAAO,EAAE,EAAE,IAAI,EAAE,CAAA,CAAA,EAAI,OAAO,gBAAgB,EAAE;AAC/C,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpB,YAAA,OAAO,OAAO;QAChB;QAEA,OAAO;AACL,YAAA,GAAG,OAAO;YACV,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC;SAC7C;IACH,CAAC;CACF;AAED;;ACpFA;AAEA;AACO,MAAM,mCAAmC,GAG5C;AACF,IAAA,GAAG,EAAE,yBAAyB;AAC9B,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,OAAO,EAAE,CAAC,OAAO,KAAI;AACnB,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChD,QAAA,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,EAAE,IAAI;QAEhD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,OAAO;QAChB;QAEA,OAAO;AACL,YAAA,GAAG,OAAO;AACV,YAAA,KAAK,EAAE;gBACL,GAAG,OAAO,CAAC,KAAK;AAChB,gBAAA;AACE,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,KAAK,EAAE,wBAAwB;AAC/B,oBAAA,IAAI,EAAE,kBAAkB;oBACxB,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;AAClE,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,OAAO,EAAE;4BACP,IAAI,EAAE,CAAA,CAAA,EAAI,OAAO,CAAA,cAAA,CAAgB;AAClC,yBAAA;AACF,qBAAA;AAC0B,iBAAA;AAC9B,aAAA;SACF;IACH,CAAC;CACF;AAED;;ACTA;AAEA,MAAM,sCAAsC,GAAG,CAAC;AAChD,MAAM,wCAAwC,GAAG,KAAK;AAEtD;AAEA,SAAS,KAAK,CAAC,EAAU,EAAA;AACvB,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1D;AAEA,eAAe,6BAA6B,CAC1C,eAAmC,EACnC,gBAA4D,EAAA;;AAG5D,IAAA,IAAI,gBAAgB,CAAC,eAAe,EAAE,EAAE;AACtC,QAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;IACtC;AAEA,IAAA,IAAI,SAAkB;AACtB,IAAA,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,sCAAsC,EAAE,OAAO,EAAE,EAAE;AAClF,QAAA,IAAI;AACF,YAAA,MAAM,eAAe,CAAC,4BAA4B,EAAE;YACpD;QACF;QAAE,OAAO,KAAK,EAAE;YACd,SAAS,GAAG,KAAK;YACjB,OAAO,CAAC,KAAK,CACX,CAAA,4CAAA,EAA+C,OAAO,CAAA,CAAA,EAAI,sCAAsC,CAAA,CAAA,CAAG,EACnG,KAAK,CACN;AACD,YAAA,IAAI,gBAAgB,CAAC,eAAe,EAAE,EAAE;AACtC,gBAAA,MAAM,KAAK;YACb;AACA,YAAA,IAAI,OAAO,GAAG,sCAAsC,EAAE;AACpD,gBAAA,MAAM,KAAK,CAAC,wCAAwC,CAAC;YACvD;QACF;IACF;AACA,IAAA,MAAM,SAAS;AACjB;AAEA,SAAS,YAAY,GAAA;AACnB,IAAA,IAAI,MAAM,GAAW;AACnB,QAAA;AACE,YAAA,IAAI,EAAE,sBAAsB;AAC5B,YAAA,WAAW,EAAE,CAAC,GAAG,0BAA0B,EAAE,gCAAgC,CAAC;YAC9E,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACrC,aAAa,EAAE,MAAK;AAClB,gBAAA,OAAO,sBAAsB;YAC/B,CAAC;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA;AACE,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,aAAa,EAAE,MACb,OAAO,yFAAyD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC;oBAC1G,aAAa,EAAE,CAAC,iCAAiC,CAAC;AAClD,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACrB,oBAAA,QAAQ,EAAE;AACR,wBAAA;AACE,4BAAA,IAAI,EAAE,QAAQ;AACd,4BAAA,aAAa,EAAE,MACb,OAAO,yFAAyD,CAAC,CAAC,IAAI,CACpE,CAAC,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAClC;AACH,4BAAA,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;AACvB,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AACD,IAAA,OAAO,MAAM;AACf;MAsDa,2BAA2B,CAAA;AACtC,IAAA,WAAA,CACE,cAAoC,EACpC,eAAmC,EACnC,yBAAuD,EACvD,gBAA4D,EAAA;QAE5D,cAAc,CAAC,YAAY,CAAC;AAC1B,YAAA,IAAI,EAAE,mBAAmB;YACzB,QAAQ,EAAE,wBAAwB,CAAC,gBAAgB;YACnD,GAAG,EAAE,YAAW;AACd,gBAAA,IAAI;AACF,oBAAA,MAAM,6BAA6B,CAAC,eAAe,EAAE,gBAAgB,CAAC;oBACtE,yBAAyB,CAAC,KAAK,EAAE;gBACnC;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC;;;oBAGxE,IAAI,eAAe,GAAG,KAAK;AAC3B,oBAAA,IAAI;AACF,wBAAA,eAAe,GAAG,MAAM,gBAAgB,CAAC,uBAAuB,EAAE;oBACpE;oBAAE,OAAO,YAAY,EAAE;AACrB,wBAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,YAAY,CAAC;oBACpE;oBACA,IAAI,eAAe,EAAE;AACnB,wBAAA,yBAAyB,CAAC,yBAAyB,CAAC,KAAK,CAAC;oBAC5D;yBAAO;AACL,wBAAA,yBAAyB,CAAC,UAAU,CAAC,KAAK,CAAC;oBAC7C;;oBAEA,cAAc,CAAC,0BAA0B,EAAE;gBAC7C;YACF,CAAC;AACF,SAAA,CAAC;QAEF,cAAc,CAAC,YAAY,CAAC;AAC1B,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,UAAU,EAAE,mDAAmD;YAC/D,QAAQ,EAAE,wBAAwB,CAAC,QAAQ;YAC3C,GAAG,EAAE,YAAW;gBACd,IACE,yBAAyB,CAAC,UAAU,EAAE;oBACtC,yBAAyB,CAAC,yBAAyB,EAAE;AACrD,oBAAA,yBAAyB,CAAC,aAAa,EAAE,EACzC;oBACA;gBACF;AACA,gBAAA,kCAAkC,EAAE;AACpC,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;gBAC5B,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC;AAC1D,gBAAA,mCAAmC,CAAC;oBAClC,SAAS,EAAE,QAAQ,CAAC,MAAM;AAC1B,oBAAA,WAAW,EAAE,EAAE;AACf,oBAAA,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;AACnC,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA,CAAC;IACJ;8GAzDW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,0CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAnD5B,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAmDxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,SAAA,EAhD3B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,sBAAsB;AAC/B,gBAAA,QAAQ,EAAE,mBAAmB;AAC9B,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,QAAQ,EAAE,wBAAwB;AAClC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,8BAA8B;AACvC,gBAAA,QAAQ,EAAE,kCAAkC;AAC5C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,YAAY;AACzB,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,eAAe;AACzB,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,QAAQ,EAAE,+BAA+B;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,QAAQ,EAAE,0BAA0B;AACpC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,uCAAuC;AAChD,gBAAA,QAAQ,EAAE,mCAAmC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,uCAAuC;AAChD,gBAAA,QAAQ,EAAE,6CAA6C;AACvD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAjDS,yBAAyB,CAAA,EAAA,CAAA,CAAA;;2FAmDxB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBApDvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,yBAAyB,CAAC;AACpC,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,sBAAsB;AAC/B,4BAAA,QAAQ,EAAE,mBAAmB;AAC9B,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,QAAQ,EAAE,wBAAwB;AAClC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,8BAA8B;AACvC,4BAAA,QAAQ,EAAE,kCAAkC;AAC5C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,UAAU,EAAE,YAAY;AACzB,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,eAAe;AACzB,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,kCAAkC;AAC3C,4BAAA,QAAQ,EAAE,+BAA+B;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,QAAQ,EAAE,0BAA0B;AACpC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,uCAAuC;AAChD,4BAAA,QAAQ,EAAE,mCAAmC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,uCAAuC;AAChD,4BAAA,QAAQ,EAAE,6CAA6C;AACvD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;;AChKD;;AAEG;;;;"}
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/manifest.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","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-settings-management-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Settings Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const SettingsManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'platform',\n domain: 'platform',\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\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';\nimport { inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDistributedEventListenerProvider } from '@acorex-platform/framework-client/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\n\n//#region ---- Types ----\n\ntype ProfileSectionsPayload = {\n sections: Record<string, unknown>[];\n groupId?: string;\n};\n\n//#endregion\n\n//#region ---- Settings management profile sections ----\n\n/** Contributes settings-related sections to the user profile hub. */\nexport const SettingsManagementProfileSectionsHookProvider: AXPDistributedEventListenerProvider<\n ProfileSectionsPayload,\n ProfileSectionsPayload\n> = {\n key: 'profile-page.sections',\n priority: 10,\n execute: (payload) => {\n if (payload.groupId && payload.groupId !== 'account') {\n return payload;\n }\n\n const commandService = inject(AXPCommandService);\n const sessionService = inject(AXPSessionService);\n const appName = sessionService.application?.name;\n\n const sections: Record<string, unknown>[] = [];\n\n if (commandService.exists(AXMSettingsManagementCommandKeys.Client.Export)) {\n sections.push({\n id: 'export-data',\n groupId: 'account',\n title: '@settings-management:profile-page.sections.export-data.title',\n description: '@settings-management:profile-page.sections.export-data.description',\n icon: 'far fa-file-export',\n priority: 30,\n layout: { colSpan: 6 },\n actions: [\n {\n name: 'export-local-data',\n title: '@settings-management:profile-page.sections.export-data.actions.manage',\n icon: 'far fa-download',\n command: { name: AXMSettingsManagementCommandKeys.Client.Export },\n },\n ],\n });\n }\n\n if (appName) {\n sections.push({\n id: 'all-preferences',\n groupId: 'account',\n title: '@settings-management:profile-page.sections.all-preferences.title',\n description: '@settings-management:profile-page.sections.all-preferences.description',\n icon: 'far fa-sliders',\n priority: 40,\n layout: { colSpan: 6 },\n actions: [\n {\n name: 'view-all-preferences',\n title: '@settings-management:profile-page.sections.all-preferences.actions.manage',\n icon: 'far fa-arrow-right',\n command: {\n name: 'navigate',\n options: { path: `/${appName}/settings/user` },\n },\n },\n ],\n });\n }\n\n if (!sections.length) {\n return payload;\n }\n\n return {\n ...payload,\n sections: [...payload.sections, ...sections],\n };\n },\n};\n\n//#endregion\n","import { AXPActionMenuItem } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPDistributedEventListenerProvider } from '@acorex-platform/framework-client/core';\n\n//#region ---- Profile slot settings menu hook ----\n\n/** Registers the user settings entry in the profile dropdown (always available; no permission). */\nexport const ProfileSlotSettingsMenuHookProvider: AXPDistributedEventListenerProvider<\n { items: AXPActionMenuItem[] },\n { items: AXPActionMenuItem[] }\n> = {\n key: 'profile-slot.menu-items',\n priority: 0,\n execute: (payload) => {\n const sessionService = inject(AXPSessionService);\n const appName = sessionService.application?.name;\n\n if (!appName) {\n return payload;\n }\n\n return {\n ...payload,\n items: [\n ...payload.items,\n {\n name: 'settings',\n title: '@auth:profile.settings',\n icon: 'fa-light fa-gear',\n shortcuts: [{ keys: 'ctrl+shift+u', allowInEditableFields: true }],\n command: {\n name: 'navigate',\n options: {\n path: `/${appName}/settings/user`,\n },\n },\n } satisfies AXPActionMenuItem,\n ],\n };\n },\n};\n\n//#endregion\n","import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_MENU_PROVIDER,\n AXP_PROTECTED_ROUTE_GUARDS,\n AXP_SEARCH_DEFINITION_PROVIDER,\n AXP_SEARCH_PROVIDER,\n AXP_SETTINGS_SYNC_KEYS,\n AXPPlatformSettingsLoadState,\n AXPPlatformSettingsOfflineBootstrapService,\n AXPSettingsService,\n traceSettingsAppStartupLoadComplete,\n traceSettingsAppStartupLoadStarted,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPAppStartUpService,\n AXP_APP_STARTUP_PRIORITY,\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n AXP_MODULE_MANIFEST_PROVIDER,\n} from '@acorex-platform/framework-client/core';\nimport { SettingsManagementManifest } from './manifest';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { AXPSettingSearchDefinitionProvider } from './features/settings/search-definition.provider';\nimport { AXPSettingSearchProvider } from './features/settings/search.provider';\nimport { axpSettingsPageCanDeactivateGuard } from './features/settings/settings-page-can-deactivate.guard';\nimport { axpSettingsScopeCanActivateGuard } from './features/settings/settings-scope.guard';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { SettingsManagementProfileSectionsHookProvider } from './features/profile-page/settings-management-profile-sections.hook';\nimport { ProfileSlotSettingsMenuHookProvider } from './profile-slot-settings-menu.hook';\nimport { axmSettingsSyncKeys } from '@acorex-platform/module-settings-management-client/contracts';\nimport { AXCRuntimeRemoteApiModule } from '@acorex-platform/client-connectivity-api';\n\n//#region ----- Constants -----\n\nconst PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS = 5;\nconst PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS = 2_000;\n\n//#endregion\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function loadPlatformSettingsWithRetry(\n settingsService: AXPSettingsService,\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\n): Promise<void> {\n let lastError: unknown;\n for (let attempt = 1; attempt <= PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS; attempt++) {\n try {\n await settingsService.ensurePlatformSettingsLoaded();\n return;\n } catch (error) {\n lastError = error;\n console.error(\n `Platform settings bootstrap failed (attempt ${attempt}/${PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS})`,\n error,\n );\n // `navigator.onLine` is a hint only — always try the API at least once\n // (headless / Playwright often starts with onLine=false while localhost works).\n const skipRemainingRetries =\n attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS && offlineBootstrap.isDeviceOffline();\n if (skipRemainingRetries) {\n throw error;\n }\n if (attempt < PLATFORM_SETTINGS_STARTUP_MAX_ATTEMPTS) {\n await sleep(PLATFORM_SETTINGS_STARTUP_RETRY_DELAY_MS);\n }\n }\n }\n throw lastError;\n}\n\nfunction routesFacory() {\n let routes: Routes = [\n {\n path: ':app/settings/:scope',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS, axpSettingsScopeCanActivateGuard],\n data: { tab: true, rootLayout: true },\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/settings/setting-page/setting-page.component').then((c) => c.AXPSettingPageComponent),\n canDeactivate: [axpSettingsPageCanDeactivateGuard],\n data: { reuse: true },\n children: [\n {\n path: ':group',\n loadComponent: () =>\n import('./features/settings/setting-view/setting-view.component').then(\n (c) => c.AXPSettingsViewComponent,\n ),\n data: { reuse: false },\n },\n ],\n },\n ],\n },\n ];\n return routes;\n}\n\n@NgModule({\n imports: [AXCRuntimeRemoteApiModule],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXP_SETTINGS_SYNC_KEYS,\n useValue: axmSettingsSyncKeys,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXPSettingSearchProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_DEFINITION_PROVIDER,\n useClass: AXPSettingSearchDefinitionProvider,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: SettingsManagementManifest,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: ProfileSlotSettingsMenuHookProvider,\n multi: true,\n },\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: SettingsManagementProfileSectionsHookProvider,\n multi: true,\n },\n ],\n})\nexport class AXMSettingsManagementModule {\n constructor(\n appInitService: AXPAppStartUpService,\n settingsService: AXPSettingsService,\n platformSettingsLoadState: AXPPlatformSettingsLoadState,\n offlineBootstrap: AXPPlatformSettingsOfflineBootstrapService,\n ) {\n appInitService.registerTask({\n name: 'platform-settings',\n priority: AXP_APP_STARTUP_PRIORITY.platformSettings,\n run: async () => {\n try {\n await loadPlatformSettingsWithRetry(settingsService, offlineBootstrap);\n platformSettingsLoadState.clear();\n } catch (error) {\n console.error('Platform settings bootstrap failed after retries', error);\n // Never open dialogs here (APP_INITIALIZER — overlay host is null).\n // Only inspect IndexedDB; confirm runs later after the app is stable.\n let canOfferOffline = false;\n try {\n canOfferOffline = await offlineBootstrap.canOfferOfflineContinue();\n } catch (offlineError) {\n console.error('Offline continue cache check failed', offlineError);\n }\n if (canOfferOffline) {\n platformSettingsLoadState.setPendingOfflineContinue(error);\n } else {\n platformSettingsLoadState.setFailure(error);\n }\n // Keep only platform-settings-failure-redirect; skip Settings/regional/theme (they hang on API).\n appInitService.abortRemainingStartupTasks();\n }\n },\n });\n\n appInitService.registerTask({\n name: 'Settings',\n statusText: '@settings-management:app-startup.loading-settings',\n priority: AXP_APP_STARTUP_PRIORITY.settings,\n run: async () => {\n if (\n platformSettingsLoadState.hasFailure() ||\n platformSettingsLoadState.hasPendingOfflineContinue() ||\n platformSettingsLoadState.isOfflineMode()\n ) {\n return;\n }\n traceSettingsAppStartupLoadStarted();\n const startedAt = Date.now();\n const settings = await settingsService.load('app-startup');\n traceSettingsAppStartupLoadComplete({\n totalKeys: settings.length,\n keysByScope: {},\n durationMs: Date.now() - startedAt,\n });\n },\n });\n }\n}\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": "0.0.28",
3
+ "version": "0.0.32",
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": "0.0.28",
10
+ "@acorex-platform/client-connectivity-api": "0.0.32",
11
11
  "tslib": "^2.3.0"
12
12
  },
13
13
  "module": "fesm2022/acorex-platform-module-settings-management-client.mjs",
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-module-settings-management-client-setting-page.component-eAaMh3-8.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 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":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-module-settings-management-client-setting-view.component-CSJ-1pfO.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 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 <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\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 <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;MAuEa,wBAAwB,CAAA;AA7BrC,IAAA,WAAA,GAAA;;AAgCqB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,6BAA6B,CAAC;QAC3D,IAAA,CAAA,IAAI,GAAG,SAAS,CAAC,eAAe;iFAAC;QACjC,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,2BAA2B;sFAAC;;;;QAOhD,IAAA,CAAA,aAAa,GAAG,MAAM,CAA0B,EAAE;0FAAC;QAE9D,IAAA,CAAA,2BAA2B,GAAG,CAAC;;;AAMvC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,MAAK;AAChC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;YAC3B,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;YAC/B;QACF,CAAC;gGAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC1B,YAAA,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9D,CAAC;0FAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;AAC7B,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE;gBAC7B;YACF;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAClC,MAAM,OAAO,GAAG,SAAS,EAAE,WAAW,EAAE,IAAI,KAAK;YACjD,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,OAAO,EAAE;gBACnC;YACF;AACA,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;6FAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE;AACtC,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf;YACF;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAElC,SAAS,CAAC,YAAW;AACnB,gBAAA,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI;oBACF,IAAI,SAAS,EAAE;wBACb,MAAM,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;AACjD,wBAAA,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAA6B,CAAC;oBACrF;yBAAO;AACL,wBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;oBAC7B;gBACF;wBAAU;AACR,oBAAA,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBACnC;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;6FAAC;AAEF,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,MAAK;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE;AACxC,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf;YACF;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAElC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI;oBACF,IAAI,SAAS,EAAE;wBACb,SAAS,CAAC,eAAe,EAAE;AAC3B,wBAAA,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAA6B,CAAC;oBACrF;gBACF;wBAAU;AACR,oBAAA,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBACnC;AACF,YAAA,CAAC,CAAC;QACJ,CAAC;+FAAC;AAEF,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,MAAK;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;AACjC,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAElC,SAAS,CAAC,MAAK;gBACb,KAAK,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC;AACpD,YAAA,CAAC,CAAC;QACJ,CAAC;iGAAC;AAmKH,IAAA;;;AAhPC,IAAA,mBAAmB;AAOnB,IAAA,aAAa;AAIb,IAAA,gBAAgB;AAahB,IAAA,gBAAgB;AAuBhB,IAAA,kBAAkB;AAoBlB,IAAA,oBAAoB;;;AAgBV,IAAA,oBAAoB,CAAC,CAAwB,EAAA;QACrD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/B;AAEU,IAAA,uBAAuB,CAAC,MAA+B,EAAA;QAC/D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC7E,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE;AACjD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE;AACpF,gBAAA,OAAO,IAAI;YACb;QACF;AAEA,QAAA,OAAO,KAAK;IACd;AAEU,IAAA,gBAAgB,CAAC,MAA+B,EAAA;AACxD,QAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE;YACjE;QACF;QACA,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACrF;;;;AAOU,IAAA,oBAAoB,CAAC,MAAgC,EAAA;QAC7D,OAAO,CAAC,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;IACvD;;;;AAOU,IAAA,mBAAmB,CAAC,OAA6B,EAAA;QACzD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC;AACzD,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE;AACnC,YAAA,OAAO,UAAU;QACnB;QACA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI;IACnD;AAEQ,IAAA,MAAM,oBAAoB,CAChC,OAAgC,EAChC,SAAkD,EAAA;AAElD,QAAA,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,2BAA2B;AACrD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC;QAC3D,MAAM,IAAI,GAA4B,EAAE;AAExC,QAAA,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,OAAO,OAAO,KAAI;YAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,KAAK,CAAC;QACrG,CAAC,CAAC,CACH;AAED,QAAA,IAAI,UAAU,KAAK,IAAI,CAAC,2BAA2B,EAAE;YACnD;QACF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;AACpB,gBAAA,OAAO,EAAE;YACX;YACA,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1F;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE;AAC3B,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC;IAC9D;AAEQ,IAAA,MAAM,oBAAoB,CAChC,UAAmB,EACnB,KAAkC,EAAA;AAElC,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE;AACnC,YAAA,OAAO,UAAU;QACnB;AACA,QAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AACrD,gBAAA,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC5E;AACA,YAAA,OAAO,OAAO,CAAC,UAAU,CAAC;QAC5B;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,oBAAoB,CAC1B,OAAgC,EAChC,SAAkD,EAAA;QAElD,OAAO;AACL,YAAA,OAAO,EAAE;AACP,gBAAA,IAAI,EAAE,CAAC,IAAY,KAAI;oBACrB,IAAI,SAAS,EAAE;wBACb,MAAM,aAAa,GAAG,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC7D,wBAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC/B,4BAAA,OAAO,aAAa;wBACtB;oBACF;oBACA,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC;gBACpD,CAAC;AACD,gBAAA,GAAG,EAAE,CAAC,IAAY,EAAE,KAAc,KAAI;AACpC,oBAAA,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBACnE,CAAC;gBACD,IAAI,EAAE,MAAO,SAAS,EAAE,cAAc,CAAC,IAAI,EAA8B,IAAI,OAAO;gBACpF,OAAO,EAAE,MAAM,SAAS,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,KAAK;AAC3D,gBAAA,OAAO,EAAE,CAAC,IAAa,KAAI;oBACzB,IAAI,CAAC,SAAS,EAAE;AACd,wBAAA,OAAO,SAAS;oBAClB;oBACA,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;wBAC/B,OAAO,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;oBACrD;oBACA,OAAO,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,CAAE,CAAC;gBAC7D,CAAC;AACF,aAAA;AACD,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,EAAE,EAAE;SACT;IACH;;IAGQ,uBAAuB,CAAC,OAAgC,EAAE,GAAW,EAAA;AAC3E,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;AACtD,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC;QACrB;AACA,QAAA,OAAO,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IAC/B;8GArQW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAMD,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACV,2BAA2B,gEC9EpE,qoHAqFU,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxCN,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;AAEX,gBAAA,iBAAiB,sVACjB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,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,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,8BACjB,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACtB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,YAAY,yWACZ,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;AAElB,gBAAA,mBAAmB,6aACnB,4BAA4B,EAAA,QAAA,EAAA,qfAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,6BAA6B,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,6BAA6B,8DAC7B,8BAA8B,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,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;;2FAQrB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA7BpC,SAAS;AAEC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;;wBAEX,iBAAiB;wBACjB,mBAAmB;wBACnB,cAAc;wBACd,aAAa;wBACb,mBAAmB;wBACnB,iBAAiB;wBACjB,sBAAsB;wBACtB,eAAe;wBACf,YAAY;wBACZ,kBAAkB;;wBAElB,mBAAmB;wBACnB,4BAA4B;wBAC5B,6BAA6B;wBAC7B,6BAA6B;wBAC7B,8BAA8B;AAC/B,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,QAAQ;AAChB,qBAAA,EAAA,QAAA,EAAA,qoHAAA,EAAA;AAQiC,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,eAAe,wFACV,2BAA2B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAiQpE,SAAS,sBAAsB,CAAC,OAAgC,EAAE,GAAW,EAAA;AAC3E,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;AAExG,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;IAChC;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;IAC5C;AAEA,IAAA,OAAO,IAAI;AACb;;;;"}