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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-settings-management-client-contracts.mjs","sources":["../../../../libs/modules/settings-management/contracts/src/commands.keys.ts","../../../../libs/modules/settings-management/contracts/src/queries.keys.ts","../../../../libs/modules/settings-management/contracts/src/settings-sync-keys.ts","../../../../libs/modules/settings-management/contracts/src/settings-defaults.provider.ts","../../../../libs/modules/settings-management/contracts/src/settings-encrypted-keys.provider.ts","../../../../libs/modules/settings-management/contracts/src/settings-entity-sync.provider.ts","../../../../libs/modules/settings-management/contracts/src/settings-change-reactor.provider.ts","../../../../libs/modules/settings-management/contracts/src/menu.keys.ts","../../../../libs/modules/settings-management/contracts/src/permission.keys.ts","../../../../libs/modules/settings-management/contracts/src/root-config.ts","../../../../libs/modules/settings-management/contracts/src/index.ts","../../../../libs/modules/settings-management/contracts/src/acorex-platform-module-settings-management-client-contracts.ts"],"sourcesContent":["//#region ---- Command Keys ----\n\nexport const AXMSettingsManagementCommandKeys = {\n Client: {\n Reset: 'SettingsManagement.Client:Reset',\n Export: 'SettingsManagement.Client:Export',\n Import: 'SettingsManagement.Client:Import',\n },\n ScopedSettings: {\n Patch: 'SettingsManagement:ScopedSettings:Patch',\n Set: 'SettingsManagement:ScopedSettings:Set',\n SetOne: 'SettingsManagement:ScopedSettings:SetOne',\n Delete: 'SettingsManagement:ScopedSettings:Delete',\n },\n} as const;\n\n//#endregion\n","//#region ---- Query Keys ----\n\nexport const AXMSettingsManagementQueryKeys = {\n ScopedSettings: {\n Fetch: 'SettingsManagement:ScopedSettings:Fetch',\n Load: 'SettingsManagement:ScopedSettings:Load',\n },\n} as const;\n\n//#endregion\n","import type { AXPSettingsSyncKeys } from '@acorex-platform/framework-shared/core';\n\nimport { AXMSettingsManagementCommandKeys } from './commands.keys';\nimport { AXMSettingsManagementQueryKeys } from './queries.keys';\n\n//#region ---- Settings sync keys provider value ----\n\nexport const axmSettingsSyncKeys: AXPSettingsSyncKeys = {\n scopedFetchQueryKey: AXMSettingsManagementQueryKeys.ScopedSettings.Fetch,\n scopedPatchCommandKey: AXMSettingsManagementCommandKeys.ScopedSettings.Patch,\n};\n\n//#endregion\n","//#region ---- Settings defaults multi-provider ----\n\n/** Platform scope key aligned with server {@link SettingsPlatformScope}. */\nexport type SettingsDefaultsScope = 'P' | 'T' | 'U';\n\n/**\n * Contributes default setting values for a single scope partition.\n * Register with {@link provideSettingsDefaults} (Nest `multi: true`).\n * Higher {@link SettingsDefaultsProvider.priority} wins on key conflicts within the same scope.\n */\nexport interface SettingsDefaultsProvider {\n scope: SettingsDefaultsScope;\n /** Merge order within the same scope; higher overrides lower. Default 0. */\n priority?: number;\n /** Source label for diagnostics (e.g. `framework`, `locale-management`, `demo-api`). */\n layer?: string;\n provide(): Promise<Record<string, unknown>>;\n}\n\nexport const SETTINGS_DEFAULTS_PROVIDER = Symbol('SETTINGS_DEFAULTS_PROVIDER');\n\n/** Suggested priority bands per layer. */\nexport const SETTINGS_DEFAULTS_PRIORITY = {\n framework: 0,\n module: 50,\n app: 100,\n} as const;\n\nexport interface StaticSettingsDefaultsProviderOptions {\n scope: SettingsDefaultsScope;\n values: Record<string, unknown>;\n priority?: number;\n layer?: string;\n}\n\n/** Builds a {@link SettingsDefaultsProvider} from a static key-value map. */\nexport function createStaticSettingsDefaultsProvider(\n options: StaticSettingsDefaultsProviderOptions,\n): SettingsDefaultsProvider {\n return {\n scope: options.scope,\n priority: options.priority,\n layer: options.layer,\n provide: async () => ({ ...options.values }),\n };\n}\n\n/** Nest provider registration helper (`multi: true`). */\nexport function provideSettingsDefaults(provider: SettingsDefaultsProvider) {\n return {\n provide: SETTINGS_DEFAULTS_PROVIDER,\n useValue: provider,\n multi: true,\n } as const;\n}\n\n//#endregion\n","//#region ---- Encrypted setting keys (server at-rest) ----\n\n/**\n * Registers setting keys that must be stored encrypted in the server settings DB.\n * Client definitions use `isEncrypted: true` for the same keys (implies `cacheable: false`).\n */\nexport const SETTINGS_ENCRYPTED_KEYS_PROVIDER = Symbol('SETTINGS_ENCRYPTED_KEYS_PROVIDER');\n\n/** Nest provider registration helper (`multi: true`). */\nexport function provideEncryptedSettingKeys(keys: readonly string[]) {\n return {\n provide: SETTINGS_ENCRYPTED_KEYS_PROVIDER,\n useValue: keys,\n multi: true,\n } as const;\n}\n\n//#endregion\n","//#region ---- Settings entity sync multi-provider ----\n\n/** Platform scope key aligned with server {@link SettingsPlatformScope}. */\nexport type SettingsEntitySyncScope = 'P' | 'T' | 'U';\n\nexport interface SettingsEntitySyncContext {\n scope: SettingsEntitySyncScope;\n tenantId?: string;\n userId?: string;\n}\n\n/**\n * Syncs tenant-scoped settings with canonical entity fields (read overlay + write-through).\n * Register with Nest `multi: true` and `useExisting` on {@link SETTINGS_ENTITY_SYNC_HANDLER}.\n */\nexport interface SettingsEntitySyncHandler {\n scopes: SettingsEntitySyncScope[];\n\n /** Overlay entity-sourced values onto effective settings before returning to clients. */\n overlayRead?(\n context: SettingsEntitySyncContext,\n effectiveValues: Record<string, unknown>,\n ): Promise<Record<string, unknown>>;\n\n /** Called after settings persist; push mapped keys to entity storage. */\n syncWrite?(\n context: SettingsEntitySyncContext,\n changedKeys: string[],\n values: Record<string, unknown>,\n ): Promise<void>;\n}\n\nexport const SETTINGS_ENTITY_SYNC_HANDLER = Symbol('SETTINGS_ENTITY_SYNC_HANDLER');\n\n//#endregion\n","//#region ---- Settings change reactor multi-provider ----\n\n/** Platform scope key aligned with server {@link SettingsPlatformScope}. */\nexport type SettingsChangeReactorScope = 'P' | 'T' | 'U';\n\nexport interface SettingsChangeReactorContext {\n scope: SettingsChangeReactorScope;\n tenantId?: string;\n userId?: string;\n}\n\n/**\n * Runs operational side effects after settings persist (schedules, caches, infrastructure sync).\n * Register with Nest `multi: true` and `useExisting` on {@link SETTINGS_CHANGE_REACTOR}.\n */\nexport interface SettingsChangeReactor {\n scopes: SettingsChangeReactorScope[];\n\n /** Keys this reactor cares about. When omitted, all changed keys trigger {@link react}. */\n watchedKeys?: string[];\n\n react(\n context: SettingsChangeReactorContext,\n changedKeys: string[],\n values: Record<string, unknown>,\n ): Promise<void>;\n}\n\nexport const SETTINGS_CHANGE_REACTOR = Symbol('SETTINGS_CHANGE_REACTOR');\n\n//#endregion\n","export const AXPSettingsManagementMenuKeys = {\n TenantApplicationSettings: 'Settings:Tenant:Application',\n PlatformSettings: 'Settings:Platform',\n} as const;\n\n","/**\n * Applications & Platform capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n *\n * Own user settings (scope U) require no permission — always available to the signed-in user.\n */\nexport const AXPApplicationsPlatformPermissionKeys = {\n Access: 'ApplicationsPlatform:Permission:Access',\n MaintainApplications: 'ApplicationsPlatform:Permission:MaintainApplications',\n MaintainTenants: 'ApplicationsPlatform:Permission:MaintainTenants',\n MaintainPlatformShell: 'ApplicationsPlatform:Permission:MaintainPlatformShell',\n MaintainLandingPages: 'ApplicationsPlatform:Permission:MaintainLandingPages',\n MaintainIdentifiers: 'ApplicationsPlatform:Permission:MaintainIdentifiers',\n MaintainTenantSettings: 'ApplicationsPlatform:Permission:MaintainTenantSettings',\n MaintainPlatformSettings: 'ApplicationsPlatform:Permission:MaintainPlatformSettings',\n MaintainLocales: 'ApplicationsPlatform:Permission:MaintainLocales',\n UseDevTools: 'ApplicationsPlatform:Permission:UseDevTools',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPApplicationsPlatformPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n * User settings are intentionally omitted — no capability key; always allowed for self.\n */\nexport const AXMSettingsManagementPermissionKeys = {\n TenantSettings: {\n Management: AXPApplicationsPlatformPermissionKeys.MaintainTenantSettings,\n },\n PlatformSettings: {\n Management: AXPApplicationsPlatformPermissionKeys.MaintainPlatformSettings,\n },\n} as const;\n","//#region ---- Module Configuration ----\n\nconst config = {\n i18n: 'settings-management',\n module: 'SettingsManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'settings',\n name: config.module,\n title: '@settings-management:module.title',\n icon: 'fa-light fa-gear',\n },\n entities: {},\n};\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './commands.keys';\nexport * from './queries.keys';\nexport * from './settings-sync-keys';\nexport * from './settings-defaults.provider';\nexport * from './settings-encrypted-keys.provider';\nexport * from './settings-entity-sync.provider';\nexport * from './settings-change-reactor.provider';\nexport * from './menu.keys';\nexport * from './permission.keys';\n\nexport * from './root-config';\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-settings-management-client-contracts.mjs","sources":["../../../../libs/modules/settings-management/contracts/src/commands.keys.ts","../../../../libs/modules/settings-management/contracts/src/queries.keys.ts","../../../../libs/modules/settings-management/contracts/src/settings-sync-keys.ts","../../../../libs/modules/settings-management/contracts/src/settings-defaults.provider.ts","../../../../libs/modules/settings-management/contracts/src/settings-encrypted-keys.provider.ts","../../../../libs/modules/settings-management/contracts/src/settings-entity-sync.provider.ts","../../../../libs/modules/settings-management/contracts/src/settings-change-reactor.provider.ts","../../../../libs/modules/settings-management/contracts/src/menu.keys.ts","../../../../libs/modules/settings-management/contracts/src/permission.keys.ts","../../../../libs/modules/settings-management/contracts/src/root-config.ts","../../../../libs/modules/settings-management/contracts/src/index.ts","../../../../libs/modules/settings-management/contracts/src/acorex-platform-module-settings-management-client-contracts.ts"],"sourcesContent":["//#region ---- Command Keys ----\n\nexport const AXMSettingsManagementCommandKeys = {\n Client: {\n Reset: 'SettingsManagement.Client:Reset',\n Export: 'SettingsManagement.Client:Export',\n Import: 'SettingsManagement.Client:Import',\n },\n ScopedSettings: {\n Patch: 'SettingsManagement:ScopedSettings:Patch',\n Set: 'SettingsManagement:ScopedSettings:Set',\n SetOne: 'SettingsManagement:ScopedSettings:SetOne',\n Delete: 'SettingsManagement:ScopedSettings:Delete',\n },\n} as const;\n\n//#endregion\n","//#region ---- Query Keys ----\n\nexport const AXMSettingsManagementQueryKeys = {\n ScopedSettings: {\n Fetch: 'SettingsManagement:ScopedSettings:Fetch',\n Load: 'SettingsManagement:ScopedSettings:Load',\n },\n} as const;\n\n//#endregion\n","import type { AXPSettingsSyncKeys } from '@acorex-platform/framework-shared/core';\n\nimport { AXMSettingsManagementCommandKeys } from './commands.keys';\nimport { AXMSettingsManagementQueryKeys } from './queries.keys';\n\n//#region ---- Settings sync keys provider value ----\n\nexport const axmSettingsSyncKeys: AXPSettingsSyncKeys = {\n scopedFetchQueryKey: AXMSettingsManagementQueryKeys.ScopedSettings.Fetch,\n scopedPatchCommandKey: AXMSettingsManagementCommandKeys.ScopedSettings.Patch,\n};\n\n//#endregion\n","//#region ---- Settings defaults multi-provider ----\n\n/** Platform scope key aligned with server {@link SettingsPlatformScope}. */\nexport type SettingsDefaultsScope = 'P' | 'T' | 'U';\n\n/**\n * Contributes default setting values for a single scope partition.\n * Register with {@link provideSettingsDefaults} (Nest `multi: true`).\n * Higher {@link SettingsDefaultsProvider.priority} wins on key conflicts within the same scope.\n */\nexport interface SettingsDefaultsProvider {\n scope: SettingsDefaultsScope;\n /** Merge order within the same scope; higher overrides lower. Default 0. */\n priority?: number;\n /** Source label for diagnostics (e.g. `framework`, `locale-management`, `demo-api`). */\n layer?: string;\n provide(): Promise<Record<string, unknown>>;\n}\n\nexport const SETTINGS_DEFAULTS_PROVIDER = Symbol('SETTINGS_DEFAULTS_PROVIDER');\n\n/** Suggested priority bands per layer. */\nexport const SETTINGS_DEFAULTS_PRIORITY = {\n framework: 0,\n module: 50,\n app: 100,\n} as const;\n\nexport interface StaticSettingsDefaultsProviderOptions {\n scope: SettingsDefaultsScope;\n values: Record<string, unknown>;\n priority?: number;\n layer?: string;\n}\n\n/** Builds a {@link SettingsDefaultsProvider} from a static key-value map. */\nexport function createStaticSettingsDefaultsProvider(\n options: StaticSettingsDefaultsProviderOptions,\n): SettingsDefaultsProvider {\n return {\n scope: options.scope,\n priority: options.priority,\n layer: options.layer,\n provide: async () => ({ ...options.values }),\n };\n}\n\n/** Nest provider registration helper (`multi: true`). */\nexport function provideSettingsDefaults(provider: SettingsDefaultsProvider) {\n return {\n provide: SETTINGS_DEFAULTS_PROVIDER,\n useValue: provider,\n multi: true,\n } as const;\n}\n\n//#endregion\n","//#region ---- Encrypted setting keys (server at-rest) ----\n\n/**\n * Registers setting keys that must be stored encrypted in the server settings DB.\n * Client definitions use `isEncrypted: true` for the same keys (implies `cacheable: false`).\n */\nexport const SETTINGS_ENCRYPTED_KEYS_PROVIDER = Symbol('SETTINGS_ENCRYPTED_KEYS_PROVIDER');\n\n/** Nest provider registration helper (`multi: true`). */\nexport function provideEncryptedSettingKeys(keys: readonly string[]) {\n return {\n provide: SETTINGS_ENCRYPTED_KEYS_PROVIDER,\n useValue: keys,\n multi: true,\n } as const;\n}\n\n//#endregion\n","//#region ---- Settings entity sync multi-provider ----\n\n/** Platform scope key aligned with server {@link SettingsPlatformScope}. */\nexport type SettingsEntitySyncScope = 'P' | 'T' | 'U';\n\nexport interface SettingsEntitySyncContext {\n scope: SettingsEntitySyncScope;\n tenantId?: string;\n userId?: string;\n}\n\n/**\n * Syncs tenant-scoped settings with canonical entity fields (read overlay + write-through).\n * Register with Nest `multi: true` and `useExisting` on {@link SETTINGS_ENTITY_SYNC_HANDLER}.\n */\nexport interface SettingsEntitySyncHandler {\n scopes: SettingsEntitySyncScope[];\n\n /** Overlay entity-sourced values onto effective settings before returning to clients. */\n overlayRead?(\n context: SettingsEntitySyncContext,\n effectiveValues: Record<string, unknown>,\n ): Promise<Record<string, unknown>>;\n\n /** Called after settings persist; push mapped keys to entity storage. */\n syncWrite?(\n context: SettingsEntitySyncContext,\n changedKeys: string[],\n values: Record<string, unknown>,\n ): Promise<void>;\n}\n\nexport const SETTINGS_ENTITY_SYNC_HANDLER = Symbol('SETTINGS_ENTITY_SYNC_HANDLER');\n\n//#endregion\n","//#region ---- Settings change reactor multi-provider ----\n\n/** Platform scope key aligned with server {@link SettingsPlatformScope}. */\nexport type SettingsChangeReactorScope = 'P' | 'T' | 'U';\n\nexport interface SettingsChangeReactorContext {\n scope: SettingsChangeReactorScope;\n tenantId?: string;\n userId?: string;\n}\n\n/**\n * Runs operational side effects after settings persist (schedules, caches, infrastructure sync).\n * Register with Nest `multi: true` and `useExisting` on {@link SETTINGS_CHANGE_REACTOR}.\n */\nexport interface SettingsChangeReactor {\n scopes: SettingsChangeReactorScope[];\n\n /** Keys this reactor cares about. When omitted, all changed keys trigger {@link react}. */\n watchedKeys?: string[];\n\n react(\n context: SettingsChangeReactorContext,\n changedKeys: string[],\n values: Record<string, unknown>,\n ): Promise<void>;\n}\n\nexport const SETTINGS_CHANGE_REACTOR = Symbol('SETTINGS_CHANGE_REACTOR');\n\n//#endregion\n","export const AXPSettingsManagementMenuKeys = {\n TenantApplicationSettings: 'Settings:Tenant:Application',\n PlatformSettings: 'Settings:Platform',\n} as const;\n\n","/**\n * Applications & Platform capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n *\n * Own user settings (scope U) require no permission — always available to the signed-in user.\n */\nexport const AXPApplicationsPlatformPermissionKeys = {\n Access: 'ApplicationsPlatform:Permission:Access',\n MaintainApplications: 'ApplicationsPlatform:Permission:MaintainApplications',\n MaintainTenants: 'ApplicationsPlatform:Permission:MaintainTenants',\n MaintainPlatformShell: 'ApplicationsPlatform:Permission:MaintainPlatformShell',\n MaintainLandingPages: 'ApplicationsPlatform:Permission:MaintainLandingPages',\n MaintainIdentifiers: 'ApplicationsPlatform:Permission:MaintainIdentifiers',\n MaintainTenantSettings: 'ApplicationsPlatform:Permission:MaintainTenantSettings',\n MaintainPlatformSettings: 'ApplicationsPlatform:Permission:MaintainPlatformSettings',\n MaintainLocales: 'ApplicationsPlatform:Permission:MaintainLocales',\n UseDevTools: 'ApplicationsPlatform:Permission:UseDevTools',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPApplicationsPlatformPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n * User settings are intentionally omitted — no capability key; always allowed for self.\n */\nexport const AXMSettingsManagementPermissionKeys = {\n TenantSettings: {\n Management: AXPApplicationsPlatformPermissionKeys.MaintainTenantSettings,\n },\n PlatformSettings: {\n Management: AXPApplicationsPlatformPermissionKeys.MaintainPlatformSettings,\n },\n} as const;\n","//#region ---- Module Configuration ----\n\nconst config = {\n i18n: 'settings-management',\n module: 'SettingsManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'settings',\n name: config.module,\n title: '@settings-management:module.title',\n icon: 'fa-light fa-gear',\n },\n entities: {},\n};\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './commands.keys';\nexport * from './queries.keys';\nexport * from './settings-sync-keys';\nexport * from './settings-defaults.provider';\nexport * from './settings-encrypted-keys.provider';\nexport * from './settings-entity-sync.provider';\nexport * from './settings-change-reactor.provider';\nexport * from './menu.keys';\nexport * from './permission.keys';\n\nexport * from './root-config';\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -408,7 +408,7 @@ class AXPSettingPageComponent extends AXPPageLayoutBaseComponent {
408
408
  },
409
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:
410
410
  //
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:
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", "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", "reorderable", "reorderDelay", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged", "onTabsReordered"] }, { 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:
412
412
  //
413
413
  AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutListComponent, selector: "axp-layout-list" }, { kind: "component", type: AXPThemeLayoutListItemComponent, selector: "axp-layout-list-item" }, { kind: "component", type: AXPThemeLayoutToolbarComponent, selector: "axp-layout-toolbar" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
414
414
  }
@@ -447,4 +447,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
447
447
  }], propDecorators: { sidebarTabs: [{ type: i0.ViewChild, args: ['sidebarTabs', { isSignal: true }] }] } });
448
448
 
449
449
  export { AXPSettingPageComponent };
450
- //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-page.component-DSbwsvRl.mjs.map
450
+ //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-page.component-RewUCIAh.mjs.map
@@ -1 +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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"}
1
+ {"version":3,"file":"acorex-platform-module-settings-management-client-setting-page.component-RewUCIAh.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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"}
@@ -262,7 +262,7 @@ class AXPSettingsViewComponent {
262
262
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPSettingsViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
263
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:
264
264
  //
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:
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", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i5$1.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i5$1.AXFormComponent, selector: "ax-form", inputs: ["disabled", "readonly", "labelMode", "look", "messageStyle", "updateOn", "inUserInteractionActive"], outputs: ["onValidate", "updateOnChange"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type:
266
266
  //
267
267
  AXPWidgetCoreModule }, { kind: "component", type: i6$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i6$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutFooterComponent, selector: "axp-layout-footer, axp-layout-page-footer" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutSectionComponent, selector: "axp-layout-section" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
268
268
  }
@@ -307,4 +307,4 @@ function hasSettingContextValue(context, key) {
307
307
  }
308
308
 
309
309
  export { AXPSettingsViewComponent };
310
- //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-view.component-BVXPAqwc.mjs.map
310
+ //# sourceMappingURL=acorex-platform-module-settings-management-client-setting-view.component-BrUkHvXK.mjs.map
@@ -1 +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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"}
1
+ {"version":3,"file":"acorex-platform-module-settings-management-client-setting-view.component-BrUkHvXK.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-view/setting-view.component.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/setting-view/setting-view.component.html"],"sourcesContent":["import { AXPContextChangeEvent, getSmart } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXValidationModule } from '@acorex/core/validation';\n\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPExpressionEvaluatorScope } from '@acorex-platform/framework-shared/core';\nimport {\n AXPSettingDefinition,\n AXPSettingDefinitionGroup,\n AXPSettingLayoutOptions,\n AXPSettingSectionAction,\n} from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPWidgetCoreModule, AXPWidgetContainerComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutSectionComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPSettingsViewModel } from '../settings.viewmodel';\n\n@Component({\n templateUrl: 'setting-view.component.html',\n imports: [\n CommonModule,\n FormsModule,\n //\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXButtonModule,\n AXBadgeModule,\n AXTranslationModule,\n AXSearchBoxModule,\n AXDropdownButtonModule,\n AXLoadingModule,\n AXFormModule,\n AXValidationModule,\n //\n AXPWidgetCoreModule,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutSectionComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'w-full',\n },\n})\nexport class AXPSettingsViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXPSettingsViewModel);\n private readonly commandService = inject(AXPCommandService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly form = viewChild(AXFormComponent);\n private readonly container = viewChild(AXPWidgetContainerComponent);\n\n //#endregion\n\n //#region ---- State ----\n\n /** Cached row visibility keyed by setting name (from `widget.options.visibility`). */\n protected readonly rowVisibility = signal<Record<string, boolean>>({});\n\n private visibilityRefreshGeneration = 0;\n\n //#endregion\n\n //#region ---- Lifecycle Effects ----\n\n #registerFormEffect = effect(() => {\n const formRef = this.form();\n if (formRef) {\n this.vm.registerForm(formRef);\n }\n });\n\n #statusEffect = effect(() => {\n this.container()?.builderService.setStatus(this.vm.status());\n });\n\n #formDirtyEffect = effect(() => {\n if (this.vm.syncingBaseline()) {\n return;\n }\n\n const container = this.container();\n const isDirty = container?.isFormDirty() ?? false;\n if (this.vm.formDirty() === isDirty) {\n return;\n }\n untracked(() => this.vm.setFormDirty(isDirty));\n });\n\n #applySyncEffect = effect(() => {\n const nonce = this.vm.applySyncNonce();\n if (nonce === 0) {\n return;\n }\n\n const container = this.container();\n\n untracked(async () => {\n this.vm.setSyncingBaseline(true);\n try {\n if (container) {\n await container.replaceContext(this.vm.context());\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n } else {\n this.vm.setFormDirty(false);\n }\n } finally {\n this.vm.setSyncingBaseline(false);\n }\n });\n });\n\n #discardSyncEffect = effect(() => {\n const nonce = this.vm.discardSyncNonce();\n if (nonce === 0) {\n return;\n }\n\n const container = this.container();\n\n untracked(() => {\n try {\n if (container) {\n container.revertAndSettle();\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n }\n } finally {\n this.vm.setSyncingBaseline(false);\n }\n });\n });\n\n #rowVisibilityEffect = effect(() => {\n const context = this.vm.context();\n this.vm.activateGroup();\n this.vm.searchResults();\n this.vm.isSearching();\n const container = this.container();\n\n untracked(() => {\n void this.refreshRowVisibility(context, container);\n });\n });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected handleContextChanged(e: AXPContextChangeEvent): void {\n this.vm.updateContext(e.data);\n }\n\n protected isSectionActionDisabled(action: AXPSettingSectionAction): boolean {\n if (!action.command?.name || !this.commandService.exists(action.command.name)) {\n return true;\n }\n\n if (action.disabledWhenDirty && this.vm.isDirty()) {\n return true;\n }\n\n if (action.requiredSettingKeys?.length) {\n const context = this.vm.context();\n if (!action.requiredSettingKeys.every((key) => hasSettingContextValue(context, key))) {\n return true;\n }\n }\n\n return false;\n }\n\n protected runSectionAction(action: AXPSettingSectionAction): void {\n if (this.isSectionActionDisabled(action) || !action.command?.name) {\n return;\n }\n void this.commandService.execute(action.command.name, action.command.options ?? {});\n }\n\n //#endregion\n\n //#region ---- Layout Helpers ----\n\n /** Side-by-side settings row with wider control column (`layout.positions` without `stacked`). */\n protected hasWideControlLayout(layout?: AXPSettingLayoutOptions): boolean {\n return !!layout?.positions && layout.stacked !== true;\n }\n\n //#endregion\n\n //#region ---- Row Visibility ----\n\n /** Whether a section has at least one visible setting row. */\n protected isSectionVisible(section: { settings: AXPSettingDefinition[] }): boolean {\n return section.settings.some((setting) => this.isSettingRowVisible(setting));\n }\n\n /** Whether a setting row should be rendered (supports `widget.options.visibility` expressions). */\n protected isSettingRowVisible(setting: AXPSettingDefinition): boolean {\n const visibility = setting.widget.options?.['visibility'];\n if (visibility == null) {\n return true;\n }\n if (typeof visibility === 'boolean') {\n return visibility;\n }\n return this.rowVisibility()[setting.name] ?? true;\n }\n\n private async refreshRowVisibility(\n context: Record<string, unknown>,\n container: AXPWidgetContainerComponent | undefined,\n ): Promise<void> {\n const generation = ++this.visibilityRefreshGeneration;\n const settings = this.collectVisibleSettings();\n const scope = this.buildExpressionScope(context, container);\n const next: Record<string, boolean> = {};\n\n await Promise.all(\n settings.map(async (setting) => {\n next[setting.name] = await this.resolveRowVisibility(setting.widget.options?.['visibility'], scope);\n }),\n );\n\n if (generation !== this.visibilityRefreshGeneration) {\n return;\n }\n\n this.rowVisibility.set(next);\n }\n\n private collectVisibleSettings(): AXPSettingDefinition[] {\n if (this.vm.isSearching()) {\n const results = this.vm.searchResults();\n if (!results?.length) {\n return [];\n }\n return results.flatMap((group) => group.sections.flatMap((section) => section.settings));\n }\n\n const group = this.vm.activateGroup();\n if (!group?.sections.length) {\n return [];\n }\n\n return group.sections.flatMap((section) => section.settings);\n }\n\n private async resolveRowVisibility(\n visibility: unknown,\n scope: AXPExpressionEvaluatorScope,\n ): Promise<boolean> {\n if (visibility == null) {\n return true;\n }\n if (typeof visibility === 'boolean') {\n return visibility;\n }\n if (typeof visibility === 'string') {\n if (this.expressionEvaluator.isExpression(visibility)) {\n return Boolean(await this.expressionEvaluator.evaluate(visibility, scope));\n }\n return Boolean(visibility);\n }\n return true;\n }\n\n private buildExpressionScope(\n context: Record<string, unknown>,\n container: AXPWidgetContainerComponent | undefined,\n ): AXPExpressionEvaluatorScope {\n return {\n context: {\n eval: (path: string) => {\n if (container) {\n const fromContainer = container.contextService.getValue(path);\n if (fromContainer !== undefined) {\n return fromContainer;\n }\n }\n return this.readSettingContextValue(context, path);\n },\n set: (path: string, value: unknown) => {\n container?.contextService.update(path, value, { origin: 'user' });\n },\n data: () => (container?.contextService.data() as Record<string, unknown>) ?? context,\n isDirty: () => container?.contextService.isDirty() ?? false,\n options: (path?: string) => {\n if (!container) {\n return undefined;\n }\n if (path == null || path === '') {\n return container.contextService.getValue('options');\n }\n return container.contextService.getValue(`options.${path}`);\n },\n },\n events: {},\n widget: {},\n methods: {},\n vars: {},\n };\n }\n\n /** Flat persisted setting keys may contain dots (e.g. `Common:Setting:Navigation.Mode`). */\n private readSettingContextValue(context: Record<string, unknown>, key: string): unknown {\n if (Object.prototype.hasOwnProperty.call(context, key)) {\n return context[key];\n }\n return getSmart(context, key);\n }\n}\n\nfunction hasSettingContextValue(context: Record<string, unknown>, key: string): boolean {\n const value = Object.prototype.hasOwnProperty.call(context, key) ? context[key] : getSmart(context, key);\n\n if (value == null) {\n return false;\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) && value > 0;\n }\n\n return true;\n}\n","<ax-form>\n <axp-widgets-container [context]=\"vm.context()\" (onContextChanged)=\"handleContextChanged($event)\" *translate=\"let t\">\n @if (vm.isSearching() && vm.searchResults()!.length > 0) {\n <!-- Search Result -->\n @for (group of vm.searchResults(); track group.name; let first = $first) {\n <p class=\"text-lg md:text-xl font-semibold py-3 text-neutral-500\" [class.pt-0]=\"first\">\n {{ group.title | translate | async }}\n </p>\n <axp-layout-sections>\n @for (section of group.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n }\n <!-- Not Found -->\n @else if (vm.isSearching() && vm.searchResults()!.length === 0) {\n <div class=\"p-2\">\n <div class=\"mt-3 flex flex-col justify-center h-[calc(100vh-236px)] items-center p-10 gap-10\">\n <p class=\"text-xl md:text-2xl font-bold\">\n {{ '@settings-management:settings.components.search.empty-states.not-found.title' | translate | async }}\n </p>\n </div>\n </div>\n }\n <!-- Group -->\n @else if (vm.activateGroup()?.sections) {\n <axp-layout-sections>\n @for (section of vm.activateGroup()?.sections; track section.name) {\n @if (isSectionVisible(section)) {\n <ng-container [ngTemplateOutlet]=\"sectionTpl\" [ngTemplateOutletContext]=\"{ section }\"></ng-container>\n }\n }\n </axp-layout-sections>\n }\n <ng-template #sectionTpl let-section=\"section\">\n <axp-layout-section>\n <axp-layout-header>\n <axp-layout-title>\n {{ section.title | translate | async }}\n </axp-layout-title>\n @if (section.description) {\n <axp-layout-description>\n {{ section.description | translate | async }}\n </axp-layout-description>\n }\n </axp-layout-header>\n <axp-layout-content>\n <!-- Settings Item -->\n @for (j of section.settings; track j.name) {\n @if (isSettingRowVisible(j)) {\n <div class=\"--item-container\" [class.--wide-control]=\"hasWideControlLayout(j.layout)\"\n [class.--stacked-control]=\"j.layout?.stacked === true\">\n <div class=\"--item-label\">\n @if (j.title) {\n <axp-layout-title>{{ j.title | translate | async }}</axp-layout-title>\n }\n @if (j.description) {\n <axp-layout-description>{{ j.description | translate | async }}</axp-layout-description>\n }\n </div>\n <ax-form-field class=\"--item-control\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\">\n </ng-container>\n </ax-form-field>\n </div>\n }\n }\n </axp-layout-content>\n @if (section.actions?.length) {\n <axp-layout-footer class=\"--section-footer\">\n <axp-layout-suffix>\n @for (action of section.actions; track action.command.name) {\n <ax-button [class.ax-sm]=\"true\" [text]=\"action.title | translate | async\"\n [color]=\"action.color ?? 'primary'\" [look]=\"action.look ?? 'outline'\"\n [disabled]=\"isSectionActionDisabled(action)\" (onClick)=\"runSectionAction(action)\">\n @if (action.icon) {\n <ax-prefix><ax-icon><i [class]=\"action.icon\"></i></ax-icon></ax-prefix>\n }\n </ax-button>\n }\n </axp-layout-suffix>\n </axp-layout-footer>\n }\n </axp-layout-section>\n </ng-template>\n </axp-widgets-container>\n</ax-form>"],"names":["i3","i4"],"mappings":"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"}
@@ -876,13 +876,13 @@ function routesFacory() {
876
876
  children: [
877
877
  {
878
878
  path: '',
879
- loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-page.component-DSbwsvRl.mjs').then((c) => c.AXPSettingPageComponent),
879
+ loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-page.component-RewUCIAh.mjs').then((c) => c.AXPSettingPageComponent),
880
880
  canDeactivate: [axpSettingsPageCanDeactivateGuard],
881
881
  data: { reuse: true },
882
882
  children: [
883
883
  {
884
884
  path: ':group',
885
- loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-view.component-BVXPAqwc.mjs').then((c) => c.AXPSettingsViewComponent),
885
+ loadComponent: () => import('./acorex-platform-module-settings-management-client-setting-view.component-BrUkHvXK.mjs').then((c) => c.AXPSettingsViewComponent),
886
886
  data: { reuse: false },
887
887
  },
888
888
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-settings-management-client.mjs","sources":["../../../../libs/modules/settings-management/client/src/lib/features/settings/settings-row-visibility.util.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/convert-setting-data.ts","../../../../libs/modules/settings-management/client/src/lib/features/settings/settings.viewmodel.ts","../../../../libs/modules/settings-management/client/src/lib/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":";;;;;;;;;;;;;;;;;;;;;;AAMA;AACM,SAAU,yBAAyB,CAAC,OAA6B,EAAA;IACrE,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,KAAK;AACzD;AAEM,SAAU,iCAAiC,CAAC,QAAgC,EAAA;AAChF,IAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAC1E;AAEM,SAAU,iCAAiC,CAAC,OAAoC,EAAA;IACpF,OAAO,iCAAiC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;AACvE;AAEA;AACM,SAAU,+BAA+B,CAAC,MAAmC,EAAA;AACjF,IAAA,OAAO;AACJ,SAAA,GAAG,CAAC,CAAC,KAAK,MAAM;AACf,QAAA,GAAG,KAAK;QACR,QAAQ,EAAE,KAAK,CAAC;AACb,aAAA,GAAG,CAAC,CAAC,OAAO,MAAM;AACjB,YAAA,GAAG,OAAO;AACV,YAAA,QAAQ,EAAE,iCAAiC,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC9D,SAAA,CAAC;AACD,aAAA,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,QAAA,MAAM,EAAE,+BAA+B,CAAC,KAAK,CAAC,MAAM,CAAC;AACtD,KAAA,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5E;;AC3BA;;;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;IAED,MAAM,cAAc,GAAG,CAAC,OAAoC,KAC1D,iCAAiC,CAAC,OAAO,CAAC;SACzC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAE3D,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;AAClG,QAAA,MAAM,eAAe,GAAG,iCAAiC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC7F,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;;ACxEA;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;AACF,YAAA,MAAM,MAAM,GAAG,+BAA+B,CAAC,MAAM,wBAAwB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAClG,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,+BAA+B,CAAC,MAAM,wBAAwB,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1G,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,IAAI,yBAAyB,CAAC,OAAO,CAAC,EAAE;wBACtC;oBACF;AACA,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;;ACvbH;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;;MCCY,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;IA0EzD;IAxEE,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,CAAC,yBAAyB,CAAC,OAAO,CAAC;aAClC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CACvF;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;;AC5FD;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;AAE5D,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;;;YAGD,MAAM,oBAAoB,GACxB,OAAO,GAAG,sCAAsC,IAAI,gBAAgB,CAAC,eAAe,EAAE;YACxF,IAAI,oBAAoB,EAAE;AACxB,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;;;AC/JD;;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.32",
3
+ "version": "0.0.37",
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.32",
10
+ "@acorex-platform/client-connectivity-api": "0.0.37",
11
11
  "tslib": "^2.3.0"
12
12
  },
13
13
  "module": "fesm2022/acorex-platform-module-settings-management-client.mjs",