@acorex/platform 21.0.0-next.90 → 21.0.0-next.92

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.
Files changed (52) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +1 -2
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-common-common-settings.provider-DilV4dql.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-common.mjs +3 -10
  5. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-contracts.mjs +1736 -27
  7. package/fesm2022/acorex-platform-contracts.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-core.mjs +6 -1708
  9. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-domain-contracts.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-components.mjs +2 -2
  13. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-CwG6n_Yb.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-layout-entity-contracts.mjs +27 -1
  17. package/fesm2022/acorex-platform-layout-entity-contracts.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component--IeMZLIr.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity.mjs +263 -115
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +4 -2
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +87 -11
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -1
  26. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-CFyfix31.mjs.map +1 -1
  27. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-BvFykMTH.mjs.map +1 -1
  28. package/fesm2022/acorex-platform-layout-widgets.mjs +2 -4
  29. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  30. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  31. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CWLfNqV0.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs.map +1 -1
  33. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DrUwqKKA.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  35. package/fesm2022/{acorex-platform-themes-shared-settings.provider-UyKdkeyk.mjs → acorex-platform-themes-shared-settings.provider-DxtfyNGS.mjs} +2 -2
  36. package/fesm2022/acorex-platform-themes-shared-settings.provider-DxtfyNGS.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-themes-shared.mjs +2 -2
  38. package/fesm2022/acorex-platform-workflow.mjs +2 -2
  39. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  40. package/package.json +1 -1
  41. package/types/acorex-platform-common.d.ts +3 -5
  42. package/types/acorex-platform-contracts.d.ts +862 -7
  43. package/types/acorex-platform-core.d.ts +64 -921
  44. package/types/acorex-platform-layout-builder.d.ts +3 -3
  45. package/types/acorex-platform-layout-components.d.ts +6 -6
  46. package/types/acorex-platform-layout-designer.d.ts +4 -5
  47. package/types/acorex-platform-layout-entity-contracts.d.ts +90 -3
  48. package/types/acorex-platform-layout-entity.d.ts +45 -102
  49. package/types/acorex-platform-layout-views.d.ts +13 -11
  50. package/types/acorex-platform-layout-widget-core.d.ts +83 -77
  51. package/types/acorex-platform-layout-widgets.d.ts +9 -8
  52. package/fesm2022/acorex-platform-themes-shared-settings.provider-UyKdkeyk.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-layout-views.mjs","sources":["../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/page/page-unsaved-changes.util.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.adapter-loader.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view-trace.constants.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.viewmodel.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view-action-shortcuts.util.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/page-component-instance-registry.service.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/page-component-renderer.directive.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.component.html","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view-can-deactivate.guard.ts","../../../../libs/platform/layout/views/src/acorex-platform-layout-views.ts"],"sourcesContent":["import { AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, AXPPageStatus } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPageLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n\n abstract hasTitleActions: Signal<boolean>;\n\n abstract hasPrimaryActions: Signal<boolean>;\n\n abstract hasSecondaryActions: Signal<boolean>;\n\n abstract hasActions: Signal<boolean>;\n\n abstract breadcrumbs: Signal<AXPBreadcrumbItem[]>;\n\n abstract title: Signal<AXPMultiLanguageString>;\n\n abstract titleIcon: Signal<string | null>;\n\n abstract hasTitle: Signal<boolean>;\n\n abstract hasTitleIcon: Signal<boolean>;\n\n abstract hasDescription: Signal<boolean>;\n\n abstract description: Signal<AXPMultiLanguageString | null>;\n\n abstract hasBreadcrumbs: Signal<boolean>;\n\n abstract hasBadge: Signal<boolean>;\n\n abstract badge: Signal<AXPBadge | null>;\n\n abstract hasStatus: Signal<boolean>;\n\n abstract status: Signal<AXPPageStatus | null>;\n\n abstract hasBackButton: Signal<boolean>;\n\n abstract backButton: Signal<AXPBackButton | null>;\n\n abstract onBackButtonClick: () => void | Promise<void>;\n\n abstract startSideToggle: () => void | Promise<void>;\n\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n\n /** Whether the page has user-origin edits that are not yet persisted. */\n abstract hasUnsavedChanges(): boolean;\n\n /** Resolves the page title badge (used by host layouts for nested entity pages). */\n abstract resolvePageBadge(): AXPBadge | null | Promise<AXPBadge | null>;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXClickEvent, AXCommonModule } from '@acorex/cdk/common';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXPStickyDirective, AXPUnsavedChangesCanDeactivate, AXPTabNavigationService } from '@acorex/platform/common';\nimport { AXPComponentSlotModule } from '@acorex/platform/core';\n//\nimport { AXDrawerContainerDirective, AXDrawerDirectiveModule, AXDrawerItemDirective } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem, AXPDeviceService } from '@acorex/platform/core';\nimport {\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n AXPThemeLayoutHeaderComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPStatusChipComponent } from '@acorex/platform/layout/widgets';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPageLayoutBase } from './page-layout.base';\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPComponentSlotModule,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutHeaderComponent,\n AXPStickyDirective,\n AXPThemeLayoutContainerComponent,\n AXPStatusChipComponent,\n ],\n templateUrl: './page-layout.component.html',\n styleUrls: ['./page-layout.component.scss'],\n selector: 'axp-page-layout',\n encapsulation: ViewEncapsulation.None,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [AXDrawerContainerDirective],\n providers: [],\n})\nexport class AXPPageLayoutComponent {\n protected page = inject<AXPPageLayoutBase>(AXPPageLayoutBase, { optional: true });\n\n protected layoutService = inject(AXPLayoutThemeService);\n protected deviceService = inject(AXPDeviceService);\n protected tabNavigation = inject(AXPTabNavigationService);\n\n protected startSideDrawer = viewChild<AXDrawerItemDirective>('startSideDrawer');\n\n protected workflow = inject(AXPWorkflowService);\n protected commandService = inject(AXPCommandService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.page?.title();\n this.page?.description();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-page-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.execute(item.command);\n }\n }\n\n toggleStartSide() {\n this.startSideDrawer()?.toggle();\n }\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n\n protected async execute(command: AXPExecuteCommand) {\n const reserved = ['navigate'];\n if (reserved.includes(command.name)) {\n if (!(await this.canLeaveCurrentPage())) {\n return;\n }\n await this.workflow.execute(command.name, { options: command.options });\n return;\n }\n if (this.commandService.exists(command.name)) {\n await this.commandService.execute(command.name, command.options ?? {});\n } else {\n await this.page?.execute(command);\n }\n }\n\n protected handleOnBackdropClick(event: MouseEvent) {\n event.stopPropagation();\n this.startSideDrawer()?.hide();\n }\n\n /**\n * Breadcrumbs and other in-page `navigate` commands bypass `routerLink`, so prompt here\n * when the hosted page implements {@link AXPUnsavedChangesCanDeactivate}.\n * A successful confirm sets `leaveConfirmed` for the router guard on the subsequent navigation.\n */\n private async canLeaveCurrentPage(): Promise<boolean> {\n const page = this.page as (AXPPageLayoutBase & Partial<AXPUnsavedChangesCanDeactivate>) | null;\n if (!page || typeof page.canDeactivate !== 'function') {\n return true;\n }\n\n return page.canDeactivate();\n }\n\n //#region ---------------- Status Helpers ----------------\n\n protected getEntityData(): Record<string, any> | null {\n // Get entity data from page context if available\n if (this.page && 'getEntityData' in this.page && typeof (this.page as any).getEntityData === 'function') {\n return (this.page as any).getEntityData();\n }\n return null;\n }\n\n protected async handleStatusTransition(transition: any): Promise<void> {\n // Convert status transition to command and execute\n await this.execute({\n name: 'update-status',\n options: {\n transition,\n },\n });\n }\n\n //#endregion\n}\n","<!-------- Begin Start Side Drawer -------->\n<div id=\"axp-drawer-start\" [mode]=\"deviceService.isSmall() ? 'overlay' : 'push'\" [transition]=\"250\" axDrawerItem\n [backDrop]=\"true\" (onBackdropClick)=\"handleBackdropClick($event)\" #startSideDrawer=\"axDrawerItem\"\n [backdropClass]=\"'ax-bg-darkest/75'\" [collapsed]=\"deviceService.isSmall()\" drawerLocation=\"start\" class=\"ax-h-full\">\n <ng-content select=\"axp-layout-start-side\"></ng-content>\n</div>\n<!-------- Finish Start Side Drawer -------->\n<!--------------------------------------------------------------->\n<!-------- Begin Main Layout Container -------->\n<axp-layout-container id=\"axp-page-layout\" #container>\n <!-------- Begin Page Header -------->\n <axp-layout-header id=\"axp-page-header\" *translate=\"let t\" #sticky=\"axpSticky\" [axpSticky]=\"'axp-is-sticky'\"\n [stickyOffset]=\"50\" [stickyParent]=\"container.hostElement\">\n <!-------- Begin Back Button (Mobile Only) -------->\n @if (page?.hasBackButton() && deviceService.isSmall()) {\n <ax-button id=\"axp-btn-back\" [look]=\"'blank'\" class=\"ax-sm ax-w-fit ax-ms-1\" color=\"secondary\"\n (click)=\"page?.onBackButtonClick()\" [text]=\"(page?.backButton()?.title | translate | async) ?? ''\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-chevron-left rtl:ax-rotate-180\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n <!-------- Finish Back Button -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Bar -------->\n <axp-layout-title-bar id=\"axp-title-bar\">\n <!-------- Begin Title Section -------->\n <div class=\"ax-flex ax-flex-col ax-transition ax-shrink-1 ax-min-w-0\">\n <!-------- Begin Breadcrumbs -------->\n @if (page?.hasBreadcrumbs() && !deviceService.isSmall()) {\n <ax-breadcrumbs id=\"axp-breadcrumb\" class=\"ax-mb-1\">\n @for (item of page?.breadcrumbs(); track $index) {\n <ax-breadcrumbs-item [attr.id]=\"'axp-breadcrumb-item-' + $index\" [active]=\"$last\"\n (click)=\"!$last && item.command ? execute(item.command) : null\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n {{ t(item.title) | async }}\n </ax-breadcrumbs-item>\n }\n <ng-template #divider>\n <i class=\"fa-regular fa-chevron-right rtl:ax-rotate-180 fa-sm\"></i>\n </ng-template>\n </ax-breadcrumbs>\n }\n <!-------- Finish Breadcrumbs -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Container -------->\n <div class=\"__title-container\">\n <!-------- Begin Page Title -------->\n @if (page?.hasTitle()) {\n <axp-layout-title id=\"axp-page-title\">\n @if (page?.hasTitleIcon()) {\n <ax-icon [icon]=\"page?.titleIcon()!\" class=\"ax-me-2\"></ax-icon>\n }\n {{ page?.title() | translate | async }}\n </axp-layout-title>\n }\n <!-------- Finish Page Title -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Actions -------->\n @if (page?.hasTitleActions()) {\n <ax-button id=\"axp-btn-title-actions\" [look]=\"'blank'\" class=\"ax-sm -ax-mx-2\">\n <ax-prefix>\n <i class=\"fa-solid fa-caret-down fa-fw\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of page?.titleActions(); track $index) {\n <ng-container>\n <ax-button-item [attr.id]=\"'axp-btn-title-action-' + (sub.name || $index)\"\n [text]=\"(t(sub.title) | async)!\" [color]=\"sub.color\" [disabled]=\"sub.disabled\"\n [selected]=\"sub.command?.metadata?.['isSelected']\" (onClick)=\"handleActionClick(sub)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n <!-------- Finish Title Actions -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Status -------->\n\n @if (page?.hasStatus()) {\n <axp-status-chip [value]=\"page?.status()?.value ?? null\" [readonly]=\"page?.status()?.readonly || false\"\n [definitionKey]=\"page?.status()?.definitionKey ?? null\" [entityData]=\"getEntityData()\"\n (transitionExecuted)=\"handleStatusTransition($event)\" class=\"__title-status\"></axp-status-chip>\n }\n <!-------- Finish Page Status -------->\n\n <!-------- Begin Title Badge -------->\n @if (page?.hasBadge()) {\n <div id=\"axp-page-badge\" class=\"__title-badge --{{ page?.badge()?.color }}\"\n [attr.title]=\"page?.badge()?.description ?? page?.badge()?.title\" [attr.aria-label]=\"page?.badge()?.title\">\n <i class=\"fa-solid fa-circle\" aria-hidden=\"true\"></i>\n <span class=\"__title-badge-label\">{{ page?.badge()?.title }}</span>\n </div>\n }\n <!-------- Finish Title Badge -------->\n\n </div>\n <!-------- Finish Title Container -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Description -------->\n @if (page?.hasDescription()) {\n <axp-layout-description id=\"axp-page-description\">\n {{ page?.description() | translate | async }}</axp-layout-description>\n }\n <!-------- Finish Page Description -------->\n </div>\n <!-------- Finish Title Section -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Actions -------->\n <axp-layout-actions id=\"axp-page-actions\" class=\"ax-shrink-0\">\n <axp-component-slot name=\"page-header-actions\"></axp-component-slot>\n <!-------- Begin Primary Actions -------->\n @if (page?.hasPrimaryActions()) {\n @for (item of page?.primaryMenuItems(); track $index) {\n @if (item.visible != false) {\n <ax-button [attr.id]=\"'axp-btn-primary-' + (item.name || item.title)\" [class.ax-sm]=\"deviceService.isSmall()\"\n [iconOnly]=\"deviceService.isSmall()\" [disabled]=\"item.disabled\" [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\" [color]=\"item.color\" (onClick)=\"handleActionClick(item)\">\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n @if (item?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of item?.items; track $index) {\n @if (sub.visible != false) {\n <ax-button-item [attr.id]=\"'axp-btn-primary-' + (item.name || item.title) + '-' + (sub.name || sub.title)\"\n [text]=\"(t(sub.title) | async)!\" [color]=\"sub.color\" [disabled]=\"sub.disabled\"\n (onClick)=\"handleActionClick(sub)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n }\n }\n }\n <!-------- Finish Primary Actions -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Secondary Actions -------->\n @if (page?.hasSecondaryActions()) {\n <ax-button id=\"axp-btn-secondary\" [class.ax-sm]=\"deviceService.isSmall()\" [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\" [color]=\"'default'\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (item of page?.secondaryMenuItems(); track $index) {\n @if (item.visible != false) {\n <ax-button-item [attr.id]=\"'axp-btn-secondary-' + (item.name || item.title)\"\n [text]=\"(item.title | translate | async)!\" [color]=\"item.color\" [disabled]=\"item.disabled\"\n (onClick)=\"handleSecondaryActionClick(item)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n <!-------- Finish Secondary Actions -------->\n </axp-layout-actions>\n <!-------- Finish Page Actions -------->\n </axp-layout-title-bar>\n <!-------- Finish Title Bar -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Toolbar / Navbar -------->\n @if (!sticky.isSticky) {}\n <ng-content select=\"axp-page-toolbar\"></ng-content>\n <!-------- Finish Page Toolbar / Navbar -------->\n </axp-layout-header>\n <!-------- Finish Page Header -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Content -------->\n <ng-content select=\"axp-page-content\"></ng-content>\n <!-------- Finish Page Content -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Footer -------->\n <axp-page-footer-container id=\"axp-page-footer-container\"\n [ngStyle]=\"{ display: tt.isEmpty() && prefixSlot.isEmpty() && suffixSlot.isEmpty() ? 'none' : 'block' }\">\n <axp-layout-container #tt>\n <ng-content select=\"axp-page-footer\"></ng-content>\n </axp-layout-container>\n <axp-page-footer id=\"axp-page-footer\">\n <axp-layout-prefix>\n <axp-component-slot name=\"page-footer-start\" #prefixSlot=\"slot\"></axp-component-slot>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <axp-component-slot name=\"page-footer-end\" #suffixSlot=\"slot\"></axp-component-slot>\n </axp-layout-suffix>\n </axp-page-footer>\n </axp-page-footer-container>\n <!-------- Finish Page Footer -------->\n</axp-layout-container>\n<!-------- Finish Main Layout Container -------->","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPBadge } from '@acorex/platform/contracts';\n\n//#region ---- Page Unsaved Changes Utilities ----\n\n/**\n * Builds the standard \"Not Saved\" page badge when the global show-page-badge setting is enabled.\n */\nexport async function buildNotSavedPageBadge(\n translateService: AXTranslationService,\n settingsService: AXPSettingsService,\n): Promise<AXPBadge | null> {\n const showPageBadge = await settingsService.get<boolean>(AXPCommonSettings.ShowPageBadge);\n if (!showPageBadge) {\n return null;\n }\n\n return {\n title: await translateService.translateAsync('@general:terms.interface.save-status.not-saved.title'),\n color: 'warning',\n description: await translateService.translateAsync(\n '@general:terms.interface.save-status.not-saved.description',\n ),\n };\n}\n\n/**\n * Whether a command name represents a discard/revert action on a details sub-page.\n */\nexport function isDiscardCommand(commandName: string, rejectCommandName?: string | null): boolean {\n if (!commandName) {\n return false;\n }\n if (rejectCommandName && commandName === rejectCommandName) {\n return true;\n }\n if (commandName === 'discard') {\n return true;\n }\n return /:discard$/i.test(commandName) || commandName.endsWith('Discard');\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n AXPBrowserTitleService,\n AXPHomePageService,\n AXP_HOME_TAB_KEY,\n AXPSettingsService,\n AXPTabNavigationService,\n AXPTabPreviewService,\n AXPUnsavedChangesConfirmService,\n axpJoinTabTitleSegments,\n axpResolveTabKey,\n normalizeRouterUrl,\n} from '@acorex/platform/common';\nimport { AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, AXPPageStatus } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem } from '@acorex/platform/core';\nimport { AXPPolicyEngineService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { isEmpty } from 'lodash-es';\nimport { filter } from 'rxjs/operators';\nimport { AXPPageLayoutBase } from './page-layout.base';\nimport { AXPPageLayoutComponent } from './page-layout.component';\nimport { buildNotSavedPageBadge } from './page-unsaved-changes.util';\n@Component({\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n protected readonly policyService = inject(AXPPolicyEngineService);\n protected readonly settingsService = inject(AXPSettingsService);\n protected readonly tabNavigation = inject(AXPTabNavigationService);\n protected readonly tabPreviewService = inject(AXPTabPreviewService);\n protected readonly unsavedChangesConfirm = inject(AXPUnsavedChangesConfirmService);\n protected readonly browserTitleService = inject(AXPBrowserTitleService);\n protected readonly router = inject(Router);\n private readonly pageLayoutDestroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n /** Tab key captured at page init — stable while the route instance is cached. */\n private readonly pageTabKey = signal<string | null>(null);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n async ngOnInit() {\n this.pageTabKey.set(this.resolvePageTabKey());\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntilDestroyed(this.pageLayoutDestroyRef),\n )\n .subscribe(() => {\n void this.publishBrowserTitleIfActive();\n });\n }\n\n /** Maps the home-page route to the pinned home tab key instead of a path-based key. */\n private resolvePageTabKey(): string {\n const homePath = this.homePageService.getCurrent().path;\n if (homePath && normalizeRouterUrl(homePath) === normalizeRouterUrl(this.router.url)) {\n return AXP_HOME_TAB_KEY;\n }\n\n return axpResolveTabKey(this.router);\n }\n\n /** Stable tab key for this cached page instance (tabular mode). */\n protected getPageTabKey(): string | null {\n return this.pageTabKey();\n }\n\n //#endregion\n\n //#region ---------------- Tab Title Sync ----------------\n\n /** Refreshes tab title when this cached page becomes the active tab again. */\n #syncTabTitleOnActivate = effect(() => {\n const activeKey = this.tabNavigation.activeKey();\n const pageKey = this.pageTabKey();\n\n if (!activeKey || !pageKey || activeKey !== pageKey) {\n return;\n }\n\n if (this.tabNavigation.effectiveMode() !== 'tabular') {\n return;\n }\n\n untracked(() => {\n this.recompute();\n });\n });\n\n /** Publishes structured tab preview (hover card + dirty badge) for this cached page. */\n #syncTabStructuredPreview = effect(() => {\n this.updateTrigger();\n const tabKey = this.pageTabKey();\n const titleValue = this.title();\n const descriptionValue = this.description();\n const icon = this.titleIcon();\n const breadcrumbItems = this.breadcrumbs();\n\n if (!tabKey || this.tabNavigation.effectiveMode() !== 'tabular') {\n return;\n }\n\n const isDirty = this.hasUnsavedChanges();\n\n untracked(() => {\n void this.publishTabStructuredPreview(tabKey, {\n titleValue,\n descriptionValue,\n icon,\n breadcrumbItems,\n isDirty,\n });\n });\n });\n\n protected async publishTabStructuredPreview(\n tabKey: string,\n input: {\n titleValue: AXPMultiLanguageString;\n descriptionValue: AXPMultiLanguageString | null;\n icon: string | null;\n breadcrumbItems: AXPBreadcrumbItem[];\n isDirty: boolean;\n },\n ): Promise<void> {\n const tab = this.tabNavigation.tabList().find((item) => item.key === tabKey);\n const breadcrumbTrail: string[] = [];\n\n for (const item of input.breadcrumbItems.slice(1)) {\n const segment = await this.resolveBreadcrumbItemTitle(item);\n if (segment && segment !== breadcrumbTrail[breadcrumbTrail.length - 1]) {\n breadcrumbTrail.push(segment);\n }\n }\n\n const fallbackTitle = await this.translateTextIfKey(breadcrumbTrail.join(' - ') || tab?.title || '');\n const title = await this.resolveMultiLanguageText(input.titleValue, fallbackTitle);\n const subtitle = await this.resolveMultiLanguageText(input.descriptionValue, '');\n\n this.tabPreviewService.setPreview(tabKey, {\n title,\n subtitle: subtitle || undefined,\n url: tab?.url ?? '',\n icon: input.icon ?? tab?.icon,\n isDirty: input.isDirty,\n breadcrumbTrail,\n });\n }\n\n protected async resolveMultiLanguageText(\n value: AXPMultiLanguageString | null | undefined,\n fallback: string,\n ): Promise<string> {\n const resolvedFallback = await this.translateTextIfKey(fallback);\n\n if (value == null || value === '') {\n return resolvedFallback;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return resolvedFallback;\n }\n\n if (trimmed.startsWith('@')) {\n return (await this.translateService.translateAsync(trimmed)) || resolvedFallback;\n }\n\n return trimmed;\n }\n\n const resolved = this.translateService.resolve(value as AXPMultiLanguageString);\n return resolved || resolvedFallback;\n }\n\n /** Resolves i18n keys (`@scope:key`); returns plain text unchanged. */\n protected async translateTextIfKey(text: string): Promise<string> {\n const trimmed = text.trim();\n if (!trimmed) {\n return '';\n }\n\n if (trimmed.startsWith('@')) {\n return (await this.translateService.translateAsync(trimmed)) || trimmed;\n }\n\n return trimmed;\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<AXPMultiLanguageString>('');\n public titleIcon = signal<string | null>(null);\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPageTitle());\n const icon = await this.getPageIcon();\n this.titleIcon.set(icon);\n\n if (this.tabNavigation.effectiveMode() === 'tabular') {\n const tabKey = this.pageTabKey();\n if (tabKey && icon) {\n this.tabNavigation.syncTabIcon(tabKey, icon);\n }\n }\n });\n\n protected getPageTitle(): AXPMultiLanguageString | Promise<AXPMultiLanguageString> {\n return '';\n }\n\n protected getPageIcon(): string | null | Promise<string | null> {\n return null;\n }\n\n public hasTitle = computed(() => {\n const value = this.title();\n if (value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'string') {\n return value.length > 0;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return !isEmpty(value);\n }\n return false;\n });\n public hasTitleIcon = computed(() => this.titleIcon() !== null);\n\n #browserTitleEffect = effect(() => {\n if (this.tabNavigation.effectiveMode() === 'tabular') {\n return;\n }\n\n if (!this.isActivePageForBrowserTitle()) {\n return;\n }\n\n this.updateTrigger();\n this.title();\n\n untracked(() => {\n void this.publishBrowserTitleIfActive();\n });\n });\n\n /** Publishes the page title to the browser tab when this instance is the active route. */\n protected async publishBrowserTitleIfActive(): Promise<void> {\n if (this.tabNavigation.effectiveMode() === 'tabular') {\n return;\n }\n\n if (!this.isActivePageForBrowserTitle()) {\n return;\n }\n\n const routeKey = this.pageTabKey();\n if (!routeKey) {\n return;\n }\n\n const pageTitle = await this.resolvePageTitleForTab();\n if (!this.isActivePageForBrowserTitle()) {\n return;\n }\n\n this.browserTitleService.setSimpleModePageTitle(pageTitle, routeKey);\n }\n\n /** True when this cached page instance matches the current router location. */\n protected isActivePageForBrowserTitle(): boolean {\n const pageKey = this.pageTabKey();\n if (!pageKey) {\n return false;\n }\n\n return pageKey === axpResolveTabKey(this.router);\n }\n\n //#endregion\n\n //#region ---------------- Description ----------------\n\n public description = signal<AXPMultiLanguageString | null>(null);\n\n public hasDescription = computed(() => {\n const value = this.description();\n if (value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'string') {\n return value.length > 0;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return !isEmpty(value);\n }\n return false;\n });\n\n #descriptionEffect = effect(async () => {\n this.updateTrigger();\n this.description.set(await this.getPageDescription());\n });\n\n protected getPageDescription(): AXPMultiLanguageString | null | Promise<AXPMultiLanguageString | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Breadcrumbs ----------------\n\n private defaultBreadCrumbs: AXPBreadcrumbItem[] = [\n {\n title: '@general:terms.interface.navigation.home',\n icon: 'fa-solid fa-home ax-text-xs ax-me-1',\n command: {\n name: 'navigate',\n options: {\n path: this.homePageService.getCurrent().path,\n },\n },\n },\n ];\n\n public breadcrumbs = signal<AXPBreadcrumbItem[]>(this.defaultBreadCrumbs);\n\n #breadcrumbsEffect = effect(async () => {\n this.updateTrigger();\n const breadCrumbs = await this.getPageBreadcrumbs();\n const trail = [...this.defaultBreadCrumbs, ...breadCrumbs];\n this.breadcrumbs.set(trail);\n\n if (this.tabNavigation.effectiveMode() === 'tabular') {\n const tabKey = this.pageTabKey();\n const tabTitleSegments = await this.resolveBreadcrumbTabTitleSegments(breadCrumbs);\n let tabTitle = tabTitleSegments.length ? axpJoinTabTitleSegments(tabTitleSegments) : null;\n if (!tabTitle) {\n tabTitle = await this.resolvePageTitleForTab();\n }\n\n if (tabKey && tabTitle) {\n this.tabNavigation.syncTabTitle(tabKey, tabTitleSegments.length ? tabTitleSegments : tabTitle);\n }\n }\n });\n\n public hasBreadcrumbs = computed(() => this.breadcrumbs().length > 1);\n\n protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]> {\n return [];\n }\n\n /** Collects resolved breadcrumb labels (Home excluded upstream) for tab chrome. */\n protected async resolveBreadcrumbTabTitleSegments(pageBreadcrumbs: AXPBreadcrumbItem[]): Promise<string[]> {\n const segments: string[] = [];\n\n for (const item of pageBreadcrumbs) {\n const title = await this.resolveBreadcrumbItemTitle(item);\n if (title && title !== segments[segments.length - 1]) {\n segments.push(title);\n }\n }\n\n return segments;\n }\n\n /** Joins breadcrumb segments as the stored tab title string. */\n protected async resolveBreadcrumbTabTitle(pageBreadcrumbs: AXPBreadcrumbItem[]): Promise<string | null> {\n const segments = await this.resolveBreadcrumbTabTitleSegments(pageBreadcrumbs);\n if (!segments.length) {\n return null;\n }\n\n return axpJoinTabTitleSegments(segments);\n }\n\n /** Resolves a breadcrumb label the same way as page chrome (`t(item.title)`). */\n protected async resolveBreadcrumbItemTitle(item: AXPBreadcrumbItem | undefined): Promise<string | null> {\n const raw = item?.title;\n if (raw == null || raw === '') {\n return null;\n }\n\n if (typeof raw === 'string') {\n const trimmed = raw.trim();\n if (!trimmed) {\n return null;\n }\n\n if (trimmed.startsWith('@')) {\n return (await this.translateService.translateAsync(trimmed)) || trimmed;\n }\n\n return trimmed;\n }\n\n if (typeof raw === 'object' && !Array.isArray(raw)) {\n if (this.translateService.isValidMultiLanguageObject(raw)) {\n const resolved = this.translateService.resolve(raw as AXPMultiLanguageString);\n return resolved || null;\n }\n\n const resolved = this.translateService.resolve(raw as AXPMultiLanguageString);\n return resolved || null;\n }\n\n return String(raw);\n }\n\n /** Fallback tab label from the page title when breadcrumbs are not ready yet. */\n protected async resolvePageTitleForTab(): Promise<string | null> {\n const raw = await Promise.resolve(this.getPageTitle());\n if (raw == null || raw === '') {\n return null;\n }\n\n if (typeof raw === 'string') {\n const trimmed = raw.trim();\n if (trimmed.startsWith('@')) {\n return (await this.translateService.translateAsync(trimmed)) || trimmed;\n }\n return trimmed;\n }\n\n if (typeof raw === 'object' && !Array.isArray(raw)) {\n const resolved = this.translateService.resolve(raw as AXPMultiLanguageString);\n return resolved || null;\n }\n\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Badge ----------------\n\n public badge = signal<AXPBadge | null>(null);\n\n public hasBadge = computed(() => this.badge() !== null);\n\n #badgeEffect = effect(async () => {\n this.updateTrigger();\n this.badge.set(await this.getPageBadge());\n });\n\n hasUnsavedChanges(): boolean {\n return false;\n }\n\n /**\n * Confirms closing this page as a background tab (no router navigation).\n * Override when dirty detection differs from {@link hasUnsavedChanges}.\n */\n onBeforeTabClose(): boolean | Promise<boolean> {\n return this.unsavedChangesConfirm.confirmIfDirty(this.hasUnsavedChanges(), {\n approveLeaveOnConfirm: false,\n });\n }\n\n protected async getPageBadge(): Promise<AXPBadge | null> {\n if (!this.hasUnsavedChanges()) {\n return null;\n }\n return buildNotSavedPageBadge(this.translateService, this.settingsService);\n }\n\n async resolvePageBadge(): Promise<AXPBadge | null> {\n return this.getPageBadge();\n }\n\n //#endregion\n\n //#region ---------------- Status ----------------\n\n public status = signal<AXPPageStatus | null>(null);\n\n public hasStatus = computed(() => this.status() !== null);\n\n #statusEffect = effect(async () => {\n this.updateTrigger();\n this.status.set(await this.getPageStatus());\n });\n\n protected getPageStatus(): AXPPageStatus | null | Promise<AXPPageStatus | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Layout ----------------\n\n protected layout = viewChild(AXPPageLayoutComponent);\n\n //TODO: Remove this after migration to the new layout\n protected toggleEndSide() {\n //this.layout()?.toggleStartSide()\n }\n\n //TODO: Remove this after migration to the new layout\n protected toggleStartSide() {\n this.layout()?.toggleStartSide();\n }\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasPrimaryActions = computed(() => this.primaryMenuItems().filter((item) => item.visible != false).length > 0);\n\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getPrimaryMenuItems();\n this.primaryMenuItems.set(items);\n });\n\n public getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasSecondaryActions = computed(\n () => this.secondaryMenuItems().filter((item) => item.visible != false).length > 0,\n );\n\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getSecondaryMenuItems();\n this.secondaryMenuItems.set(items);\n });\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public backButton = signal<AXPBackButton | null>(null);\n\n public hasBackButton = computed(() => this.backButton() !== null);\n\n protected getBackButton(): (AXPBackButton | null) | Promise<AXPBackButton | null> {\n return null;\n }\n\n #backButtonEffect = effect(async () => {\n this.updateTrigger();\n this.backButton.set(await this.getBackButton());\n });\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> {}\n\n /**\n * Optional partial context to merge into the create/update wizard when leaving a page step.\n * Override when the page keeps edits in local state instead of the shared form context.\n */\n getWizardStepContext(): Record<string, unknown> | null {\n return null;\n }\n\n public startSideToggle(): void | Promise<void> {\n this.layout();\n }\n\n public onBackButtonClick(): void | Promise<void> {}\n\n //#endregion\n}\n","import { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem } from '@acorex/platform/core';\n\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPopupLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n abstract hasTitleActions: Signal<boolean>;\n abstract hasPrimaryActions: Signal<boolean>;\n abstract hasSecondaryActions: Signal<boolean>;\n abstract hasActions: Signal<boolean>;\n abstract title: Signal<string>;\n abstract hasTitle: Signal<boolean>;\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n} ","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent, AXCommonModule } from \"@acorex/cdk/common\";\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\n//\nimport { AXDrawerDirectiveModule } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem } from '@acorex/platform/core';\n\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPopupLayoutBase } from './popup-layout.base';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n ],\n templateUrl: './popup-layout.component.html',\n styleUrls: ['./popup-layout.component.scss'],\n selector: 'axp-popup-layout',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPPopupLayoutComponent {\n protected popup = inject<AXPPopupLayoutBase>(AXPPopupLayoutBase);\n protected layoutService = inject(AXPLayoutThemeService);\n protected workflow = inject(AXPWorkflowService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.popup?.title();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-popup-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.popup?.execute(item.command);\n }\n }\n\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.popup?.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n} ","<axp-layout-container id=\"axp-popup-layout\" #container>\n <ng-content select=\"axp-page-content\"></ng-content>\n <axp-page-footer id=\"axp-popup-footer\" *translate=\"let t\">\n <ax-prefix> </ax-prefix>\n @if (popup.hasPrimaryActions()) {\n <ax-suffix>\n @for (item of popup.primaryMenuItems(); track $index) {\n <ax-button\n [attr.id]=\"'axp-btn-primary-' + (item.name || item.title)\"\n [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"item.color\"\n (onClick)=\"handleActionClick(item)\"\n >\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-suffix>\n }\n </axp-page-footer>\n</axp-layout-container>\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { AXPPopupLayoutComponent } from './popup-layout.component';\nimport { AXBasePageComponent } from '@acorex/components/page';\n\n@Component({\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n override async ngOnInit() {\n super.ngOnInit();\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<string>('');\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPopupTitle());\n });\n\n protected getPopupTitle(): string | Promise<string> {\n return '';\n }\n\n public hasTitle = computed(() => this.title() !== '');\n\n //#endregion\n\n\n\n //#region ---------------- Layout ----------------\n\n // Placeholder for popup layout reference if needed\n protected layout = viewChild(AXPPopupLayoutComponent);\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasPrimaryActions = computed(() => this.primaryMenuItems().length > 0);\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.primaryMenuItems.set(await this.getPrimaryMenuItems());\n });\n protected getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasSecondaryActions = computed(() => this.secondaryMenuItems().length > 0);\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.secondaryMenuItems.set(await this.getSecondaryMenuItems());\n });\n protected getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n //#endregion\n} ","import { InjectionToken } from '@angular/core';\nimport { AXPLayoutDetailsViewAdapter } from './details-view.adapter';\n\n//#region ---- Types ----\n\nexport interface AXPLayoutDetailsViewRouteParams {\n moduleName: string;\n entityName: string;\n id: string;\n}\n\nexport interface AXPLayoutDetailsViewAdapterLoader {\n load(params: AXPLayoutDetailsViewRouteParams): Promise<AXPLayoutDetailsViewAdapter>;\n}\n\nexport const AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER = new InjectionToken<AXPLayoutDetailsViewAdapterLoader>(\n 'AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER',\n);\n\n//#endregion\n","/** Trace namespace for details-view page / URL sync diagnostics. */\nexport const DETAILS_VIEW_PAGE_TRACE_NS = 'details-view-page';\n","import { AXFormComponent } from '@acorex/components/form';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPCommonSettings,\n AXPEntityCommandScope,\n AXPNotFoundError,\n AXPSettingsService,\n AXP_NOT_FOUND_ROUTE,\n axpIsEntityDetailsViewRoute,\n axpNavigateAppPath,\n} from '@acorex/platform/common';\nimport {\n AXPBackButton,\n AXPBadge,\n AXPPageStatus as AXPDetailsPageStatusChip,\n AXPExecuteCommand,\n AXPMultiLanguageString,\n} from '@acorex/platform/contracts';\nimport {\n AXPContextEvalFactory,\n AXPDebugService,\n AXPDeviceService,\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n OVERLAY_DETAILS_VIEW_TRACE_NS,\n getSmart,\n} from '@acorex/platform/core';\nimport { AXPPageStatus, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { computed, effect, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { cloneDeep, get, isEmpty } from 'lodash-es';\nimport {\n AXPLayoutDetailsViewAdapter,\n AXPLayoutDetailsViewPage,\n AXPLayoutDetailsViewTabItem,\n} from './details-view.adapter';\nimport { AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER } from './details-view.adapter-loader';\nimport { DETAILS_VIEW_PAGE_TRACE_NS } from './details-view-trace.constants';\n\n//#region ---- Root-context widget expression resolution ----\n\n/**\n * Evaluates `{{ ... }}` strings inside `options.customFilterDefinitions` using `rootContext`\n * (details adapter load data), so filter UI does not depend on widget-renderer contextService.\n */\nasync function buildEvaluatedPageContentsForRootContext(\n currentPage: AXPLayoutDetailsViewPage | null,\n rootContext: Record<string, unknown>,\n evaluatorService: AXPExpressionEvaluatorService,\n): Promise<{\n evaluatedPageContent: AXPWidgetNode[];\n evaluatedTabContentsById: Record<string, AXPWidgetNode[]>;\n}> {\n if (!currentPage) {\n return { evaluatedPageContent: [], evaluatedTabContentsById: {} };\n }\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => getSmart(rootContext, path),\n },\n };\n\n const resolveNodes = async (nodes: AXPWidgetNode[] | undefined): Promise<AXPWidgetNode[]> => {\n if (!nodes?.length) {\n return [];\n }\n const cloned = cloneDeep(nodes);\n for (const node of cloned) {\n const defs = node.options?.['customFilterDefinitions'] as unknown[] | undefined;\n if (Array.isArray(defs) && defs.length > 0) {\n node.options!['customFilterDefinitions'] = await evaluatorService.evaluate(defs, scope);\n }\n }\n return cloned;\n };\n\n const evaluatedPageContent = await resolveNodes(currentPage.content);\n const evaluatedTabContentsById: Record<string, AXPWidgetNode[]> = {};\n for (const tab of currentPage.tabs ?? []) {\n evaluatedTabContentsById[tab.id] = await resolveNodes(tab.content);\n }\n\n return { evaluatedPageContent, evaluatedTabContentsById };\n}\n\n//#endregion\n\nexport const AXPLayoutDetailsViewViewModel = signalStore(\n withState(() => {\n const state = {\n adapter: null as AXPLayoutDetailsViewAdapter | null,\n rootContext: {} as Record<string, any>,\n savedContext: {} as Record<string, any>,\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n scope: null as AXPExpressionEvaluatorScope | null,\n status: AXPPageStatus.Idle,\n currentPage: null as AXPLayoutDetailsViewPage | null,\n currentTab: null as AXPLayoutDetailsViewTabItem | null,\n pageSelectedRows: [] as any[],\n /** Page main column widgets with `customFilterDefinitions` evaluated against `rootContext` */\n evaluatedPageContent: [] as AXPWidgetNode[],\n /** Tab panel widgets keyed by tab id (same evaluation as `evaluatedPageContent`) */\n evaluatedTabContentsById: {} as Record<string, AXPWidgetNode[]>,\n /** Dirty flag synced from {@link AXPWidgetContainerComponent.isFormDirty}. */\n formDirty: false,\n };\n return state;\n }),\n withComputed((store, deviceService = inject(AXPDeviceService)) => ({\n icon: computed(() => store.adapter()?.icon ?? null),\n content: computed(() => {\n const pages = store.adapter()?.pages ?? [];\n const primaryPage = pages.find((p) => p.isPrimary) ?? pages[0];\n return primaryPage?.content ?? [];\n }),\n //\n showPages: computed(() => !store.currentPage() && !deviceService.isLarge()),\n isLarge: computed(() => deviceService.isLarge()),\n //\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isSaving: computed(() => store.status() == AXPPageStatus.Submitting),\n isOverlayBusy: computed(\n () =>\n store.status() === AXPPageStatus.Processing || store.status() === AXPPageStatus.Submitting,\n ),\n isPageReady: computed(\n () =>\n store.adapter() != null &&\n store.currentPage() != null &&\n store.status() === AXPPageStatus.Rendered,\n ),\n isDirty: computed(() => {\n if (store.currentPage()?.isReadonly) {\n return false;\n }\n return store.formDirty();\n }),\n changesCount: computed(() => {\n if (store.currentPage()?.isReadonly) {\n return 0;\n }\n return store.formDirty() ? 1 : 0;\n }),\n isLoaded: computed(() => store.adapter() != null),\n currentPageSelectedRows: computed(() => store.pageSelectedRows()),\n /** Evaluated widget nodes for the active tab only (avoids double-mount from keep-alive cache). */\n activeTabContent: computed((): AXPWidgetNode[] => {\n const tab = store.currentTab();\n if (!tab?.id) {\n return [];\n }\n const evaluatedByTab = store.evaluatedTabContentsById();\n return evaluatedByTab[tab.id] ?? [];\n }),\n })),\n withMethods(\n (\n store,\n evaluatorService = inject(AXPExpressionEvaluatorService),\n contextEvalFactory = inject(AXPContextEvalFactory),\n router = inject(Router),\n route = inject(ActivatedRoute),\n deviceService = inject(AXPDeviceService),\n formatService = inject(AXFormatService),\n toastService = inject(AXToastService),\n translateService = inject(AXTranslationService),\n settingsService = inject(AXPSettingsService),\n layout = inject(AXPLayoutThemeService),\n adapterLoader = inject(AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER),\n ) => {\n const resolvePageFromId = (\n adapter: AXPLayoutDetailsViewAdapter,\n pageId?: string | null,\n ): AXPLayoutDetailsViewPage | null => {\n if (pageId) {\n return adapter.pages.find((p) => p.id === pageId) ?? null;\n }\n\n if (deviceService.isLarge() || adapter.pages.length === 1) {\n return adapter.pages.find((p) => p.isPrimary) ?? adapter.pages[0] ?? null;\n }\n\n return null;\n };\n\n /** Serializes page activation so route sync and UI cannot run overlapping loads. */\n let pageActivationChain: Promise<void> = Promise.resolve();\n\n /** Serializes route-driven adapter loads (initial navigation and layout refresh). */\n let routeLoadChain: Promise<void> = Promise.resolve();\n\n /** `page` query param from the browser URL (reliable on hard refresh). */\n const readPageQueryParam = (): string | null => {\n const page = router.parseUrl(router.url).queryParams['page'];\n return typeof page === 'string' && page.length > 0 ? page : null;\n };\n\n /** Snapshot of all page-query sources for trace logs. */\n const pageQueryTraceContext = (extra: Record<string, unknown> = {}): Record<string, unknown> => ({\n routerUrl: router.url,\n pageFromRouterUrl: readPageQueryParam(),\n pageFromRouteSnapshot: route.snapshot.queryParamMap.get('page'),\n pageFromRootSnapshot: router.routerState.snapshot.root.queryParams['page'] ?? null,\n currentPageId: store.currentPage()?.id ?? null,\n adapterPageIds: store.adapter()?.pages.map((p) => p.id) ?? [],\n ...extra,\n });\n\n /** Loads page data, context, and evaluated widgets for the target sidebar page. */\n const activatePageById = async (pageId?: string, forceRefresh?: boolean): Promise<void> => {\n const activation = pageActivationChain.then(() => runPageActivation(pageId, forceRefresh));\n pageActivationChain = activation.catch(() => undefined);\n await activation;\n };\n\n const runPageActivation = async (pageId?: string, forceRefresh?: boolean): Promise<void> => {\n const adapter = store.adapter();\n if (!adapter) {\n return;\n }\n\n const targetPageId = pageId ?? readPageQueryParam() ?? undefined;\n const currentPage = resolvePageFromId(adapter, targetPageId);\n\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'runPageActivation', () => pageQueryTraceContext({\n passedPageId: pageId ?? null,\n targetPageId: targetPageId ?? null,\n resolvedPageId: currentPage?.id ?? null,\n forceRefresh: forceRefresh ?? false,\n vmStatus: store.status(),\n }));\n\n if (!forceRefresh && currentPage?.id === store.currentPage()?.id && store.status() === AXPPageStatus.Rendered) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'runPageActivation skipped (already rendered)', () => pageQueryTraceContext({\n resolvedPageId: currentPage?.id ?? null,\n }));\n return;\n }\n\n const previousPageId = store.currentPage()?.id;\n const isSidebarSwitch = previousPageId != null && previousPageId !== currentPage?.id;\n\n if (isSidebarSwitch) {\n layout.setNavigationLoading(true);\n }\n\n const overlayAlreadyOn = layout.overlayTaskCount() > 0;\n if (!overlayAlreadyOn) {\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'activatePage overlay ON', () => ({\n pageId: currentPage?.id,\n forceRefresh,\n isSidebarSwitch,\n }));\n layout.setOverlayLoading(true);\n } else {\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'activatePage skipped overlay ON (task count > 0)', () => ({\n pageId: currentPage?.id,\n forceRefresh,\n isSidebarSwitch,\n taskCount: layout.overlayTaskCount(),\n }));\n }\n\n patchState(store, {\n status: AXPPageStatus.Processing,\n });\n\n try {\n let context: Record<string, unknown> = {};\n if (currentPage) {\n const currentPageIndex = adapter.pages.findIndex((p) => p.id === currentPage.id);\n const pageLoad = adapter.pages[currentPageIndex]?.load;\n if (typeof pageLoad === 'function') {\n const loadResult = await pageLoad({ forceRefresh });\n context = (loadResult?.data as Record<string, unknown>) ?? {};\n } else {\n // Component/list sidebar pages have no `load`; keep entity root context so widget\n // state is not cleared (Change History, etc. use `rootContext` instead).\n context = cloneDeep(store.rootContext()) as Record<string, unknown>;\n }\n }\n\n const currentTab = currentPage?.tabs?.[0] ?? null;\n const shouldSyncRootContext =\n forceRefresh === true && currentPage?.isPrimary === true && !isEmpty(context);\n const rootCtx = shouldSyncRootContext\n ? context\n : (store.rootContext() as Record<string, unknown>);\n const { evaluatedPageContent, evaluatedTabContentsById } = await buildEvaluatedPageContentsForRootContext(\n currentPage,\n rootCtx,\n evaluatorService,\n );\n\n patchState(store, {\n previousContext: cloneDeep(context),\n context: cloneDeep(context),\n savedContext: cloneDeep(context),\n ...(shouldSyncRootContext ? { rootContext: cloneDeep(context) } : {}),\n status: AXPPageStatus.Rendered,\n currentPage,\n currentTab,\n evaluatedPageContent,\n evaluatedTabContentsById,\n formDirty: false,\n pageSelectedRows: [],\n });\n\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'activatePage VM ready (Rendered)', () => ({\n pageId: currentPage?.id,\n forceRefresh,\n }));\n\n const urlPageParam = readPageQueryParam();\n if (currentPage && axpIsEntityDetailsViewRoute(router)) {\n if (!urlPageParam) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'URL sync — add missing ?page=', () => pageQueryTraceContext({\n navigateToPageId: currentPage.id,\n }));\n router.navigate([], {\n relativeTo: route,\n queryParams: { page: currentPage.id },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n } else {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'URL sync — skipped (page already in URL)', () => pageQueryTraceContext({\n urlPageParam,\n resolvedPageId: currentPage.id,\n }));\n }\n }\n } finally {\n if (isSidebarSwitch) {\n layout.setNavigationLoading(false);\n }\n if (store.status() === AXPPageStatus.Processing) {\n patchState(store, { status: AXPPageStatus.Rendered });\n }\n }\n };\n\n // Sync sidebar page from route query params\n effect((onCleanup) => {\n if (!store.adapter()) {\n return;\n }\n\n const subscription = route.queryParams.subscribe((params) => {\n const adapter = store.adapter();\n if (!adapter) {\n return;\n }\n\n // `load()` → `loadPage()` owns the first activation while `currentPage` is still null.\n if (store.currentPage() == null) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'queryParams effect — skipped (currentPage null)', () => pageQueryTraceContext({\n paramsPage: params['page'] ?? null,\n }));\n return;\n }\n\n const pageId = params['page'] as string | undefined;\n if (!pageId) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'queryParams effect — skipped (no page param)', () => pageQueryTraceContext({\n params,\n }));\n return;\n }\n\n const targetPage = adapter.pages.find((p) => p.id === pageId);\n if (!targetPage || store.currentPage()?.id === targetPage.id) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'queryParams effect — skipped (same or unknown page)', () => pageQueryTraceContext({\n paramsPage: pageId,\n targetPageFound: !!targetPage,\n }));\n return;\n }\n\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'queryParams effect — activatePageById', () => pageQueryTraceContext({\n paramsPage: pageId,\n activatePageId: targetPage.id,\n }));\n void activatePageById(targetPage.id);\n });\n\n onCleanup(() => subscription.unsubscribe());\n });\n\n /**\n * Breadcrumb titles are rendered with `{{ t(item.title) | async }}`; values must resolve to primitives\n * or `@` keys. Normalize MLS **before** evaluate/format **and** **after**, because `raw` and the evaluator\n * output can both carry MLS maps or locale-shaped objects.\n */\n function applyLocaleIfMultilingual(value: AXPMultiLanguageString | unknown): AXPMultiLanguageString {\n if (\n value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n translateService.isValidMultiLanguageObject(value)\n ) {\n return translateService.resolve(value as AXPMultiLanguageString);\n }\n return value as AXPMultiLanguageString;\n }\n\n /** Post-eval: collapse MLS maps and plain locale objects after evaluate/format (avoids `[object Object]` in `t()`). */\n function finalizeBreadcrumbTitleEvaluated(\n evaluated: unknown,\n fallback: AXPMultiLanguageString,\n ): AXPMultiLanguageString {\n const chosen = evaluated ?? fallback;\n if (\n chosen !== null &&\n chosen !== undefined &&\n typeof chosen === 'object' &&\n !Array.isArray(chosen) &&\n translateService.isValidMultiLanguageObject(chosen)\n ) {\n return translateService.resolve(chosen as AXPMultiLanguageString);\n }\n if (typeof chosen === 'string') {\n return chosen;\n }\n if (chosen !== null && chosen !== undefined && typeof chosen === 'object' && !Array.isArray(chosen)) {\n return translateService.resolve(chosen as AXPMultiLanguageString);\n }\n if (typeof fallback === 'string') {\n return fallback;\n }\n if (\n fallback !== null &&\n fallback !== undefined &&\n translateService.isValidMultiLanguageObject(fallback as unknown)\n ) {\n return translateService.resolve(fallback as AXPMultiLanguageString);\n }\n return translateService.resolve(fallback);\n }\n\n async function resolveBreadcrumbTitleFields(\n raw: AXPMultiLanguageString,\n evalScope: AXPExpressionEvaluatorScope,\n formatContext: Record<string, unknown>,\n ): Promise<AXPMultiLanguageString> {\n /** Pre-eval: locale strip for recognizable MLS payloads before branching on expressions. */\n const sourceAfterPreLocale = applyLocaleIfMultilingual(raw);\n\n const isStructuredMlsObject =\n translateService.isValidMultiLanguageObject(raw) &&\n typeof raw === 'object' &&\n raw !== null &&\n !Array.isArray(raw);\n\n /** Full-string `{{ ... }}` uses `AXPExpressionEvaluatorService.isExpression` (aligned with evaluator API). */\n let evaluated: unknown;\n if (typeof sourceAfterPreLocale === 'string' && evaluatorService.isExpression(sourceAfterPreLocale)) {\n evaluated = await evaluatorService.evaluate(sourceAfterPreLocale, evalScope);\n } else if (isStructuredMlsObject) {\n evaluated = await evaluatorService.evaluate(raw, evalScope);\n } else if (typeof sourceAfterPreLocale === 'string') {\n if (sourceAfterPreLocale.trim().startsWith('@')) {\n evaluated = await translateService.translateAsync(sourceAfterPreLocale);\n } else {\n evaluated = await formatService.format(sourceAfterPreLocale, 'string', formatContext);\n }\n } else {\n evaluated = await formatService.format(raw as AXPMultiLanguageString, 'string', formatContext);\n }\n\n /** Post-eval: MLS-aware resolution again — evaluate may return MLS or map-like wrappers. */\n return finalizeBreadcrumbTitleEvaluated(evaluated, raw);\n }\n\n /**\n * Resolves MLS objects, evaluates format templates, or applies string formatting against page context (same semantics as legacy details layout header meta).\n */\n function convertToMultiLanguageString(\n value: AXPMultiLanguageString | null | undefined,\n ): AXPMultiLanguageString | null {\n if (!value || isEmpty(value)) {\n return null;\n }\n if (translateService.isValidMultiLanguageObject(value)) {\n return translateService.resolve(value as AXPMultiLanguageString);\n }\n return (formatService.format(value, 'string', store.context()) as AXPMultiLanguageString) ?? '';\n }\n\n return {\n async loadAdapter(adapter: AXPLayoutDetailsViewAdapter) {\n patchState(store, { adapter });\n\n // Load adapter context if adapter has load function\n let adapterContext = {};\n if (adapter.load) {\n const adapterResult = await adapter.load();\n adapterContext = adapterResult?.data ?? {};\n }\n\n patchState(store, {\n rootContext: cloneDeep(adapterContext),\n });\n },\n\n async loadPage(pageId?: string, forceRefresh?: boolean) {\n await activatePageById(pageId, forceRefresh);\n },\n\n async load(adapter: AXPLayoutDetailsViewAdapter, forceRefresh?: boolean, pageIdFromUrl?: string) {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n ...contextEvalFactory.createLiveScope(() => store.context() as Record<string, unknown>),\n isDirty: () => store.isDirty(),\n },\n };\n patchState(store, {\n scope,\n });\n //\n await this.loadAdapter(adapter);\n const pageId = pageIdFromUrl ?? readPageQueryParam() ?? undefined;\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'load — activate page', () => pageQueryTraceContext({\n pageIdFromUrl: pageIdFromUrl ?? null,\n resolvedPageId: pageId ?? null,\n forceRefresh: forceRefresh ?? false,\n }));\n await this.loadPage(pageId, forceRefresh);\n },\n\n async loadFromRoute(forceRefresh?: boolean): Promise<void> {\n const run = async (): Promise<void> => {\n const pageIdFromUrl = readPageQueryParam() ?? undefined;\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'loadFromRoute start', () => pageQueryTraceContext({\n pageIdFromUrl: pageIdFromUrl ?? null,\n forceRefresh: forceRefresh ?? false,\n }));\n const moduleName = route.parent?.snapshot.paramMap.get('module');\n const entityName = route.snapshot.paramMap.get('entity');\n const id = route.snapshot.paramMap.get('id');\n\n if (!moduleName || !entityName || !id) {\n return;\n }\n\n layout.setNavigationLoading(true);\n if (layout.overlayTaskCount() === 0) {\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'loadFromRoute overlay ON', () => ({\n moduleName,\n entityName,\n id,\n forceRefresh,\n }));\n layout.setOverlayLoading(true);\n } else {\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'loadFromRoute skipped overlay ON (task count > 0)', () => ({\n moduleName,\n entityName,\n id,\n forceRefresh,\n taskCount: layout.overlayTaskCount(),\n }));\n }\n\n try {\n if (forceRefresh) {\n patchState(store, {\n currentPage: null,\n status: AXPPageStatus.Idle,\n });\n }\n\n const adapter = await adapterLoader.load({ moduleName, entityName, id });\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'adapter loaded (overlay still ON — details-view releases)', () => ({\n moduleName,\n entityName,\n id,\n }));\n await this.load(adapter, forceRefresh, pageIdFromUrl);\n } catch (error) {\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'loadFromRoute overlay OFF (error)', () => ({\n moduleName,\n entityName,\n id,\n }));\n layout.setOverlayLoading(false);\n if (error instanceof AXPNotFoundError) {\n void router.navigateByUrl(AXP_NOT_FOUND_ROUTE);\n return;\n }\n throw error;\n } finally {\n layout.setNavigationLoading(false);\n }\n };\n\n const load = routeLoadChain.then(run);\n routeLoadChain = load.catch(() => undefined);\n await load;\n },\n\n updateContext(context: any) {\n patchState(store, {\n context,\n });\n },\n\n setFormDirty(dirty: boolean) {\n if (store.formDirty() === dirty) {\n return;\n }\n patchState(store, {\n formDirty: dirty,\n });\n },\n\n updatePageSelectedRows(rows: any[]) {\n patchState(store, {\n pageSelectedRows: rows,\n });\n },\n\n async currentPagePrimaryActions() {\n // Use getActions() if available for reactive updates, otherwise fall back to static actions\n const currentPage = store.currentPage();\n const allActions = currentPage?.getActions ? await currentPage.getActions() : (currentPage?.actions ?? []);\n\n const raw = allActions.filter((a) => a.priority == 'primary');\n const acceptAction = currentPage?.settings?.commands?.accept;\n const rejectAction = currentPage?.settings?.commands?.reject;\n if (rejectAction) {\n raw.push({\n priority: 'primary',\n zone: 'footer',\n name: 'reject',\n title: rejectAction.title,\n color: rejectAction.color,\n icon: rejectAction.icon,\n command: rejectAction.command,\n visible: rejectAction.visible,\n });\n }\n if (acceptAction) {\n raw.push({\n priority: 'primary',\n zone: 'footer',\n name: 'accept',\n title: acceptAction.title,\n color: acceptAction.color,\n icon: acceptAction.icon,\n command: acceptAction.command,\n visible: acceptAction.visible,\n });\n }\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async currentPageSecondaryActions() {\n const raw =\n store\n .currentPage()\n ?.actions?.filter(\n (a) => a.priority == 'secondary' && a.zone == 'header' && a.scope == AXPEntityCommandScope.TypeLevel,\n ) ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n currentPageContent() {\n return store.evaluatedPageContent();\n },\n\n currentPageTabs() {\n return store.currentPage()?.tabs?.filter((tab) => tab.visible !== false);\n },\n\n setCurrentPage(page: AXPLayoutDetailsViewPage | null) {\n const previousPage = store.currentPage();\n\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'setCurrentPage', () => pageQueryTraceContext({\n requestedPageId: page?.id ?? null,\n previousPageId: previousPage?.id ?? null,\n }));\n\n if (page) {\n if (!previousPage) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'setCurrentPage — ignored (initial load in progress)', () => pageQueryTraceContext({\n requestedPageId: page.id,\n }));\n return;\n }\n\n const pageParam = readPageQueryParam();\n const isSamePage = previousPage?.id === page.id && pageParam === page.id;\n\n if (!isSamePage && axpIsEntityDetailsViewRoute(router)) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'setCurrentPage — navigate', () => pageQueryTraceContext({\n navigateToPageId: page.id,\n }));\n const queryParams: Record<string, string | null> = { page: page.id };\n if (previousPage?.id && previousPage.id !== page.id) {\n queryParams['filters'] = null;\n }\n\n router.navigate([], {\n relativeTo: route,\n queryParams,\n queryParamsHandling: 'merge',\n // Push history for desktop sidebar switches and mobile page-list picks.\n replaceUrl: false,\n });\n return;\n }\n\n void activatePageById(page.id);\n } else {\n patchState(store, {\n currentPage: null,\n currentTab: null,\n evaluatedPageContent: [],\n evaluatedTabContentsById: {},\n });\n if (axpIsEntityDetailsViewRoute(router)) {\n const currentParams = { ...route.snapshot.queryParams };\n delete currentParams['page'];\n router.navigate([], {\n relativeTo: route,\n queryParams: currentParams,\n replaceUrl: true,\n });\n }\n }\n },\n\n setCurrentTab(tab: AXPLayoutDetailsViewTabItem) {\n patchState(store, {\n currentTab: tab,\n });\n },\n\n //#region ---- Page layout metadata (title, description, back button, badge, status) ----\n\n backButtonTitle() {\n return store.showPages() ? (store.adapter()?.label ?? '') : (store.adapter()?.title ?? '');\n },\n\n async getPageTitle(): Promise<AXPMultiLanguageString> {\n if (store.showPages()) {\n const raw = store.adapter()?.title;\n return convertToMultiLanguageString(raw) ?? '';\n }\n const raw = store.currentPage()?.title;\n return convertToMultiLanguageString(raw) ?? '';\n },\n\n async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n if (store.showPages()) {\n const raw = store.adapter()?.description;\n return convertToMultiLanguageString(raw);\n }\n const raw = store.currentPage()?.description;\n return convertToMultiLanguageString(raw);\n },\n\n async getBackButton(): Promise<AXPBackButton | null> {\n const adapter = store.adapter();\n if (!adapter) {\n return null;\n }\n if ((adapter.pages?.length ?? 0) > 1) {\n const titleRaw = (\n store.showPages() ? (adapter.label ?? '') : (adapter.title ?? '')\n ) as AXPMultiLanguageString;\n return { title: convertToMultiLanguageString(titleRaw) ?? '@general:terms.common.back' };\n }\n const label = (adapter.label ?? '') as AXPMultiLanguageString;\n return { title: convertToMultiLanguageString(label) ?? '@general:terms.common.back' };\n },\n\n async getPageBadge(): Promise<AXPBadge | null> {\n if (store.currentPage()?.isReadonly) {\n return null;\n }\n const showPageBadge = await settingsService.get<boolean>(AXPCommonSettings.ShowPageBadge);\n if (!showPageBadge) {\n return null;\n }\n const adapter = store.adapter();\n if (!adapter?.getPageBadge) {\n return null;\n }\n return adapter.getPageBadge(store.context(), store.isDirty());\n },\n\n async getPageStatus(): Promise<AXPDetailsPageStatusChip | null> {\n const adapter = store.adapter();\n if (!adapter?.getPageStatus) {\n return null;\n }\n return adapter.getPageStatus(store.context(), store.currentPage());\n },\n\n //#endregion\n\n async primaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'primary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async secondaryActions() {\n const raw =\n store\n .adapter()\n ?.actions?.filter((a) => a.priority == 'secondary' && a.scope == AXPEntityCommandScope.TypeLevel) ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async breadcrumbs() {\n const rootContext = store.rootContext();\n const scope: AXPExpressionEvaluatorScope = {\n ...rootContext,\n context: {\n eval: (path: string) => get(rootContext, path),\n },\n };\n\n const breadcrumbs = await Promise.all(\n store.adapter()?.breadcrumbs?.map(async (b) => {\n const raw = (b?.title ?? '') as AXPMultiLanguageString;\n return {\n ...b,\n title: await resolveBreadcrumbTitleFields(raw, scope, rootContext),\n };\n }) ?? [],\n );\n\n // Add current page title as the last breadcrumb item\n const currentPageLabel = store.currentPage()?.label;\n const pages = store.adapter()?.pages ?? [];\n const primaryPage = pages.find((p) => p.isPrimary) ?? pages[0];\n const isMainPage = primaryPage?.id === store.currentPage()?.id;\n if (currentPageLabel && !isMainPage) {\n const pageScope: AXPExpressionEvaluatorScope = {\n ...store.context(),\n context: {\n eval: (path: string) => get(store.context(), path),\n },\n };\n breadcrumbs.push({\n title: await resolveBreadcrumbTitleFields(\n currentPageLabel as AXPMultiLanguageString,\n pageScope,\n store.context(),\n ),\n });\n }\n\n return breadcrumbs;\n },\n\n /** Aligns view-model context with the container after revert/commit (saved baseline). */\n applySavedState(context: Record<string, unknown>) {\n const snapshot = cloneDeep(context);\n patchState(store, {\n context: snapshot,\n savedContext: snapshot,\n previousContext: snapshot,\n formDirty: false,\n });\n },\n\n async discard() {\n const saved = cloneDeep(store.savedContext());\n patchState(store, {\n context: saved,\n previousContext: saved,\n formDirty: false,\n });\n },\n\n async save(\n command: AXPExecuteCommand,\n form: AXFormComponent,\n liveContext?: Record<string, unknown>,\n ): Promise<boolean> {\n const formResult = await form.validate();\n if (!formResult.result) {\n return false;\n }\n\n const payload = liveContext ?? store.context();\n\n patchState(store, {\n status: AXPPageStatus.Submitting,\n });\n\n try {\n const result = await store.currentPage()?.execute?.(command, payload);\n\n const enableOperationToasts = await settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n if (result?.success) {\n try {\n await this.loadPage(store.currentPage()?.id, true);\n } catch {\n //\n }\n\n patchState(store, {\n previousContext: store.context(),\n savedContext: cloneDeep(store.context()),\n formDirty: false,\n });\n\n if (enableOperationToasts) {\n toastService.show({\n color: 'success',\n title: await translateService.translateAsync('@general:messages.generic.success.title'),\n content: await translateService.translateAsync('@general:messages.generic.success.description'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n\n return true;\n }\n\n const rawText = result?.message?.text;\n const errorText = rawText\n ? typeof rawText === 'string'\n ? rawText.startsWith('@')\n ? await translateService.translateAsync(rawText)\n : rawText\n : translateService.resolve(rawText)\n : await translateService.translateAsync('@general:messages.generic.error.description');\n\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:messages.generic.error.title'),\n content: errorText,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n\n return false;\n } catch (error: unknown) {\n const errorText =\n error instanceof Error\n ? error.message\n : await translateService.translateAsync('@general:messages.generic.error.description');\n\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:messages.generic.error.title'),\n content: errorText,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n\n return false;\n } finally {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n }\n },\n\n async goToListPage(): Promise<void> {\n const exitUrl = store.adapter()?.exitUrl;\n if (exitUrl) {\n await axpNavigateAppPath(router, exitUrl);\n }\n },\n };\n },\n ),\n);","//#region ---- Details View Action Shortcut Utilities ----\n\nimport type { AXPKeyboardShortcut, AXPKeyboardShortcutChord } from '@acorex/platform/core';\nimport { normalizeKeyboardShortcuts } from '@acorex/platform/core';\n\nexport type AXPDetailsViewActionShortcut = AXPKeyboardShortcutChord;\n\n/** Platform defaults for known entity detail commands when `shortcuts` is omitted on the action. */\nconst DEFAULT_ENTITY_DETAIL_ACTION_SHORTCUTS: Readonly<Record<string, readonly AXPDetailsViewActionShortcut[]>> = {\n 'delete-entity': ['ctrl+shift+delete'],\n};\n\nconst DEFAULT_FOOTER_COMMAND_SHORTCUTS: Readonly<Record<string, readonly AXPDetailsViewActionShortcut[]>> = {\n 'update-entity': ['ctrl+s'],\n discard: ['escape'],\n};\n\nconst SAVE_FOOTER_COMMAND_SUFFIX = ':Save';\nconst DISCARD_FOOTER_COMMAND_SUFFIX = ':Discard';\n\n/**\n * Returns the base workflow/command name from a composite entity action command id (`cmd&actionName`).\n */\nexport function getDetailsViewActionCommandBaseName(commandName: string | undefined): string {\n if (!commandName) {\n return '';\n }\n return commandName.split('&')[0];\n}\n\n/**\n * Resolves keyboard shortcuts for a header entity action.\n * Explicit `shortcuts` wins; pass `[]` to disable. Otherwise known commands use platform defaults.\n */\nexport function resolveDetailsViewActionShortcuts(\n commandBaseName: string,\n explicit?: readonly AXPKeyboardShortcut[],\n): AXPDetailsViewActionShortcut[] | undefined {\n if (explicit !== undefined) {\n const chords = flattenDetailsViewActionShortcuts(explicit);\n return chords.length ? chords : undefined;\n }\n\n const defaults = DEFAULT_ENTITY_DETAIL_ACTION_SHORTCUTS[commandBaseName];\n return defaults?.length ? [...defaults] : undefined;\n}\n\n/**\n * Resolves save/discard footer command shortcuts from page settings.\n */\nexport function resolveDetailsViewFooterCommandShortcuts(\n commandName: string,\n explicit?: readonly AXPKeyboardShortcut[],\n): AXPDetailsViewActionShortcut[] | undefined {\n if (explicit !== undefined) {\n const chords = flattenDetailsViewActionShortcuts(explicit);\n return chords.length ? chords : undefined;\n }\n\n const defaults = DEFAULT_FOOTER_COMMAND_SHORTCUTS[commandName];\n if (defaults?.length) {\n return [...defaults];\n }\n\n return resolvePageFooterActionDefaultShortcuts(commandName);\n}\n\n/**\n * Platform defaults for component-page footer save/discard commands (e.g. `MetaDataBuilder:Save`).\n */\nexport function resolvePageFooterActionDefaultShortcuts(\n commandName: string,\n): AXPDetailsViewActionShortcut[] | undefined {\n if (isSaveFooterCommand(commandName)) {\n return [...DEFAULT_FOOTER_COMMAND_SHORTCUTS['update-entity']];\n }\n\n if (isDiscardFooterCommand(commandName)) {\n return [...DEFAULT_FOOTER_COMMAND_SHORTCUTS['discard']];\n }\n\n return undefined;\n}\n\nexport function isSaveFooterCommand(commandName: string): boolean {\n return commandName === 'update-entity' || commandName.endsWith(SAVE_FOOTER_COMMAND_SUFFIX);\n}\n\nexport function isDiscardFooterCommand(commandName: string): boolean {\n return commandName === 'discard' || commandName.endsWith(DISCARD_FOOTER_COMMAND_SUFFIX);\n}\n\n/**\n * Resolves keyboard shortcuts for a footer action on entity detail sub-pages.\n */\nexport function resolvePageFooterActionShortcuts(\n commandName: string,\n explicit?: readonly AXPKeyboardShortcut[],\n): AXPDetailsViewActionShortcut[] | undefined {\n return resolveDetailsViewFooterCommandShortcuts(commandName, explicit);\n}\n\nfunction flattenDetailsViewActionShortcuts(\n shortcuts: readonly AXPKeyboardShortcut[],\n): AXPDetailsViewActionShortcut[] {\n const chords = normalizeKeyboardShortcuts(shortcuts).flatMap((shortcut) => shortcut.keys);\n return dedupeDetailsViewActionShortcuts(chords);\n}\n\nfunction dedupeDetailsViewActionShortcuts(\n shortcuts: readonly AXPDetailsViewActionShortcut[],\n): AXPDetailsViewActionShortcut[] {\n const seen = new Set<string>();\n const result: AXPDetailsViewActionShortcut[] = [];\n\n for (const shortcut of shortcuts) {\n const token = shortcut.trim().toLowerCase();\n if (!token || seen.has(token)) {\n continue;\n }\n seen.add(token);\n result.push(shortcut.trim());\n }\n\n return result;\n}\n\n//#endregion\n","import { AXPPageLayoutBaseComponent } from '../../layouts';\nimport { Injectable } from '@angular/core';\n\n/**\n * Registry of rendered page component instances by component key.\n * Used so page execute can delegate to the actual component instance in the view.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPPageComponentInstanceRegistryService {\n private readonly instances = new Map<string, AXPPageLayoutBaseComponent>();\n\n register(key: string, instance: AXPPageLayoutBaseComponent): void {\n this.instances.set(key, instance);\n }\n\n unregister(key: string): void {\n this.instances.delete(key);\n }\n\n get(key: string): AXPPageLayoutBaseComponent | null {\n return this.instances.get(key) ?? null;\n }\n}\n","import { AXPPageComponentRegistryService } from '@acorex/platform/layout/components';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport { ComponentRef, Directive, effect, inject, input, OnDestroy, OnInit, output, ViewContainerRef } from '@angular/core';\nimport { AXPPageComponentInstanceRegistryService } from './page-component-instance-registry.service';\n\n//#region ---- Page Component Renderer Directive ----\n\n/**\n * Directive for rendering page components dynamically\n * Similar to component-slot pattern but specifically for page components\n */\n@Directive({\n selector: '[axp-page-component-renderer]',\n standalone: true,\n})\nexport class AXPPageComponentRendererDirective implements OnInit, OnDestroy {\n componentKey = input.required<string>();\n rootContext = input<Record<string, any>>({});\n pageConfig = input<Record<string, unknown>>();\n options = input<Record<string, any>>({});\n\n /** Emitted when the component instance is registered and ready */\n componentReady = output<string>();\n\n /** Returns the dynamically mounted page component instance, if loaded. */\n getMountedPageInstance(): unknown {\n return this.componentRef?.instance ?? null;\n }\n\n private viewContainerRef = inject(ViewContainerRef);\n private pageComponentRegistry = inject(AXPPageComponentRegistryService);\n private instanceRegistry = inject(AXPPageComponentInstanceRegistryService);\n private contextStore = inject(AXPContextStore);\n private componentRef: ComponentRef<any> | null = null;\n\n #contextEffect = effect(() => {\n const context = this.rootContext();\n if (this.componentRef && context) {\n this.componentRef.setInput('rootContext', context);\n }\n });\n\n #pageConfigEffect = effect(() => {\n const config = this.pageConfig();\n if (this.componentRef && config) {\n this.componentRef.setInput('pageConfig', config);\n }\n });\n\n #optionsEffect = effect(() => {\n const options = this.options();\n if (this.componentRef && options) {\n this.componentRef.setInput('options', options);\n }\n });\n\n async ngOnInit(): Promise<void> {\n await this.loadComponent();\n }\n\n ngOnDestroy(): void {\n if (this.componentRef) {\n this.syncWizardStepContextBeforeTeardown();\n this.instanceRegistry.unregister(this.componentKey());\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n\n /** Persists page edits into the shared form context before the step component is destroyed. */\n private syncWizardStepContextBeforeTeardown(): void {\n const instance = this.componentRef?.instance;\n const partial = instance?.getWizardStepContext?.();\n if (!partial || typeof partial !== 'object') {\n return;\n }\n for (const [path, value] of Object.entries(partial as Record<string, unknown>)) {\n this.contextStore.update(path, value, { origin: 'system' });\n }\n }\n\n private async loadComponent(): Promise<void> {\n try {\n // Clear any existing component\n this.viewContainerRef.clear();\n\n // Get component loader from registry\n const loader = await this.pageComponentRegistry.find(this.componentKey());\n if (!loader) {\n console.error(`Component with key \"${this.componentKey()}\" not found in registry`);\n return;\n }\n\n // Load component type\n const ComponentType = await loader();\n\n // Create component instance\n this.componentRef = this.viewContainerRef.createComponent(ComponentType);\n this.instanceRegistry.register(this.componentKey(), this.componentRef.instance);\n\n const context = this.rootContext();\n if (context) {\n this.componentRef.setInput('rootContext', context);\n }\n\n const options = this.options();\n if (options) {\n this.componentRef.setInput('options', options);\n }\n\n const pageConfig = this.pageConfig();\n if (pageConfig) {\n this.componentRef.setInput('pageConfig', pageConfig);\n }\n\n // Notify that component is ready (allows parent to re-fetch actions)\n this.componentReady.emit(this.componentKey());\n } catch (error) {\n console.error(`Failed to load component \"${this.componentKey()}\":`, error);\n }\n }\n}\n\n//#endregion\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n OnDestroy,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\n//\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXTabsComponent, AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXPEntityCommandScope, AXPUnsavedChangesPopstateService, AXP_ENTITY_DELETED_WORKFLOW_EVENT_TYPE, type AXPEntityDeletedEventPayload } from '@acorex/platform/common';\nimport { AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, AXPPageStatus } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem, AXPBroadcastEventService, AXPContextChangeEvent, AXPDeviceService, AXPDebugService, AXPKeyboardShortcutBinding, AXPKeyboardShortcutPriority, AXPKeyboardShortcutRegistry, FORM_DIRTY_TRACE_NS, OVERLAY_DETAILS_VIEW_TRACE_NS, summarizeFormContextDirtyDiff } from '@acorex/platform/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWidgetContainerComponent, AXPWidgetCoreElement, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { ActivatedRoute } from '@angular/router';\nimport { filter, Subject, Subscription, takeUntil } from 'rxjs';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n buildNotSavedPageBadge,\n isDiscardCommand,\n} from '../../layouts';\nimport {\n getDetailsViewActionCommandBaseName,\n isDiscardFooterCommand,\n isSaveFooterCommand,\n resolveDetailsViewActionShortcuts,\n resolveDetailsViewFooterCommandShortcuts,\n resolvePageFooterActionShortcuts,\n} from './details-view-action-shortcuts.util';\nimport {\n AXPLayoutDetailsViewAction,\n AXPLayoutDetailsViewPage,\n AXPPageContentItem,\n} from './details-view.adapter';\nimport { AXPLayoutDetailsViewViewModel } from './details-view.viewmodel';\nimport { DETAILS_VIEW_PAGE_TRACE_NS } from './details-view-trace.constants';\n\n/** Registered id of the data-list inside related-entity `page-list` sidebar pages. */\nconst PAGE_LIST_TABLE_WIDGET_ID = 'page-list_table';\nimport { AXPPageComponentInstanceRegistryService } from './page-component-instance-registry.service';\nimport { AXPPageComponentRendererDirective } from './page-component-renderer.directive';\n\ninterface AXPDetailsViewActionShortcutEntry {\n command: AXPExecuteCommand;\n /** i18n key or plain label for the help dialog. */\n title: string;\n chords: string[];\n visible: boolean;\n disabled: boolean;\n}\n\n@Component({\n templateUrl: './details-view.component.html',\n styleUrl: './details-view.component.scss',\n selector: 'axp-layout-details-view',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n AXSearchBoxModule,\n AXTabsModule,\n //\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPWidgetCoreModule,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXFormModule,\n AXPPageComponentRendererDirective,\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPLayoutDetailsViewComponent,\n },\n AXPLayoutDetailsViewViewModel,\n ],\n})\nexport class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {\n //\n protected vm = inject(AXPLayoutDetailsViewViewModel);\n protected route = inject(ActivatedRoute);\n protected eventService = inject(AXPBroadcastEventService);\n protected deviceService = inject(AXPDeviceService);\n private readonly unsavedChangesPopstate = inject(AXPUnsavedChangesPopstateService);\n private readonly pageComponentInstanceRegistry = inject(AXPPageComponentInstanceRegistryService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly workflowService = inject(AXPWorkflowService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly debug = inject(AXPDebugService);\n private onSelectionChangeSubscription?: Subscription;\n /** Cancels in-flight list selection bind when the sidebar page or widget tree changes. */\n private pageListSelectionBindGeneration = 0;\n\n /** Prevents sidebar tab init events from pushing history before the first page activation completes. */\n private readonly detailsLayoutReady = signal(false);\n\n private readonly destroyed$ = new Subject<void>();\n private footerActionsGeneration = 0;\n private keyboardShortcutRegistrationGeneration = 0;\n private overlayFallbackTimer?: ReturnType<typeof setTimeout>;\n /** Page id the overlay release logic is bound to; reset on sidebar/page switch. */\n private overlayTargetPageId: string | null = null;\n /** After a page switch, wait for widget registry to clear before accepting remounted widgets. */\n private overlaySawZeroWidgetsAfterPageChange = false;\n /** Cancels in-flight overlay release when the page changes. */\n private overlayReleaseGeneration = 0;\n private overlayReleasePromise?: Promise<void>;\n\n /** Safety cap when widget ready detection does not settle. */\n private static readonly overlayMaxWaitMs = 30_000;\n\n /** Header actions with resolved shortcut chords, keyed by command name. */\n private readonly actionShortcutEntries = signal<Map<string, AXPDetailsViewActionShortcutEntry>>(new Map());\n\n /** Save/discard use live {@link AXPLayoutDetailsViewViewModel.isDirty}; other actions use evaluated `visible`. */\n private static isTruthyActionFlag(value: boolean | string | undefined | null): boolean {\n if (value === true) {\n return true;\n }\n if (value === false || value == null) {\n return false;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'false' || normalized === '0' || normalized === '') {\n return false;\n }\n if (normalized === 'true') {\n return true;\n }\n // Unevaluated template expressions must not keep footer actions visible or disabled.\n if (normalized.startsWith('{{')) {\n return false;\n }\n return true;\n }\n return Boolean(value);\n }\n\n protected form = viewChild<AXFormComponent>('form');\n protected widgetContainer = viewChild<AXPWidgetContainerComponent>(AXPWidgetContainerComponent);\n private readonly sidebarTabs = viewChild<AXTabsComponent>('sidebarTabs');\n private sidebarTabChangeSuppressed = false;\n\n /** Syncs the line indicator when the active page changes programmatically. */\n #sidebarTabsIndicatorEffect = effect(() => {\n const pages = this.vm.adapter()?.pages;\n const currentId = this.vm.currentPage()?.id;\n if (!pages?.length || !currentId) {\n return;\n }\n\n const index = pages.findIndex((page) => page.id === currentId);\n if (index < 0) {\n return;\n }\n\n untracked(() =>\n queueMicrotask(() => {\n this.debug.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'details-view', 'sidebarTabs select (sync indicator)', () => ({\n currentPageId: currentId,\n tabIndex: index,\n routerUrl: this.router.url,\n }));\n this.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(index);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }),\n );\n });\n\n /**\n * Binds list selection whenever `page-list_table` registers (including after remount).\n * `find()` / `waitForWidget()` can return a destroyed instance; registration always carries the live widget.\n */\n #pageListSelectionBindEffect = effect((onCleanup) => {\n const pageId = this.vm.currentPage()?.id;\n const isPageReady = this.vm.isPageReady();\n\n if (!pageId || this.vm.showPages() || !isPageReady || this.getActivePageComponentKey()) {\n return;\n }\n\n this.vm.currentPageContent();\n\n if (!this.pageHasEntityListWidget()) {\n return;\n }\n\n const generation = ++this.pageListSelectionBindGeneration;\n const container = this.widgetContainer();\n if (!container) {\n return;\n }\n\n const builder = container.builderService;\n\n onCleanup(() => {\n this.onSelectionChangeSubscription?.unsubscribe();\n this.onSelectionChangeSubscription = undefined;\n });\n\n const registrationSub = builder.widgetRegistered$.subscribe(({ id, widget }) => {\n if (id !== PAGE_LIST_TABLE_WIDGET_ID) {\n return;\n }\n\n this.attachSelectionToListWidget(pageId, generation, widget);\n });\n\n onCleanup(() => registrationSub.unsubscribe());\n\n const existing = builder.getWidget(PAGE_LIST_TABLE_WIDGET_ID);\n if (existing) {\n untracked(() => this.attachSelectionToListWidget(pageId, generation, existing));\n }\n });\n\n /** Clears the page overlay reactively once VM + widget hydration are both idle. */\n #overlayReleaseEffect = effect(() => {\n const showPages = this.vm.showPages();\n const pageId = this.vm.currentPage()?.id;\n const isVmBusy = this.vm.isOverlayBusy();\n const isPageReady = this.vm.isPageReady();\n const container = this.widgetContainer();\n\n this.vm.currentPageContent();\n this.vm.activeTabContent();\n this.vm.context();\n\n container?.builderService.registeredWidgetsCount();\n container?.builderService.isHydrating();\n container?.isBusy();\n container?.isWidgetsReady();\n const widgetCount = container?.builderService.registeredWidgetsCount() ?? 0;\n const widgetsBusy = container?.isBusy() ?? false;\n const widgetsReady = container?.isWidgetsReady() ?? false;\n\n untracked(() => {\n const widgetSnapshot = container?.builderService.getWidgetStateSnapshot();\n\n if (pageId !== this.overlayTargetPageId) {\n const isInitialOverlayBind = this.overlayTargetPageId == null;\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'page bind changed', () => ({\n pageId,\n previousPageId: this.overlayTargetPageId,\n isInitialOverlayBind,\n overlayReleaseGeneration: this.overlayReleaseGeneration + 1,\n }));\n this.overlayTargetPageId = pageId ?? null;\n // First bind: widgets mount without a prior page registry. Sidebar switch: require clear first.\n this.overlaySawZeroWidgetsAfterPageChange = isInitialOverlayBind;\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearOverlayFallback();\n }\n\n if (showPages) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'showPages — release overlay', () => ({ isVmBusy }));\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearOverlayFallback();\n if (!isVmBusy) {\n this.clearPageOverlay('showPages — release overlay');\n }\n return;\n }\n\n if (isVmBusy || !isPageReady || !pageId) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'waiting on VM', () => ({\n pageId,\n isVmBusy,\n isPageReady,\n }));\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearOverlayFallback();\n return;\n }\n\n if (this.getActivePageComponentKey()) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'component page — release overlay', () => ({\n componentKey: this.getActivePageComponentKey(),\n }));\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearOverlayFallback();\n this.clearPageOverlay('component page — release overlay');\n return;\n }\n\n if (!this.pageHasWidgetNodes()) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'no widget nodes — release overlay', () => ({ pageId }));\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearOverlayFallback();\n this.clearPageOverlay('no widget nodes — release overlay');\n return;\n }\n\n if (widgetCount === 0) {\n this.overlaySawZeroWidgetsAfterPageChange = true;\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'widget registry cleared (remount gate open)', () => ({ pageId }));\n }\n\n if (!this.overlaySawZeroWidgetsAfterPageChange) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'blocked: remount gate (await widgetCount=0)', () => ({\n pageId,\n widgetCount,\n ...widgetSnapshot,\n }));\n this.scheduleOverlayFallback();\n return;\n }\n\n if (!widgetsReady || widgetsBusy) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'blocked: widgets not ready', () => ({\n pageId,\n widgetsReady,\n widgetsBusy,\n overlaySawZero: this.overlaySawZeroWidgetsAfterPageChange,\n releaseInFlight: !!this.overlayReleasePromise,\n ...widgetSnapshot,\n hydratingWidgets: widgetSnapshot?.widgets?.filter((w) => w.isHydrating).map((w) => w.id),\n renderingWidgets: widgetSnapshot?.widgets?.filter((w) => w.status === 'rendering').map((w) => w.id),\n }));\n this.scheduleOverlayFallback();\n return;\n }\n\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'request overlay release', () => ({\n pageId,\n overlayReleaseGeneration: this.overlayReleaseGeneration,\n ...widgetSnapshot,\n }));\n void this.requestOverlayRelease(pageId);\n });\n });\n\n protected footerPrimaryActions = signal<AXPActionMenuItem[]>([]);\n protected footerSecondaryActions = signal<AXPActionMenuItem[]>([]);\n\n protected footerActions = computed(() => [...this.footerPrimaryActions(), ...this.footerSecondaryActions()]);\n\n protected rejectFooterCommand = computed(() => {\n if (this.vm.currentPage()?.isReadonly) {\n return null;\n }\n return this.vm.currentPage()?.settings?.commands?.reject ?? null;\n });\n\n protected acceptFooterCommand = computed(() => {\n if (this.vm.currentPage()?.isReadonly) {\n return null;\n }\n return this.vm.currentPage()?.settings?.commands?.accept ?? null;\n });\n\n protected hasSaveDiscardFooterCommands = computed(() => !!(this.rejectFooterCommand() || this.acceptFooterCommand()));\n\n /** Entity save/discard — driven live by widget/container dirty state, not evaluated action metadata. */\n protected showSaveDiscardFooter = computed(() => this.hasSaveDiscardFooterCommands() && this.liveFormIsDirty());\n\n /** Live dirty flag for widget-based entity forms (not component-hosted pages). */\n protected liveFormIsDirty = computed(() => {\n if (this.vm.currentPage()?.isReadonly || this.getActivePageComponentKey()) {\n return false;\n }\n if (this.vm.isOverlayBusy()) {\n return false;\n }\n const container = this.widgetContainer();\n if (!container?.isSavedCommitted()) {\n return false;\n }\n return container.isFormDirty();\n });\n\n protected hasVisibleFooterPrimaryActions = computed(() => {\n if (this.showSaveDiscardFooter()) {\n return true;\n }\n return this.footerPrimaryActions().some(\n (action) => !this.isSaveDiscardFooterAction(action) && this.isFooterActionVisible(action),\n );\n });\n\n protected hasVisibleFooterSecondaryActions = computed(() =>\n this.footerSecondaryActions().some((action) => this.isFooterActionVisible(action)),\n );\n\n protected isSaveDiscardFooterAction(action: AXPActionMenuItem): boolean {\n const commandName = action.command?.name;\n const acceptCommand = this.vm.currentPage()?.settings?.commands?.accept?.command?.name;\n const rejectCommand = this.vm.currentPage()?.settings?.commands?.reject?.command?.name;\n return (\n action.name === 'accept' ||\n action.name === 'reject' ||\n commandName === 'update-entity' ||\n commandName === 'discard' ||\n (!!acceptCommand && commandName === acceptCommand) ||\n (!!rejectCommand && commandName === rejectCommand)\n );\n }\n\n protected isFooterActionVisible(action: AXPActionMenuItem): boolean {\n if (this.isSaveDiscardFooterAction(action)) {\n return false;\n }\n return AXPLayoutDetailsViewComponent.isTruthyActionFlag(action.visible);\n }\n\n protected isFooterActionDisabled(action: AXPActionMenuItem): boolean {\n if (this.vm.isOverlayBusy()) {\n return true;\n }\n return AXPLayoutDetailsViewComponent.isTruthyActionFlag(action.disabled);\n }\n\n protected hasFooter = computed(() => {\n return (\n (this.hasVisibleFooterPrimaryActions() || this.hasVisibleFooterSecondaryActions()) &&\n !this.vm.currentPage()?.isReadonly\n );\n });\n\n /**\n * Re-fetches the entity adapter and reloads the active page.\n */\n protected async refreshLayout(): Promise<void> {\n this.unsavedChangesConfirm.markLeaveConfirmed();\n this.detailsLayoutReady.set(false);\n try {\n await this.vm.loadFromRoute(true);\n } finally {\n this.detailsLayoutReady.set(true);\n }\n }\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.debug.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'details-view', 'ngOnInit — before loadFromRoute', () => ({\n routerUrl: this.router.url,\n pageFromRouterUrl: this.router.parseUrl(this.router.url).queryParams['page'] ?? null,\n pageFromRouteSnapshot: this.route.snapshot.queryParamMap.get('page'),\n }));\n\n this.unsavedChangesPopstate.registerSource({\n id: 'axp-layout-details-view',\n isDirty: () => this.hasUnsavedChanges(),\n });\n this.destroyRef.onDestroy(() => this.unsavedChangesPopstate.unregisterSource('axp-layout-details-view'));\n //\n await this.vm.loadFromRoute();\n\n this.debug.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'details-view', 'ngOnInit — after loadFromRoute', () => ({\n routerUrl: this.router.url,\n currentPageId: this.vm.currentPage()?.id ?? null,\n }));\n\n this.detailsLayoutReady.set(true);\n\n void this.refreshKeyboardShortcutRegistrations(++this.keyboardShortcutRegistrationGeneration);\n\n this.eventService\n //TODO: Use the constant from the entity module\n .listen('entity:refresh-layout')\n .pipe(takeUntil(this.destroyed$))\n .subscribe((e) => {\n if ((e.data as any).name == this.vm.adapter()?.name) {\n this.refreshLayout();\n }\n });\n\n this.workflowService.events$\n .pipe(\n filter((event) => event.type === AXP_ENTITY_DELETED_WORKFLOW_EVENT_TYPE),\n takeUntil(this.destroyed$),\n )\n .subscribe((event) => {\n void this.handleEntityDeleted(event.payload as AXPEntityDeletedEventPayload | undefined);\n });\n }\n\n /** Navigates to {@link AXPLayoutDetailsViewAdapter.exitUrl} when the open record was deleted. */\n private async handleEntityDeleted(payload: AXPEntityDeletedEventPayload | undefined): Promise<void> {\n if (!payload?.entity || !payload.ids?.length) {\n return;\n }\n\n const adapterName = this.vm.adapter()?.name;\n const recordId = this.vm.context()?.['id'];\n if (!adapterName || recordId == null) {\n return;\n }\n\n const deletedIds = payload.ids.map((id) => String(id));\n if (payload.entity !== adapterName || !deletedIds.includes(String(recordId))) {\n return;\n }\n\n this.unsavedChangesConfirm.markLeaveConfirmed();\n\n if (this.tabNavigation.effectiveMode() === 'tabular') {\n const tabKey = this.getPageTabKey();\n await this.vm.goToListPage();\n if (tabKey) {\n this.unsavedChangesConfirm.markLeaveConfirmed();\n await this.tabNavigation.closeTab(tabKey);\n }\n return;\n }\n\n await this.vm.goToListPage();\n }\n\n ngOnDestroy(): void {\n this.onSelectionChangeSubscription?.unsubscribe();\n ++this.keyboardShortcutRegistrationGeneration;\n this.clearOverlayFallback();\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearPageOverlay('ngOnDestroy');\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n #formDirtyEffect = effect(() => {\n if (this.vm.currentPage()?.isReadonly || this.getActivePageComponentKey()) {\n return;\n }\n if (this.vm.isOverlayBusy()) {\n return;\n }\n\n const container = this.widgetContainer();\n if (!container?.isSavedCommitted()) {\n if (this.vm.formDirty()) {\n untracked(() => this.vm.setFormDirty(false));\n }\n return;\n }\n\n const isDirty = container.isFormDirty();\n if (this.vm.formDirty() === isDirty) {\n return;\n }\n\n untracked(() => {\n this.debug.trace(FORM_DIRTY_TRACE_NS, 'details-view', 'formDirty effect', () => ({\n isDirty,\n vmFormDirty: this.vm.formDirty(),\n }));\n this.vm.setFormDirty(isDirty);\n this.recompute();\n });\n });\n\n /** Refresh title badge (Not Saved) when dirty state changes. */\n #headerBadgeEffect = effect(() => {\n this.liveFormIsDirty();\n this.vm.currentPage()?.id;\n this.isActivePageComponentDirty();\n untracked(() => this.recompute());\n });\n\n #FooterActionsEffect = effect(() => {\n const generation = ++this.footerActionsGeneration;\n this.updateTrigger();\n this.liveFormIsDirty();\n this.vm.isOverlayBusy();\n void this.refreshFooterActions(generation);\n });\n\n #keyboardShortcutsEffect = effect(() => {\n const generation = ++this.keyboardShortcutRegistrationGeneration;\n this.updateTrigger();\n this.liveFormIsDirty();\n this.isActivePageComponentDirty();\n this.vm.isOverlayBusy();\n this.vm.currentPage()?.id;\n untracked(() => void this.refreshKeyboardShortcutRegistrations(generation));\n });\n\n private async refreshFooterActions(generation: number): Promise<void> {\n const [footerPrimaryActions, footerSecondaryActions] = await Promise.all([\n this.getFooterPrimaryActions(),\n this.getFooterSecondaryActions(),\n ]);\n if (generation !== this.footerActionsGeneration) {\n return;\n }\n this.footerPrimaryActions.set(footerPrimaryActions);\n this.footerSecondaryActions.set(footerSecondaryActions);\n }\n\n /** Whether the active page hosts a related-entity list (`page-list` widget). */\n private pageHasEntityListWidget(): boolean {\n return this.vm.currentPageContent().some((item) => {\n if ('type' in item && item.type === 'component') {\n return false;\n }\n return item.name === 'page-list';\n });\n }\n\n /** Subscribes to the live data-list selection stream for Selected-scope header actions. */\n private attachSelectionToListWidget(pageId: string, generation: number, widget: AXPWidgetCoreElement): void {\n if (generation !== this.pageListSelectionBindGeneration || this.vm.currentPage()?.id !== pageId) {\n return;\n }\n\n const selectionStream = widget.api()['onSelectionChange'];\n if (!selectionStream || typeof (selectionStream as Subject<unknown[]>).subscribe !== 'function') {\n return;\n }\n\n this.onSelectionChangeSubscription?.unsubscribe();\n this.onSelectionChangeSubscription = (selectionStream as Subject<unknown[]>).subscribe((rows: unknown[]) => {\n this.vm.updatePageSelectedRows(rows);\n this.recompute();\n });\n }\n\n protected handleOnContextChanged(e: AXPContextChangeEvent) {\n if (\n !this.vm.currentPage()?.isReadonly &&\n !this.getActivePageComponentKey() &&\n this.widgetContainer()?.isSavedCommitted()\n ) {\n const isDirty = e.isFormDirty ?? false;\n const container = this.widgetContainer();\n this.debug.trace(FORM_DIRTY_TRACE_NS, 'details-view', 'handleOnContextChanged', () => ({\n isFormDirty: isDirty,\n vmFormDirty: this.vm.formDirty(),\n changePath: e.path,\n changeOrigin: e.origin,\n userEditedSinceCommit: container?.contextService.hasUserEditedSinceCommit(),\n dirtyPaths: container\n ? summarizeFormContextDirtyDiff(\n container.contextService.data() as Record<string, unknown>,\n container.contextService.saved() as Record<string, unknown>,\n )\n : [],\n }));\n if (this.vm.formDirty() !== isDirty) {\n this.vm.setFormDirty(isDirty);\n }\n }\n this.recompute();\n }\n\n private getLiveFormContext(): Record<string, unknown> {\n const container = this.widgetContainer();\n return (container?.contextService.data() ?? this.vm.context()) as Record<string, unknown>;\n }\n\n /** Whether the active page renders widget nodes (not only hosted components). */\n private pageHasWidgetNodes(): boolean {\n const pageWidgets = this.vm.currentPageContent();\n if (pageWidgets.some((item) => !('type' in item && item.type === 'component'))) {\n return true;\n }\n return this.vm.activeTabContent().length > 0;\n }\n\n /** Clears all overlay loading tasks once the page (or hosted view) is ready. */\n private clearPageOverlay(reason: string): void {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', reason, () => ({\n taskCount: this.layoutService.overlayTaskCount(),\n }));\n this.layoutService.clearOverlayLoading();\n }\n\n private scheduleOverlayFallback(): void {\n if (this.overlayFallbackTimer) {\n return;\n }\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'schedule fallback timer', () => ({\n timeoutMs: AXPLayoutDetailsViewComponent.overlayMaxWaitMs,\n pageId: this.overlayTargetPageId,\n }));\n this.overlayFallbackTimer = setTimeout(() => {\n this.overlayFallbackTimer = undefined;\n const isOverlayLoading = this.layoutService.isOverlayLoading();\n const isVmBusy = this.vm.isOverlayBusy();\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'fallback timer fired', () => ({\n isOverlayLoading,\n isVmBusy,\n pageId: this.overlayTargetPageId,\n }));\n if (!isOverlayLoading) {\n return;\n }\n if (!isVmBusy) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'fallback forcing overlay off', () => ({\n taskCount: this.layoutService.overlayTaskCount(),\n }));\n this.clearPageOverlay('fallback forcing overlay off');\n }\n }, AXPLayoutDetailsViewComponent.overlayMaxWaitMs);\n }\n\n private clearOverlayFallback(): void {\n if (this.overlayFallbackTimer) {\n clearTimeout(this.overlayFallbackTimer);\n this.overlayFallbackTimer = undefined;\n }\n }\n\n /**\n * Hides overlay after the widget container reports continuous idle (same gate as saved baseline).\n */\n private requestOverlayRelease(pageId: string | null): void {\n if (this.overlayReleasePromise) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release skipped — already in flight', () => ({ pageId }));\n return;\n }\n\n const generation = this.overlayReleaseGeneration;\n const container = this.widgetContainer();\n if (!container) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release skipped — no container', () => ({ pageId }));\n this.scheduleOverlayFallback();\n return;\n }\n\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'waitUntilSettled started', () => ({ pageId, generation }));\n\n this.overlayReleasePromise = container\n .waitUntilSettled()\n .then(() => {\n const latest = this.widgetContainer();\n const snapshot = latest?.builderService.getWidgetStateSnapshot();\n\n if (generation !== this.overlayReleaseGeneration) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release aborted — generation mismatch', () => ({\n pageId,\n generation,\n currentGeneration: this.overlayReleaseGeneration,\n }));\n return;\n }\n if (pageId !== this.overlayTargetPageId || pageId !== this.vm.currentPage()?.id) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release aborted — page changed', () => ({\n pageId,\n overlayTargetPageId: this.overlayTargetPageId,\n currentPageId: this.vm.currentPage()?.id,\n }));\n return;\n }\n if (this.vm.isOverlayBusy()) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release aborted — VM still busy', () => ({ pageId }));\n return;\n }\n\n if (!latest?.isWidgetsReady() || latest.isBusy()) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release aborted — widgets not ready after settle', () => ({\n pageId,\n widgetsReady: latest?.isWidgetsReady(),\n widgetsBusy: latest?.isBusy(),\n ...snapshot,\n }));\n return;\n }\n\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release overlay OFF', () => ({\n pageId,\n generation,\n taskCount: this.layoutService.overlayTaskCount(),\n ...snapshot,\n }));\n this.clearOverlayFallback();\n this.clearPageOverlay('widgets settled — release overlay');\n })\n .finally(() => {\n this.overlayReleasePromise = undefined;\n });\n }\n\n private async finalizeSave(): Promise<void> {\n const container = this.widgetContainer();\n if (!container) {\n this.vm.setFormDirty(false);\n return;\n }\n\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'finalizeSave overlay ON');\n this.layoutService.setOverlayLoading(true);\n try {\n const savedContext = this.vm.context() as Record<string, unknown>;\n await container.replaceContext(savedContext);\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n if (!this.getActivePageComponentKey()) {\n await container.settleSavedBaseline();\n }\n } finally {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'finalizeSave overlay OFF');\n this.layoutService.setOverlayLoading(false);\n }\n }\n\n private finalizeDiscard(): void {\n this.debug.trace(FORM_DIRTY_TRACE_NS, 'details-view', 'finalizeDiscard');\n const container = this.widgetContainer();\n if (container) {\n container.revertAndSettle();\n const saved = container.contextService.saved() as Record<string, unknown>;\n this.vm.applySavedState(saved);\n return;\n }\n\n void this.vm.discard();\n }\n\n /** Reverts widget form state and view-model context to the last saved baseline. */\n private async discardUnsavedChanges(): Promise<void> {\n this.finalizeDiscard();\n this.recompute();\n }\n\n /**\n * `ax-tabs` selects on click before we can confirm. Revert synchronously, then confirm + switch.\n */\n protected handleSidebarTabChanged(event: AXTabStripChangedEvent): void {\n if (!this.detailsLayoutReady() || this.sidebarTabChangeSuppressed) {\n return;\n }\n\n const pages = this.vm.adapter()?.pages ?? [];\n const target = pages[event.index];\n const currentId = this.vm.currentPage()?.id;\n\n if (!currentId || !target || target.id === currentId) {\n return;\n }\n\n this.debug.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'details-view', 'handleSidebarTabChanged', () => ({\n routerUrl: this.router.url,\n targetPageId: target.id,\n currentPageId: currentId ?? null,\n tabIndex: event.index,\n }));\n\n const activeIndex = pages.findIndex((page) => page.id === currentId);\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.completePageSwitch(target);\n }\n\n protected async handleSelectPage(page: AXPLayoutDetailsViewPage) {\n if (page.id === this.vm.currentPage()?.id) {\n return;\n }\n\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n this.vm.setCurrentPage(page);\n }\n\n private async completePageSwitch(page: AXPLayoutDetailsViewPage): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n this.vm.setCurrentPage(page);\n }\n\n protected async getAllPrimaryActions(): Promise<AXPLayoutDetailsViewAction[]> {\n if (!this.vm.showPages()) {\n const [primaryActions, pagePrimaryActions] = await Promise.all([\n this.vm.primaryActions(),\n this.vm.currentPagePrimaryActions(),\n ]);\n return [...primaryActions, ...pagePrimaryActions];\n } else {\n return [];\n }\n }\n\n public override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllPrimaryActions()).filter((a) => {\n return (\n a.priority == 'primary' &&\n (((a as any).scope == AXPEntityCommandScope.Selected && this.vm.currentPageSelectedRows().length) ||\n (((a as any).scope == AXPEntityCommandScope.TypeLevel || !(a as any).scope) &&\n a.zone != 'footer' &&\n !this.vm.currentPageSelectedRows().length))\n );\n });\n }\n\n protected async getFooterPrimaryActions(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllPrimaryActions()).filter((item) => item.zone == 'footer');\n }\n\n protected async getAllSecondaryActions(): Promise<AXPLayoutDetailsViewAction[]> {\n if (!this.vm.showPages()) {\n const [secondaryActions, pageSecondaryActions] = await Promise.all([\n this.vm.secondaryActions(),\n this.vm.currentPageSecondaryActions(),\n ]);\n return [...secondaryActions, ...pageSecondaryActions];\n } else {\n return [];\n }\n }\n\n public override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllSecondaryActions()).filter((item) => item.zone == 'header');\n }\n\n protected async getFooterSecondaryActions(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllSecondaryActions()).filter((item) => item.zone == 'footer');\n }\n\n protected override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return (await this.vm.breadcrumbs()) ?? [];\n }\n\n protected override async getPageTitle(): Promise<AXPMultiLanguageString> {\n return this.vm.getPageTitle();\n }\n\n override async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n return this.vm.getPageDescription();\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n return this.vm.getBackButton();\n }\n\n override hasUnsavedChanges(): boolean {\n return this.shouldPromptLeave();\n }\n\n override async getPageBadge(): Promise<AXPBadge | null> {\n if (this.vm.currentPage()?.isReadonly) {\n return null;\n }\n\n const componentInstance = this.getActivePageComponentInstance();\n if (componentInstance) {\n return componentInstance.resolvePageBadge();\n }\n\n if (!this.liveFormIsDirty()) {\n return null;\n }\n\n return buildNotSavedPageBadge(this.translateService, this.settingsService);\n }\n\n override async getPageStatus(): Promise<AXPPageStatus | null> {\n return this.vm.getPageStatus();\n }\n\n /**\n * Get entity data for status chip component\n */\n getEntityData(): Record<string, any> | null {\n return this.vm.context() ?? null;\n }\n\n override async onBackButtonClick(): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n // When back button is clicked in small layout, go back to page list\n if (!this.vm.showPages() && this.vm.adapter()?.pages?.length! > 1) {\n this.vm.setCurrentPage(null);\n } else {\n this.vm.goToListPage();\n }\n }\n\n //#region ---- Leave Page Gate ----\n\n /**\n * Router guard hook — same unsaved-changes confirm as dialog builder {@link confirmCloseWhenDirty}.\n */\n async canDeactivate(): Promise<boolean> {\n if (this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return true;\n }\n\n return this.confirmLeaveIfDirty();\n }\n\n /** Background tab close — confirm without discarding (the cached instance is destroyed). */\n override onBeforeTabClose(): Promise<boolean> {\n if (this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return Promise.resolve(true);\n }\n\n return this.unsavedChangesConfirm.confirmIfDirty(this.shouldPromptLeave(), {\n approveLeaveOnConfirm: false,\n });\n }\n\n /** Active entity component page instance, when the current details sub-page is component-based. */\n private getActivePageComponentInstance(): AXPPageLayoutBaseComponent | null {\n const componentKey = this.getActivePageComponentKey();\n if (!componentKey) {\n return null;\n }\n return this.pageComponentInstanceRegistry.get(componentKey);\n }\n\n /** Component key for the current details sub-page, when content is component-based. */\n private getActivePageComponentKey(): string | null {\n const content = this.vm.currentPage()?.content;\n if (!content?.length) {\n return null;\n }\n for (const item of content) {\n if (AXPLayoutDetailsViewComponent.isComponentPageContent(item)) {\n return item.componentKey;\n }\n }\n return null;\n }\n\n private static isComponentPageContent(\n item: AXPPageContentItem,\n ): item is { type: 'component'; componentKey: string; pageConfig?: Record<string, unknown> } {\n return 'type' in item && item.type === 'component';\n }\n\n protected pageContentTrackKey(item: AXPPageContentItem, index: number): string {\n const pageId = this.vm.currentPage()?.id ?? 'unknown';\n\n if (AXPLayoutDetailsViewComponent.isComponentPageContent(item)) {\n return `${pageId}:component:${item.componentKey}`;\n }\n\n return `${pageId}:${item.name ?? `widget:${index}`}`;\n }\n\n /** Whether the active component-based entity page has unsaved edits. */\n private isActivePageComponentDirty(): boolean {\n return this.getActivePageComponentInstance()?.hasUnsavedChanges() ?? false;\n }\n\n /**\n * Widget-form dirty state for leave guards (popstate, canDeactivate).\n * Unlike {@link liveFormIsDirty}, does not suppress dirty while overlay is busy.\n */\n private hasWidgetFormUnsavedChanges(): boolean {\n if (this.getActivePageComponentKey()) {\n return false;\n }\n\n const container = this.widgetContainer();\n if (!container) {\n return this.vm.formDirty();\n }\n\n if (container.isSavedCommitted()) {\n return container.isFormDirty();\n }\n\n return container.contextService.hasUserEditedSinceCommit() || this.vm.formDirty();\n }\n\n /** Whether the current details page has user-origin unsaved edits (form or component page). */\n private shouldPromptLeave(): boolean {\n if (this.vm.currentPage()?.isReadonly) {\n return false;\n }\n\n if (this.isActivePageComponentDirty()) {\n return true;\n }\n\n return this.hasWidgetFormUnsavedChanges();\n }\n\n /** Single gate for leaving the page or switching details sub-pages when dirty. */\n private async confirmLeaveIfDirty(): Promise<boolean> {\n const shouldPrompt = this.shouldPromptLeave();\n const confirmed = await this.unsavedChangesConfirm.confirmIfDirty(shouldPrompt);\n if (confirmed && shouldPrompt) {\n await this.discardUnsavedChanges();\n }\n return confirmed;\n }\n\n //#endregion\n\n //#region ---- Command Execution ----\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (!this.vm.adapter()) {\n return;\n }\n\n const acceptCommand = this.vm.currentPage()?.settings?.commands?.accept?.command.name;\n const rejectCommand = this.vm.currentPage()?.settings?.commands?.reject?.command.name;\n\n if (command.name == acceptCommand) {\n const saved = await this.vm.save(command, this.form()!, this.getLiveFormContext());\n if (saved) {\n await this.finalizeSave();\n }\n this.recompute();\n return;\n }\n\n if (command.name == rejectCommand) {\n await this.discardUnsavedChanges();\n return;\n }\n\n // Handle status update command\n if (command.name === 'update-status') {\n const transition = command.options?.['transition'];\n if (transition?.toStatus?.name) {\n const status = await this.vm.getPageStatus();\n if (status?.dataPath) {\n // Update entity context with new status value\n const entity = this.vm.context();\n if (entity) {\n entity[status.dataPath] = transition.toStatus.name;\n this.vm.updateContext(entity);\n this.recompute();\n }\n }\n }\n return;\n }\n\n // Get all actions\n const [adapterPrimaryActions, adapterSecondaryActions, pagePrimaryActions, pageSecondaryActions] =\n await Promise.all([\n this.vm.primaryActions(),\n this.vm.secondaryActions(),\n this.vm.currentPagePrimaryActions(),\n this.vm.currentPageSecondaryActions(),\n ]);\n\n // Combine adapter actions (primary + secondary)\n const adapterActions = [...adapterPrimaryActions, ...adapterSecondaryActions];\n\n // Combine current page actions (primary + secondary)\n const pageActions = [...pagePrimaryActions, ...pageSecondaryActions];\n\n const commandExistsInActions = (actions: AXPLayoutDetailsViewAction[], commandName: string): boolean => {\n const check = (list: AXPLayoutDetailsViewAction[] | undefined): boolean => {\n if (!Array.isArray(list) || list.length === 0) return false;\n return list.some(\n (action) =>\n action?.command?.name === commandName ||\n (Array.isArray(action?.items) && check(action.items as AXPLayoutDetailsViewAction[])),\n );\n };\n return check(actions);\n };\n\n // Check if command exists in adapter actions first\n if (commandExistsInActions(adapterActions, command.name)) {\n await this.vm.adapter()?.execute?.(command, this.vm.context());\n }\n // Check if command exists in current page actions\n else if (commandExistsInActions(pageActions, command.name)) {\n await this.vm\n .currentPage()\n ?.execute?.(command, this.vm.pageSelectedRows().length ? this.vm.pageSelectedRows() : this.vm.context());\n await this.syncDirtyStateAfterPageComponentCommand(command);\n }\n }\n\n /**\n * After a component-based page command (e.g. custom discard/save), align view-model dirty\n * state and widget context with the hosted page when it no longer reports unsaved changes.\n */\n private async syncDirtyStateAfterPageComponentCommand(command: AXPExecuteCommand): Promise<void> {\n const rejectCommand = this.vm.currentPage()?.settings?.commands?.reject?.command?.name;\n\n await this.waitForComponentDirtySettle();\n\n if (!this.getActivePageComponentKey()) {\n return;\n }\n\n if (isDiscardCommand(command.name, rejectCommand)) {\n await this.discardUnsavedChanges();\n return;\n }\n\n if (!this.isActivePageComponentDirty()) {\n const container = this.widgetContainer();\n if (container) {\n await container.settleSavedBaseline();\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n } else {\n this.vm.setFormDirty(false);\n }\n }\n\n this.recompute();\n }\n\n /** Waits for builder/effect microtasks to finish after a component page command. */\n private waitForComponentDirtySettle(): Promise<void> {\n return new Promise((resolve) => {\n queueMicrotask(() => {\n requestAnimationFrame(() => resolve());\n });\n });\n }\n\n //#endregion\n\n //#region ---- Keyboard Shortcuts ----\n\n private async refreshKeyboardShortcutRegistrations(generation: number): Promise<void> {\n const entries = await this.collectActionShortcutEntries();\n if (generation !== this.keyboardShortcutRegistrationGeneration || this.destroyed$.closed) {\n return;\n }\n\n this.actionShortcutEntries.set(entries);\n this.registerCoreKeyboardShortcuts();\n this.registerActionKeyboardShortcuts(entries);\n }\n\n /** i18n scope label for the active details sub-page shortcut group in the help dialog. */\n private getKeyboardShortcutScope(): string {\n const page = this.vm.currentPage();\n if (page?.isPrimary) {\n return '@general:keyboard-shortcuts.groups.entity-details';\n }\n\n const label = page?.label;\n if (typeof label === 'string' && label.length > 0) {\n return label;\n }\n\n return page?.id ?? '@general:keyboard-shortcuts.groups.entity-details';\n }\n\n /** Primary overview page backed by the entity widget form (not a component-hosted sub-page). */\n private isWidgetFormPrimaryPage(): boolean {\n return !!this.vm.currentPage()?.isPrimary && !this.getActivePageComponentKey();\n }\n\n private registerDetailsViewShortcutScope(id: string, shortcuts: AXPKeyboardShortcutBinding[]): void {\n const scope = this.getKeyboardShortcutScope();\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n elementRef: this.elementRef,\n id,\n priority: AXPKeyboardShortcutPriority.Page,\n scope,\n shortcuts,\n });\n }\n\n private async collectActionShortcutEntries(): Promise<Map<string, AXPDetailsViewActionShortcutEntry>> {\n const map = new Map<string, AXPDetailsViewActionShortcutEntry>();\n\n if (this.vm.showPages()) {\n return map;\n }\n\n const includeAdapterActions = this.isWidgetFormPrimaryPage();\n const [adapterPrimaryActions, adapterSecondaryActions, pagePrimaryActions, pageSecondaryActions] =\n await Promise.all([\n includeAdapterActions ? this.vm.primaryActions() : Promise.resolve([]),\n includeAdapterActions ? this.vm.secondaryActions() : Promise.resolve([]),\n this.vm.currentPagePrimaryActions(),\n this.vm.currentPageSecondaryActions(),\n ]);\n\n for (const action of [\n ...adapterPrimaryActions,\n ...adapterSecondaryActions,\n ...pagePrimaryActions,\n ...pageSecondaryActions,\n ]) {\n const zone = action.zone ?? 'header';\n if (zone !== 'header' && zone !== 'footer') {\n continue;\n }\n\n if (zone === 'footer' && this.isWidgetFormPrimaryPage() && this.isSaveDiscardFooterAction(action)) {\n continue;\n }\n\n if (zone === 'header' && this.isSaveDiscardFooterAction(action)) {\n continue;\n }\n\n const commandName = action.command?.name;\n const command = action.command;\n if (!commandName || !command) {\n continue;\n }\n\n const commandBaseName = getDetailsViewActionCommandBaseName(commandName);\n const chords =\n zone === 'footer'\n ? resolvePageFooterActionShortcuts(commandBaseName, action.shortcuts)\n : resolveDetailsViewActionShortcuts(commandBaseName, action.shortcuts);\n if (!chords?.length) {\n continue;\n }\n\n map.set(commandName, {\n command,\n title: typeof action.title === 'string' ? action.title : '',\n chords,\n visible: this.isShortcutActionAvailable(action),\n disabled: AXPLayoutDetailsViewComponent.isTruthyActionFlag(action.disabled),\n });\n }\n\n return map;\n }\n\n private isShortcutActionAvailable(action: AXPLayoutDetailsViewAction): boolean {\n if (AXPLayoutDetailsViewComponent.isTruthyActionFlag((action as { hidden?: boolean | string }).hidden)) {\n return false;\n }\n if (action.visible !== undefined && !AXPLayoutDetailsViewComponent.isTruthyActionFlag(action.visible)) {\n return false;\n }\n return true;\n }\n\n /** Whether save/discard core shortcuts are listed in the help dialog (widget overview page only). */\n private isCoreSaveShortcutAvailable(): boolean {\n return this.isWidgetFormPrimaryPage() && !this.vm.currentPage()?.isReadonly && !!this.acceptFooterCommand();\n }\n\n private isCoreDiscardShortcutAvailable(): boolean {\n return this.isWidgetFormPrimaryPage() && !this.vm.currentPage()?.isReadonly && !!this.rejectFooterCommand();\n }\n\n private canExecuteSaveShortcut(): boolean {\n if (this.vm.currentPage()?.isReadonly || this.vm.isOverlayBusy()) {\n return false;\n }\n if (!this.acceptFooterCommand()) {\n return false;\n }\n return this.shouldPromptLeave();\n }\n\n private canExecuteDiscardShortcut(): boolean {\n if (this.vm.currentPage()?.isReadonly || this.vm.isOverlayBusy()) {\n return false;\n }\n if (this.unsavedChangesConfirm.isConfirmPending()) {\n return false;\n }\n if (!this.rejectFooterCommand()) {\n return false;\n }\n return this.shouldPromptLeave();\n }\n\n private async executeDiscardViaShortcut(rejectCommandName: string): 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.execute({ name: rejectCommandName });\n }\n\n private async executeActionShortcut(entry: AXPDetailsViewActionShortcutEntry): Promise<void> {\n const commandName = entry.command.name;\n if (isDiscardFooterCommand(commandName)) {\n if (this.vm.currentPage()?.isReadonly || this.vm.isOverlayBusy()) {\n return;\n }\n if (this.unsavedChangesConfirm.isConfirmPending()) {\n return;\n }\n if (!this.shouldPromptLeave()) {\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\n await this.execute(entry.command);\n }\n\n private isActionShortcutActive(entryId: string): boolean {\n if (this.vm.currentPage()?.isReadonly || this.vm.isOverlayBusy()) {\n return false;\n }\n\n const entry = this.actionShortcutEntries().get(entryId);\n if (!entry) {\n return false;\n }\n\n return entry.visible && !entry.disabled;\n }\n\n private registerCoreKeyboardShortcuts(): void {\n if (!this.isWidgetFormPrimaryPage()) {\n this.registerDetailsViewShortcutScope('layout-details-view-core', []);\n return;\n }\n\n const accept = this.vm.currentPage()?.settings?.commands?.accept;\n const reject = this.vm.currentPage()?.settings?.commands?.reject;\n const acceptCommandName = accept?.command.name ?? 'update-entity';\n const rejectCommandName = reject?.command.name ?? 'discard';\n\n const saveKeys = resolveDetailsViewFooterCommandShortcuts(acceptCommandName, accept?.shortcuts);\n const discardKeys = resolveDetailsViewFooterCommandShortcuts(rejectCommandName, reject?.shortcuts);\n const scope = this.getKeyboardShortcutScope();\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n if (saveKeys?.length && this.isCoreSaveShortcutAvailable()) {\n shortcuts.push({\n keys: saveKeys,\n title: accept?.title ?? '@general:actions.save.title',\n group: scope,\n allowInEditableFields: true,\n when: () => this.canExecuteSaveShortcut(),\n handler: () => {\n void this.execute({ name: acceptCommandName });\n },\n });\n }\n\n if (discardKeys?.length && this.isCoreDiscardShortcutAvailable()) {\n shortcuts.push({\n keys: discardKeys,\n title: reject?.title ?? '@general:actions.discard.title',\n group: scope,\n allowInEditableFields: true,\n when: () => this.canExecuteDiscardShortcut(),\n handler: () => {\n void this.executeDiscardViaShortcut(rejectCommandName);\n },\n });\n }\n\n this.registerDetailsViewShortcutScope('layout-details-view-core', shortcuts);\n }\n\n private registerActionKeyboardShortcuts(entries: Map<string, AXPDetailsViewActionShortcutEntry>): void {\n const scope = this.getKeyboardShortcutScope();\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n for (const [entryId, entry] of entries) {\n for (const chord of entry.chords) {\n shortcuts.push({\n keys: [chord],\n title: entry.title,\n group: scope,\n allowInEditableFields: entry.command.name ? isSaveFooterCommand(entry.command.name) || isDiscardFooterCommand(entry.command.name) : false,\n when: () => this.isActionShortcutActive(entryId),\n handler: () => {\n if (!this.isActionShortcutActive(entryId)) {\n return;\n }\n void this.executeActionShortcut(entry);\n },\n });\n }\n }\n\n this.registerDetailsViewShortcutScope('layout-details-view-actions', shortcuts);\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n @if (vm.adapter()?.pages?.length! > 1 && vm.isLarge()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n formatService.format(\n vm.showPages() ? (vm.adapter()?.title ?? '') : (vm.adapter()?.label ?? ''),\n 'string',\n vm.rootContext()\n )\n | translate\n | async\n }}</axp-layout-title>\n <axp-layout-description>{{\n formatService.format(vm.adapter()?.description ?? '', 'string', vm.rootContext()) | translate | async\n }}</axp-layout-description>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs #sidebarTabs class=\"axp-vertical-tabs\" [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\">\n @for (item of vm.adapter()?.pages; track item.id) {\n <ax-tab-item [key]=\"item.id\"\n [text]=\"(formatService.format(item.label, 'string', vm.rootContext()) | translate | async)!\"\n [active]=\"vm.currentPage()?.id === item.id\">\n <ax-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n <!-- Content Section -->\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-4\">\n @if (vm.showPages()) {\n <axp-layout-list class=\"ax-w-full\">\n @for (item of vm.adapter()?.pages; track $index) {\n <axp-layout-list-item (click)=\"handleSelectPage(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"ax-text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"ax-font-semibold\">{{\n formatService.format(item.label, 'string', vm.rootContext()) | translate | async\n }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"ax-text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n } @else {\n <ax-form class=\"ax-h-full ax-w-full\" #form>\n <axp-widgets-container #widgetsContainerRef [context]=\"vm.context()\"\n (onContextChanged)=\"handleOnContextChanged($event)\">\n <div class=\"ax-flex ax-flex-col ax-w-full ax-gap-4 ax-h-full\">\n @for (item of vm.currentPageContent(); track pageContentTrackKey($any(item), $index)) {\n @if ('type' in item && item.type === 'component') {\n <!-- Component-based content -->\n <div axp-page-component-renderer [componentKey]=\"$any(item).componentKey\" [rootContext]=\"vm.rootContext()\"\n [pageConfig]=\"$any(item).pageConfig\" [options]=\"$any(item).options\" (componentReady)=\"recompute()\"></div>\n } @else {\n <!-- Widget-based content -->\n <ng-container axp-widget-renderer [node]=\"$any(item)\" [mode]=\"$any(item).mode ?? 'view'\"></ng-container>\n }\n }\n @if (vm.currentPage()?.tabs?.length) {\n <div class=\"axp-horizontal-tabs\">\n <ax-tabs [location]=\"'bottom'\" [fitParent]=\"false\" look=\"classic\">\n @for (tab of vm.currentPageTabs(); track $index) {\n <ax-tab-item (onClick)=\"vm.setCurrentTab(tab)\" [text]=\"(tab.title | translate | async)!\"\n [active]=\"vm.currentTab()?.id === tab.id\">\n <ax-prefix>\n <ax-icon icon=\"far ${{ tab.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n <div class=\"content\">\n @if (vm.currentTab()) {\n @for (content of vm.activeTabContent(); track content.name) {\n <ng-container axp-widget-renderer [node]=\"content\" [mode]=\"content.mode ?? 'view'\">\n </ng-container>\n }\n }\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n }\n </axp-page-content>\n\n <!-- Footer Section -->\n @if (hasFooter()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <!-- secondary footer actions -->\n @if (hasVisibleFooterSecondaryActions()) {\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\" [color]=\"'default'\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (action of footerSecondaryActions(); track $index) {\n @if (isFooterActionVisible(action)) {\n <ax-button-item [text]=\"(t(action.title) | async)!\" [color]=\"action.color\"\n [disabled]=\"isFooterActionDisabled(action)\" (onClick)=\"execute(action.command!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ action.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (action.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n\n @if (hasVisibleFooterPrimaryActions()) {\n @if (showSaveDiscardFooter()) {\n @if (rejectFooterCommand(); as reject) {\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isOverlayBusy()\"\n [text]=\"(t(reject.title) | async)!\" [look]=\"'solid'\" [color]=\"reject.color\" (onClick)=\"execute(reject.command)\">\n <ax-prefix>\n <i class=\"{{ reject.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n @if (acceptFooterCommand(); as accept) {\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isOverlayBusy()\"\n [text]=\"(t(accept.title) | async)!\" [look]=\"'solid'\" [color]=\"accept.color\" (onClick)=\"execute(accept.command)\">\n <ax-prefix>\n <i class=\"{{ accept.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n }\n @for (action of footerPrimaryActions(); track $index) {\n @if (isFooterActionVisible(action)) {\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"isFooterActionDisabled(action)\"\n [text]=\"(t(action.title) | async)!\" [look]=\"'solid'\" [color]=\"action.color\"\n (onClick)=\"execute(action.command!)\">\n <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n @if (action?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of action?.items; track $index) {\n @if (isFooterActionVisible(sub)) {\n <ax-button-item [text]=\"(t(sub.title) | async)!\" [color]=\"sub.color\"\n [disabled]=\"isFooterActionDisabled(sub)\" (onClick)=\"execute(sub.command!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n }\n }\n }\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>","import { createUnsavedChangesCanDeactivateGuard } from '@acorex/platform/common';\nimport { AXPLayoutDetailsViewComponent } from './details-view.component';\n\n//#region ---- Details View Can Deactivate Guard ----\n\n/**\n * Prompts for unsaved changes before leaving the entity details route (breadcrumbs, menu, back to list).\n */\nexport const axpDetailsViewCanDeactivateGuard = createUnsavedChangesCanDeactivateGuard<AXPLayoutDetailsViewComponent>();\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i7","i1","i2","i3","i4","filter","i5","i6","i8"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-layout-views.mjs","sources":["../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/page/page-unsaved-changes.util.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.adapter-loader.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view-trace.constants.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.viewmodel.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view-action-shortcuts.util.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/page-component-instance-registry.service.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/page-component-renderer.directive.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.component.html","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view-can-deactivate.guard.ts","../../../../libs/platform/layout/views/src/acorex-platform-layout-views.ts"],"sourcesContent":["import { AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, AXPPageStatus } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPageLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n\n abstract hasTitleActions: Signal<boolean>;\n\n abstract hasPrimaryActions: Signal<boolean>;\n\n abstract hasSecondaryActions: Signal<boolean>;\n\n abstract hasActions: Signal<boolean>;\n\n abstract breadcrumbs: Signal<AXPBreadcrumbItem[]>;\n\n abstract title: Signal<AXPMultiLanguageString>;\n\n abstract titleIcon: Signal<string | null>;\n\n abstract hasTitle: Signal<boolean>;\n\n abstract hasTitleIcon: Signal<boolean>;\n\n abstract hasDescription: Signal<boolean>;\n\n abstract description: Signal<AXPMultiLanguageString | null>;\n\n abstract hasBreadcrumbs: Signal<boolean>;\n\n abstract hasBadge: Signal<boolean>;\n\n abstract badge: Signal<AXPBadge | null>;\n\n abstract hasStatus: Signal<boolean>;\n\n abstract status: Signal<AXPPageStatus | null>;\n\n abstract hasBackButton: Signal<boolean>;\n\n abstract backButton: Signal<AXPBackButton | null>;\n\n abstract onBackButtonClick: () => void | Promise<void>;\n\n abstract startSideToggle: () => void | Promise<void>;\n\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n\n /** Whether the page has user-origin edits that are not yet persisted. */\n abstract hasUnsavedChanges(): boolean;\n\n /** Resolves the page title badge (used by host layouts for nested entity pages). */\n abstract resolvePageBadge(): AXPBadge | null | Promise<AXPBadge | null>;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXClickEvent, AXCommonModule } from '@acorex/cdk/common';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXPStickyDirective, AXPUnsavedChangesCanDeactivate, AXPTabNavigationService } from '@acorex/platform/common';\nimport { AXPComponentSlotModule } from '@acorex/platform/core';\n//\nimport { AXDrawerContainerDirective, AXDrawerDirectiveModule, AXDrawerItemDirective } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem, AXPDeviceService } from '@acorex/platform/core';\nimport {\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n AXPThemeLayoutHeaderComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPStatusChipComponent } from '@acorex/platform/layout/widgets';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPageLayoutBase } from './page-layout.base';\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPComponentSlotModule,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutHeaderComponent,\n AXPStickyDirective,\n AXPThemeLayoutContainerComponent,\n AXPStatusChipComponent,\n ],\n templateUrl: './page-layout.component.html',\n styleUrls: ['./page-layout.component.scss'],\n selector: 'axp-page-layout',\n encapsulation: ViewEncapsulation.None,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [AXDrawerContainerDirective],\n providers: [],\n})\nexport class AXPPageLayoutComponent {\n protected page = inject<AXPPageLayoutBase>(AXPPageLayoutBase, { optional: true });\n\n protected layoutService = inject(AXPLayoutThemeService);\n protected deviceService = inject(AXPDeviceService);\n protected tabNavigation = inject(AXPTabNavigationService);\n\n protected startSideDrawer = viewChild<AXDrawerItemDirective>('startSideDrawer');\n\n protected workflow = inject(AXPWorkflowService);\n protected commandService = inject(AXPCommandService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.page?.title();\n this.page?.description();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-page-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.execute(item.command);\n }\n }\n\n toggleStartSide() {\n this.startSideDrawer()?.toggle();\n }\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n\n protected async execute(command: AXPExecuteCommand) {\n const reserved = ['navigate'];\n if (reserved.includes(command.name)) {\n if (!(await this.canLeaveCurrentPage())) {\n return;\n }\n await this.workflow.execute(command.name, { options: command.options });\n return;\n }\n if (this.commandService.exists(command.name)) {\n await this.commandService.execute(command.name, command.options ?? {});\n } else {\n await this.page?.execute(command);\n }\n }\n\n protected handleOnBackdropClick(event: MouseEvent) {\n event.stopPropagation();\n this.startSideDrawer()?.hide();\n }\n\n /**\n * Breadcrumbs and other in-page `navigate` commands bypass `routerLink`, so prompt here\n * when the hosted page implements {@link AXPUnsavedChangesCanDeactivate}.\n * A successful confirm sets `leaveConfirmed` for the router guard on the subsequent navigation.\n */\n private async canLeaveCurrentPage(): Promise<boolean> {\n const page = this.page as (AXPPageLayoutBase & Partial<AXPUnsavedChangesCanDeactivate>) | null;\n if (!page || typeof page.canDeactivate !== 'function') {\n return true;\n }\n\n return page.canDeactivate();\n }\n\n //#region ---------------- Status Helpers ----------------\n\n protected getEntityData(): Record<string, any> | null {\n // Get entity data from page context if available\n if (this.page && 'getEntityData' in this.page && typeof (this.page as any).getEntityData === 'function') {\n return (this.page as any).getEntityData();\n }\n return null;\n }\n\n protected async handleStatusTransition(transition: any): Promise<void> {\n // Convert status transition to command and execute\n await this.execute({\n name: 'update-status',\n options: {\n transition,\n },\n });\n }\n\n //#endregion\n}\n","<!-------- Begin Start Side Drawer -------->\n<div id=\"axp-drawer-start\" [mode]=\"deviceService.isSmall() ? 'overlay' : 'push'\" [transition]=\"250\" axDrawerItem\n [backDrop]=\"true\" (onBackdropClick)=\"handleBackdropClick($event)\" #startSideDrawer=\"axDrawerItem\"\n [backdropClass]=\"'ax-bg-darkest/75'\" [collapsed]=\"deviceService.isSmall()\" drawerLocation=\"start\" class=\"ax-h-full\">\n <ng-content select=\"axp-layout-start-side\"></ng-content>\n</div>\n<!-------- Finish Start Side Drawer -------->\n<!--------------------------------------------------------------->\n<!-------- Begin Main Layout Container -------->\n<axp-layout-container id=\"axp-page-layout\" #container>\n <!-------- Begin Page Header -------->\n <axp-layout-header id=\"axp-page-header\" *translate=\"let t\" #sticky=\"axpSticky\" [axpSticky]=\"'axp-is-sticky'\"\n [stickyOffset]=\"50\" [stickyParent]=\"container.hostElement\">\n <!-------- Begin Back Button (Mobile Only) -------->\n @if (page?.hasBackButton() && deviceService.isSmall()) {\n <ax-button id=\"axp-btn-back\" [look]=\"'blank'\" class=\"ax-sm ax-w-fit ax-ms-1\" color=\"secondary\"\n (click)=\"page?.onBackButtonClick()\" [text]=\"(page?.backButton()?.title | translate | async) ?? ''\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-chevron-left rtl:ax-rotate-180\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n <!-------- Finish Back Button -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Bar -------->\n <axp-layout-title-bar id=\"axp-title-bar\">\n <!-------- Begin Title Section -------->\n <div class=\"ax-flex ax-flex-col ax-transition ax-shrink-1 ax-min-w-0\">\n <!-------- Begin Breadcrumbs -------->\n @if (page?.hasBreadcrumbs() && !deviceService.isSmall()) {\n <ax-breadcrumbs id=\"axp-breadcrumb\" class=\"ax-mb-1\">\n @for (item of page?.breadcrumbs(); track $index) {\n <ax-breadcrumbs-item [attr.id]=\"'axp-breadcrumb-item-' + $index\" [active]=\"$last\"\n (click)=\"!$last && item.command ? execute(item.command) : null\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n {{ t(item.title) | async }}\n </ax-breadcrumbs-item>\n }\n <ng-template #divider>\n <i class=\"fa-regular fa-chevron-right rtl:ax-rotate-180 fa-sm\"></i>\n </ng-template>\n </ax-breadcrumbs>\n }\n <!-------- Finish Breadcrumbs -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Container -------->\n <div class=\"__title-container\">\n <!-------- Begin Page Title -------->\n @if (page?.hasTitle()) {\n <axp-layout-title id=\"axp-page-title\">\n @if (page?.hasTitleIcon()) {\n <ax-icon [icon]=\"page?.titleIcon()!\" class=\"ax-me-2\"></ax-icon>\n }\n {{ page?.title() | translate | async }}\n </axp-layout-title>\n }\n <!-------- Finish Page Title -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Title Actions -------->\n @if (page?.hasTitleActions()) {\n <ax-button id=\"axp-btn-title-actions\" [look]=\"'blank'\" class=\"ax-sm -ax-mx-2\">\n <ax-prefix>\n <i class=\"fa-solid fa-caret-down fa-fw\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of page?.titleActions(); track $index) {\n <ng-container>\n <ax-button-item [attr.id]=\"'axp-btn-title-action-' + (sub.name || $index)\"\n [text]=\"(t(sub.title) | async)!\" [color]=\"sub.color\" [disabled]=\"sub.disabled\"\n [selected]=\"sub.command?.metadata?.['isSelected']\" (onClick)=\"handleActionClick(sub)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n <!-------- Finish Title Actions -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Status -------->\n\n @if (page?.hasStatus()) {\n <axp-status-chip [value]=\"page?.status()?.value ?? null\" [readonly]=\"page?.status()?.readonly || false\"\n [definitionKey]=\"page?.status()?.definitionKey ?? null\" [entityData]=\"getEntityData()\"\n (transitionExecuted)=\"handleStatusTransition($event)\" class=\"__title-status\"></axp-status-chip>\n }\n <!-------- Finish Page Status -------->\n\n <!-------- Begin Title Badge -------->\n @if (page?.hasBadge()) {\n <div id=\"axp-page-badge\" class=\"__title-badge --{{ page?.badge()?.color }}\"\n [attr.title]=\"page?.badge()?.description ?? page?.badge()?.title\" [attr.aria-label]=\"page?.badge()?.title\">\n <i class=\"fa-solid fa-circle\" aria-hidden=\"true\"></i>\n <span class=\"__title-badge-label\">{{ page?.badge()?.title }}</span>\n </div>\n }\n <!-------- Finish Title Badge -------->\n\n </div>\n <!-------- Finish Title Container -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Description -------->\n @if (page?.hasDescription()) {\n <axp-layout-description id=\"axp-page-description\">\n {{ page?.description() | translate | async }}</axp-layout-description>\n }\n <!-------- Finish Page Description -------->\n </div>\n <!-------- Finish Title Section -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Actions -------->\n <axp-layout-actions id=\"axp-page-actions\" class=\"ax-shrink-0\">\n <axp-component-slot name=\"page-header-actions\"></axp-component-slot>\n <!-------- Begin Primary Actions -------->\n @if (page?.hasPrimaryActions()) {\n @for (item of page?.primaryMenuItems(); track $index) {\n @if (item.visible != false) {\n <ax-button [attr.id]=\"'axp-btn-primary-' + (item.name || item.title)\" [class.ax-sm]=\"deviceService.isSmall()\"\n [iconOnly]=\"deviceService.isSmall()\" [disabled]=\"item.disabled\" [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\" [color]=\"item.color\" (onClick)=\"handleActionClick(item)\">\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n @if (item?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of item?.items; track $index) {\n @if (sub.visible != false) {\n <ax-button-item [attr.id]=\"'axp-btn-primary-' + (item.name || item.title) + '-' + (sub.name || sub.title)\"\n [text]=\"(t(sub.title) | async)!\" [color]=\"sub.color\" [disabled]=\"sub.disabled\"\n (onClick)=\"handleActionClick(sub)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n }\n }\n }\n <!-------- Finish Primary Actions -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Secondary Actions -------->\n @if (page?.hasSecondaryActions()) {\n <ax-button id=\"axp-btn-secondary\" [class.ax-sm]=\"deviceService.isSmall()\" [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\" [color]=\"'default'\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (item of page?.secondaryMenuItems(); track $index) {\n @if (item.visible != false) {\n <ax-button-item [attr.id]=\"'axp-btn-secondary-' + (item.name || item.title)\"\n [text]=\"(item.title | translate | async)!\" [color]=\"item.color\" [disabled]=\"item.disabled\"\n (onClick)=\"handleSecondaryActionClick(item)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n <!-------- Finish Secondary Actions -------->\n </axp-layout-actions>\n <!-------- Finish Page Actions -------->\n </axp-layout-title-bar>\n <!-------- Finish Title Bar -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Toolbar / Navbar -------->\n @if (!sticky.isSticky) {}\n <ng-content select=\"axp-page-toolbar\"></ng-content>\n <!-------- Finish Page Toolbar / Navbar -------->\n </axp-layout-header>\n <!-------- Finish Page Header -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Content -------->\n <ng-content select=\"axp-page-content\"></ng-content>\n <!-------- Finish Page Content -------->\n <!--------------------------------------------------------------->\n <!-------- Begin Page Footer -------->\n <axp-page-footer-container id=\"axp-page-footer-container\"\n [ngStyle]=\"{ display: tt.isEmpty() && prefixSlot.isEmpty() && suffixSlot.isEmpty() ? 'none' : 'block' }\">\n <axp-layout-container #tt>\n <ng-content select=\"axp-page-footer\"></ng-content>\n </axp-layout-container>\n <axp-page-footer id=\"axp-page-footer\">\n <axp-layout-prefix>\n <axp-component-slot name=\"page-footer-start\" #prefixSlot=\"slot\"></axp-component-slot>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <axp-component-slot name=\"page-footer-end\" #suffixSlot=\"slot\"></axp-component-slot>\n </axp-layout-suffix>\n </axp-page-footer>\n </axp-page-footer-container>\n <!-------- Finish Page Footer -------->\n</axp-layout-container>\n<!-------- Finish Main Layout Container -------->","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPBadge } from '@acorex/platform/contracts';\n\n//#region ---- Page Unsaved Changes Utilities ----\n\n/**\n * Builds the standard \"Not Saved\" page badge when the global show-page-badge setting is enabled.\n */\nexport async function buildNotSavedPageBadge(\n translateService: AXTranslationService,\n settingsService: AXPSettingsService,\n): Promise<AXPBadge | null> {\n const showPageBadge = await settingsService.get<boolean>(AXPCommonSettings.ShowPageBadge);\n if (!showPageBadge) {\n return null;\n }\n\n return {\n title: await translateService.translateAsync('@general:terms.interface.save-status.not-saved.title'),\n color: 'warning',\n description: await translateService.translateAsync(\n '@general:terms.interface.save-status.not-saved.description',\n ),\n };\n}\n\n/**\n * Whether a command name represents a discard/revert action on a details sub-page.\n */\nexport function isDiscardCommand(commandName: string, rejectCommandName?: string | null): boolean {\n if (!commandName) {\n return false;\n }\n if (rejectCommandName && commandName === rejectCommandName) {\n return true;\n }\n if (commandName === 'discard') {\n return true;\n }\n return /:discard$/i.test(commandName) || commandName.endsWith('Discard');\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n AXPBrowserTitleService,\n AXPHomePageService,\n AXP_HOME_TAB_KEY,\n AXPSettingsService,\n AXPTabNavigationService,\n AXPTabPreviewService,\n AXPUnsavedChangesConfirmService,\n axpJoinTabTitleSegments,\n axpResolveTabKey,\n normalizeRouterUrl,\n} from '@acorex/platform/common';\nimport { AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, AXPPageStatus } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem } from '@acorex/platform/core';\nimport { AXPPolicyEngineService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { isEmpty } from 'lodash-es';\nimport { filter } from 'rxjs/operators';\nimport { AXPPageLayoutBase } from './page-layout.base';\nimport { AXPPageLayoutComponent } from './page-layout.component';\nimport { buildNotSavedPageBadge } from './page-unsaved-changes.util';\n@Component({\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AXPPageLayoutBaseComponent implements AXPPageLayoutBase {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n protected readonly policyService = inject(AXPPolicyEngineService);\n protected readonly settingsService = inject(AXPSettingsService);\n protected readonly tabNavigation = inject(AXPTabNavigationService);\n protected readonly tabPreviewService = inject(AXPTabPreviewService);\n protected readonly unsavedChangesConfirm = inject(AXPUnsavedChangesConfirmService);\n protected readonly browserTitleService = inject(AXPBrowserTitleService);\n protected readonly router = inject(Router);\n private readonly pageLayoutDestroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n /** Tab key captured at page init — stable while the route instance is cached. */\n private readonly pageTabKey = signal<string | null>(null);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n async ngOnInit() {\n this.pageTabKey.set(this.resolvePageTabKey());\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntilDestroyed(this.pageLayoutDestroyRef),\n )\n .subscribe(() => {\n void this.publishBrowserTitleIfActive();\n });\n }\n\n /** Maps the home-page route to the pinned home tab key instead of a path-based key. */\n private resolvePageTabKey(): string {\n const homePath = this.homePageService.getCurrent().path;\n if (homePath && normalizeRouterUrl(homePath) === normalizeRouterUrl(this.router.url)) {\n return AXP_HOME_TAB_KEY;\n }\n\n return axpResolveTabKey(this.router);\n }\n\n /** Stable tab key for this cached page instance (tabular mode). */\n protected getPageTabKey(): string | null {\n return this.pageTabKey();\n }\n\n //#endregion\n\n //#region ---------------- Tab Title Sync ----------------\n\n /** Refreshes tab title when this cached page becomes the active tab again. */\n #syncTabTitleOnActivate = effect(() => {\n const activeKey = this.tabNavigation.activeKey();\n const pageKey = this.pageTabKey();\n\n if (!activeKey || !pageKey || activeKey !== pageKey) {\n return;\n }\n\n if (this.tabNavigation.effectiveMode() !== 'tabular') {\n return;\n }\n\n untracked(() => {\n this.recompute();\n });\n });\n\n /** Publishes structured tab preview (hover card + dirty badge) for this cached page. */\n #syncTabStructuredPreview = effect(() => {\n this.updateTrigger();\n const tabKey = this.pageTabKey();\n const titleValue = this.title();\n const descriptionValue = this.description();\n const icon = this.titleIcon();\n const breadcrumbItems = this.breadcrumbs();\n\n if (!tabKey || this.tabNavigation.effectiveMode() !== 'tabular') {\n return;\n }\n\n const isDirty = this.hasUnsavedChanges();\n\n untracked(() => {\n void this.publishTabStructuredPreview(tabKey, {\n titleValue,\n descriptionValue,\n icon,\n breadcrumbItems,\n isDirty,\n });\n });\n });\n\n protected async publishTabStructuredPreview(\n tabKey: string,\n input: {\n titleValue: AXPMultiLanguageString;\n descriptionValue: AXPMultiLanguageString | null;\n icon: string | null;\n breadcrumbItems: AXPBreadcrumbItem[];\n isDirty: boolean;\n },\n ): Promise<void> {\n const tab = this.tabNavigation.tabList().find((item) => item.key === tabKey);\n const breadcrumbTrail: string[] = [];\n\n for (const item of input.breadcrumbItems.slice(1)) {\n const segment = await this.resolveBreadcrumbItemTitle(item);\n if (segment && segment !== breadcrumbTrail[breadcrumbTrail.length - 1]) {\n breadcrumbTrail.push(segment);\n }\n }\n\n const fallbackTitle = await this.translateTextIfKey(breadcrumbTrail.join(' - ') || tab?.title || '');\n const title = await this.resolveMultiLanguageText(input.titleValue, fallbackTitle);\n const subtitle = await this.resolveMultiLanguageText(input.descriptionValue, '');\n\n this.tabPreviewService.setPreview(tabKey, {\n title,\n subtitle: subtitle || undefined,\n url: tab?.url ?? '',\n icon: input.icon ?? tab?.icon,\n isDirty: input.isDirty,\n breadcrumbTrail,\n });\n }\n\n protected async resolveMultiLanguageText(\n value: AXPMultiLanguageString | null | undefined,\n fallback: string,\n ): Promise<string> {\n const resolvedFallback = await this.translateTextIfKey(fallback);\n\n if (value == null || value === '') {\n return resolvedFallback;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return resolvedFallback;\n }\n\n if (trimmed.startsWith('@')) {\n return (await this.translateService.translateAsync(trimmed)) || resolvedFallback;\n }\n\n return trimmed;\n }\n\n const resolved = this.translateService.resolve(value as AXPMultiLanguageString);\n return resolved || resolvedFallback;\n }\n\n /** Resolves i18n keys (`@scope:key`); returns plain text unchanged. */\n protected async translateTextIfKey(text: string): Promise<string> {\n const trimmed = text.trim();\n if (!trimmed) {\n return '';\n }\n\n if (trimmed.startsWith('@')) {\n return (await this.translateService.translateAsync(trimmed)) || trimmed;\n }\n\n return trimmed;\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<AXPMultiLanguageString>('');\n public titleIcon = signal<string | null>(null);\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPageTitle());\n const icon = await this.getPageIcon();\n this.titleIcon.set(icon);\n\n if (this.tabNavigation.effectiveMode() === 'tabular') {\n const tabKey = this.pageTabKey();\n if (tabKey && icon) {\n this.tabNavigation.syncTabIcon(tabKey, icon);\n }\n }\n });\n\n protected getPageTitle(): AXPMultiLanguageString | Promise<AXPMultiLanguageString> {\n return '';\n }\n\n protected getPageIcon(): string | null | Promise<string | null> {\n return null;\n }\n\n public hasTitle = computed(() => {\n const value = this.title();\n if (value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'string') {\n return value.length > 0;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return !isEmpty(value);\n }\n return false;\n });\n public hasTitleIcon = computed(() => this.titleIcon() !== null);\n\n #browserTitleEffect = effect(() => {\n if (this.tabNavigation.effectiveMode() === 'tabular') {\n return;\n }\n\n if (!this.isActivePageForBrowserTitle()) {\n return;\n }\n\n this.updateTrigger();\n this.title();\n\n untracked(() => {\n void this.publishBrowserTitleIfActive();\n });\n });\n\n /** Publishes the page title to the browser tab when this instance is the active route. */\n protected async publishBrowserTitleIfActive(): Promise<void> {\n if (this.tabNavigation.effectiveMode() === 'tabular') {\n return;\n }\n\n if (!this.isActivePageForBrowserTitle()) {\n return;\n }\n\n const routeKey = this.pageTabKey();\n if (!routeKey) {\n return;\n }\n\n const pageTitle = await this.resolvePageTitleForTab();\n if (!this.isActivePageForBrowserTitle()) {\n return;\n }\n\n this.browserTitleService.setSimpleModePageTitle(pageTitle, routeKey);\n }\n\n /** True when this cached page instance matches the current router location. */\n protected isActivePageForBrowserTitle(): boolean {\n const pageKey = this.pageTabKey();\n if (!pageKey) {\n return false;\n }\n\n return pageKey === axpResolveTabKey(this.router);\n }\n\n //#endregion\n\n //#region ---------------- Description ----------------\n\n public description = signal<AXPMultiLanguageString | null>(null);\n\n public hasDescription = computed(() => {\n const value = this.description();\n if (value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'string') {\n return value.length > 0;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return !isEmpty(value);\n }\n return false;\n });\n\n #descriptionEffect = effect(async () => {\n this.updateTrigger();\n this.description.set(await this.getPageDescription());\n });\n\n protected getPageDescription(): AXPMultiLanguageString | null | Promise<AXPMultiLanguageString | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Breadcrumbs ----------------\n\n private defaultBreadCrumbs: AXPBreadcrumbItem[] = [\n {\n title: '@general:terms.interface.navigation.home',\n icon: 'fa-solid fa-home ax-text-xs ax-me-1',\n command: {\n name: 'navigate',\n options: {\n path: this.homePageService.getCurrent().path,\n },\n },\n },\n ];\n\n public breadcrumbs = signal<AXPBreadcrumbItem[]>(this.defaultBreadCrumbs);\n\n #breadcrumbsEffect = effect(async () => {\n this.updateTrigger();\n const breadCrumbs = await this.getPageBreadcrumbs();\n const trail = [...this.defaultBreadCrumbs, ...breadCrumbs];\n this.breadcrumbs.set(trail);\n\n if (this.tabNavigation.effectiveMode() === 'tabular') {\n const tabKey = this.pageTabKey();\n const tabTitleSegments = await this.resolveBreadcrumbTabTitleSegments(breadCrumbs);\n let tabTitle = tabTitleSegments.length ? axpJoinTabTitleSegments(tabTitleSegments) : null;\n if (!tabTitle) {\n tabTitle = await this.resolvePageTitleForTab();\n }\n\n if (tabKey && tabTitle) {\n this.tabNavigation.syncTabTitle(tabKey, tabTitleSegments.length ? tabTitleSegments : tabTitle);\n }\n }\n });\n\n public hasBreadcrumbs = computed(() => this.breadcrumbs().length > 1);\n\n protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]> {\n return [];\n }\n\n /** Collects resolved breadcrumb labels (Home excluded upstream) for tab chrome. */\n protected async resolveBreadcrumbTabTitleSegments(pageBreadcrumbs: AXPBreadcrumbItem[]): Promise<string[]> {\n const segments: string[] = [];\n\n for (const item of pageBreadcrumbs) {\n const title = await this.resolveBreadcrumbItemTitle(item);\n if (title && title !== segments[segments.length - 1]) {\n segments.push(title);\n }\n }\n\n return segments;\n }\n\n /** Joins breadcrumb segments as the stored tab title string. */\n protected async resolveBreadcrumbTabTitle(pageBreadcrumbs: AXPBreadcrumbItem[]): Promise<string | null> {\n const segments = await this.resolveBreadcrumbTabTitleSegments(pageBreadcrumbs);\n if (!segments.length) {\n return null;\n }\n\n return axpJoinTabTitleSegments(segments);\n }\n\n /** Resolves a breadcrumb label the same way as page chrome (`t(item.title)`). */\n protected async resolveBreadcrumbItemTitle(item: AXPBreadcrumbItem | undefined): Promise<string | null> {\n const raw = item?.title;\n if (raw == null || raw === '') {\n return null;\n }\n\n if (typeof raw === 'string') {\n const trimmed = raw.trim();\n if (!trimmed) {\n return null;\n }\n\n if (trimmed.startsWith('@')) {\n return (await this.translateService.translateAsync(trimmed)) || trimmed;\n }\n\n return trimmed;\n }\n\n if (typeof raw === 'object' && !Array.isArray(raw)) {\n if (this.translateService.isValidMultiLanguageObject(raw)) {\n const resolved = this.translateService.resolve(raw as AXPMultiLanguageString);\n return resolved || null;\n }\n\n const resolved = this.translateService.resolve(raw as AXPMultiLanguageString);\n return resolved || null;\n }\n\n return String(raw);\n }\n\n /** Fallback tab label from the page title when breadcrumbs are not ready yet. */\n protected async resolvePageTitleForTab(): Promise<string | null> {\n const raw = await Promise.resolve(this.getPageTitle());\n if (raw == null || raw === '') {\n return null;\n }\n\n if (typeof raw === 'string') {\n const trimmed = raw.trim();\n if (trimmed.startsWith('@')) {\n return (await this.translateService.translateAsync(trimmed)) || trimmed;\n }\n return trimmed;\n }\n\n if (typeof raw === 'object' && !Array.isArray(raw)) {\n const resolved = this.translateService.resolve(raw as AXPMultiLanguageString);\n return resolved || null;\n }\n\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Badge ----------------\n\n public badge = signal<AXPBadge | null>(null);\n\n public hasBadge = computed(() => this.badge() !== null);\n\n #badgeEffect = effect(async () => {\n this.updateTrigger();\n this.badge.set(await this.getPageBadge());\n });\n\n hasUnsavedChanges(): boolean {\n return false;\n }\n\n /**\n * Confirms closing this page as a background tab (no router navigation).\n * Override when dirty detection differs from {@link hasUnsavedChanges}.\n */\n onBeforeTabClose(): boolean | Promise<boolean> {\n return this.unsavedChangesConfirm.confirmIfDirty(this.hasUnsavedChanges(), {\n approveLeaveOnConfirm: false,\n });\n }\n\n protected async getPageBadge(): Promise<AXPBadge | null> {\n if (!this.hasUnsavedChanges()) {\n return null;\n }\n return buildNotSavedPageBadge(this.translateService, this.settingsService);\n }\n\n async resolvePageBadge(): Promise<AXPBadge | null> {\n return this.getPageBadge();\n }\n\n //#endregion\n\n //#region ---------------- Status ----------------\n\n public status = signal<AXPPageStatus | null>(null);\n\n public hasStatus = computed(() => this.status() !== null);\n\n #statusEffect = effect(async () => {\n this.updateTrigger();\n this.status.set(await this.getPageStatus());\n });\n\n protected getPageStatus(): AXPPageStatus | null | Promise<AXPPageStatus | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Layout ----------------\n\n protected layout = viewChild(AXPPageLayoutComponent);\n\n //TODO: Remove this after migration to the new layout\n protected toggleEndSide() {\n //this.layout()?.toggleStartSide()\n }\n\n //TODO: Remove this after migration to the new layout\n protected toggleStartSide() {\n this.layout()?.toggleStartSide();\n }\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasPrimaryActions = computed(() => this.primaryMenuItems().filter((item) => item.visible != false).length > 0);\n\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getPrimaryMenuItems();\n this.primaryMenuItems.set(items);\n });\n\n public getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasSecondaryActions = computed(\n () => this.secondaryMenuItems().filter((item) => item.visible != false).length > 0,\n );\n\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getSecondaryMenuItems();\n this.secondaryMenuItems.set(items);\n });\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public backButton = signal<AXPBackButton | null>(null);\n\n public hasBackButton = computed(() => this.backButton() !== null);\n\n protected getBackButton(): (AXPBackButton | null) | Promise<AXPBackButton | null> {\n return null;\n }\n\n #backButtonEffect = effect(async () => {\n this.updateTrigger();\n this.backButton.set(await this.getBackButton());\n });\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> {}\n\n /**\n * Optional partial context to merge into the create/update wizard when leaving a page step.\n * Override when the page keeps edits in local state instead of the shared form context.\n */\n getWizardStepContext(): Record<string, unknown> | null {\n return null;\n }\n\n public startSideToggle(): void | Promise<void> {\n this.layout();\n }\n\n public onBackButtonClick(): void | Promise<void> {}\n\n //#endregion\n}\n","import { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem } from '@acorex/platform/core';\n\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPopupLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n abstract hasTitleActions: Signal<boolean>;\n abstract hasPrimaryActions: Signal<boolean>;\n abstract hasSecondaryActions: Signal<boolean>;\n abstract hasActions: Signal<boolean>;\n abstract title: Signal<string>;\n abstract hasTitle: Signal<boolean>;\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n} ","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent, AXCommonModule } from \"@acorex/cdk/common\";\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\n//\nimport { AXDrawerDirectiveModule } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem } from '@acorex/platform/core';\n\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPopupLayoutBase } from './popup-layout.base';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n ],\n templateUrl: './popup-layout.component.html',\n styleUrls: ['./popup-layout.component.scss'],\n selector: 'axp-popup-layout',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPPopupLayoutComponent {\n protected popup = inject<AXPPopupLayoutBase>(AXPPopupLayoutBase);\n protected layoutService = inject(AXPLayoutThemeService);\n protected workflow = inject(AXPWorkflowService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.popup?.title();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-popup-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.popup?.execute(item.command);\n }\n }\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.popup?.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n} ","<axp-layout-container id=\"axp-popup-layout\" #container>\n <ng-content select=\"axp-page-content\"></ng-content>\n <axp-page-footer id=\"axp-popup-footer\" *translate=\"let t\">\n <ax-prefix> </ax-prefix>\n @if (popup.hasPrimaryActions()) {\n <ax-suffix>\n @for (item of popup.primaryMenuItems(); track $index) {\n <ax-button\n [attr.id]=\"'axp-btn-primary-' + (item.name || item.title)\"\n [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"item.color\"\n (onClick)=\"handleActionClick(item)\"\n >\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-suffix>\n }\n </axp-page-footer>\n</axp-layout-container>\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport { AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { AXPPopupLayoutComponent } from './popup-layout.component';\nimport { AXBasePageComponent } from '@acorex/components/page';\n\n@Component({\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n override async ngOnInit() {\n super.ngOnInit();\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<string>('');\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPopupTitle());\n });\n\n protected getPopupTitle(): string | Promise<string> {\n return '';\n }\n\n public hasTitle = computed(() => this.title() !== '');\n\n //#endregion\n\n //#region ---------------- Layout ----------------\n\n // Placeholder for popup layout reference if needed\n protected layout = viewChild(AXPPopupLayoutComponent);\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasPrimaryActions = computed(() => this.primaryMenuItems().length > 0);\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.primaryMenuItems.set(await this.getPrimaryMenuItems());\n });\n protected getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasSecondaryActions = computed(() => this.secondaryMenuItems().length > 0);\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.secondaryMenuItems.set(await this.getSecondaryMenuItems());\n });\n protected getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n //#endregion\n} ","import { InjectionToken } from '@angular/core';\nimport { AXPLayoutDetailsViewAdapter } from './details-view.adapter';\n\n//#region ---- Types ----\n\nexport interface AXPLayoutDetailsViewRouteParams {\n moduleName: string;\n entityName: string;\n id: string;\n}\n\nexport interface AXPLayoutDetailsViewAdapterLoader {\n load(params: AXPLayoutDetailsViewRouteParams): Promise<AXPLayoutDetailsViewAdapter>;\n}\n\nexport const AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER = new InjectionToken<AXPLayoutDetailsViewAdapterLoader>(\n 'AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER',\n);\n\n//#endregion\n","/** Trace namespace for details-view page / URL sync diagnostics. */\nexport const DETAILS_VIEW_PAGE_TRACE_NS = 'details-view-page';\n","import { AXPEntityCommandScope } from '@acorex/platform/layout/entity-contracts';\nimport { AXFormComponent } from '@acorex/components/form';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPCommonSettings, AXP_NOT_FOUND_ROUTE, axpIsEntityDetailsViewRoute, axpNavigateAppPath, AXPNotFoundError, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPBackButton, AXPBadge, AXPExecuteCommand, AXPMultiLanguageString, type AXPPageStatus as AXPDetailsPageStatusChip, type AXPWidgetNode } from '@acorex/platform/contracts';\nimport { getSmart } from '@acorex/platform/contracts';\nimport { AXPContextEvalFactory, AXPDebugService, AXPDeviceService, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService, OVERLAY_DETAILS_VIEW_TRACE_NS } from '@acorex/platform/core';\nimport { AXPPageStatus } from '@acorex/platform/layout/widget-core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { computed, effect, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { cloneDeep, get, isEmpty } from 'lodash-es';\nimport {\n AXPLayoutDetailsViewAdapter,\n AXPLayoutDetailsViewPage,\n AXPLayoutDetailsViewTabItem,\n} from './details-view.adapter';\nimport { AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER } from './details-view.adapter-loader';\nimport { DETAILS_VIEW_PAGE_TRACE_NS } from './details-view-trace.constants';\n\n//#region ---- Root-context widget expression resolution ----\n\n/**\n * Evaluates `{{ ... }}` strings inside `options.customFilterDefinitions` using `rootContext`\n * (details adapter load data), so filter UI does not depend on widget-renderer contextService.\n */\nasync function buildEvaluatedPageContentsForRootContext(\n currentPage: AXPLayoutDetailsViewPage | null,\n rootContext: Record<string, unknown>,\n evaluatorService: AXPExpressionEvaluatorService,\n): Promise<{\n evaluatedPageContent: AXPWidgetNode[];\n evaluatedTabContentsById: Record<string, AXPWidgetNode[]>;\n}> {\n if (!currentPage) {\n return { evaluatedPageContent: [], evaluatedTabContentsById: {} };\n }\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => getSmart(rootContext, path),\n },\n };\n\n const resolveNodes = async (nodes: AXPWidgetNode[] | undefined): Promise<AXPWidgetNode[]> => {\n if (!nodes?.length) {\n return [];\n }\n const cloned = cloneDeep(nodes);\n for (const node of cloned) {\n const defs = node.options?.['customFilterDefinitions'] as unknown[] | undefined;\n if (Array.isArray(defs) && defs.length > 0) {\n node.options!['customFilterDefinitions'] = await evaluatorService.evaluate(defs, scope);\n }\n }\n return cloned;\n };\n\n const evaluatedPageContent = await resolveNodes(currentPage.content);\n const evaluatedTabContentsById: Record<string, AXPWidgetNode[]> = {};\n for (const tab of currentPage.tabs ?? []) {\n evaluatedTabContentsById[tab.id] = await resolveNodes(tab.content);\n }\n\n return { evaluatedPageContent, evaluatedTabContentsById };\n}\n\n//#endregion\n\nexport const AXPLayoutDetailsViewViewModel = signalStore(\n withState(() => {\n const state = {\n adapter: null as AXPLayoutDetailsViewAdapter | null,\n rootContext: {} as Record<string, any>,\n savedContext: {} as Record<string, any>,\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n scope: null as AXPExpressionEvaluatorScope | null,\n status: AXPPageStatus.Idle,\n currentPage: null as AXPLayoutDetailsViewPage | null,\n currentTab: null as AXPLayoutDetailsViewTabItem | null,\n pageSelectedRows: [] as any[],\n /** Page main column widgets with `customFilterDefinitions` evaluated against `rootContext` */\n evaluatedPageContent: [] as AXPWidgetNode[],\n /** Tab panel widgets keyed by tab id (same evaluation as `evaluatedPageContent`) */\n evaluatedTabContentsById: {} as Record<string, AXPWidgetNode[]>,\n /** Dirty flag synced from {@link AXPWidgetContainerComponent.isFormDirty}. */\n formDirty: false,\n };\n return state;\n }),\n withComputed((store, deviceService = inject(AXPDeviceService)) => ({\n icon: computed(() => store.adapter()?.icon ?? null),\n content: computed(() => {\n const pages = store.adapter()?.pages ?? [];\n const primaryPage = pages.find((p) => p.isPrimary) ?? pages[0];\n return primaryPage?.content ?? [];\n }),\n //\n showPages: computed(() => !store.currentPage() && !deviceService.isLarge()),\n isLarge: computed(() => deviceService.isLarge()),\n //\n isBusy: computed(() => store.status() == AXPPageStatus.Processing),\n isSaving: computed(() => store.status() == AXPPageStatus.Submitting),\n isOverlayBusy: computed(\n () =>\n store.status() === AXPPageStatus.Processing || store.status() === AXPPageStatus.Submitting,\n ),\n isPageReady: computed(\n () =>\n store.adapter() != null &&\n store.currentPage() != null &&\n store.status() === AXPPageStatus.Rendered,\n ),\n isDirty: computed(() => {\n if (store.currentPage()?.isReadonly) {\n return false;\n }\n return store.formDirty();\n }),\n changesCount: computed(() => {\n if (store.currentPage()?.isReadonly) {\n return 0;\n }\n return store.formDirty() ? 1 : 0;\n }),\n isLoaded: computed(() => store.adapter() != null),\n currentPageSelectedRows: computed(() => store.pageSelectedRows()),\n /** Evaluated widget nodes for the active tab only (avoids double-mount from keep-alive cache). */\n activeTabContent: computed((): AXPWidgetNode[] => {\n const tab = store.currentTab();\n if (!tab?.id) {\n return [];\n }\n const evaluatedByTab = store.evaluatedTabContentsById();\n return evaluatedByTab[tab.id] ?? [];\n }),\n })),\n withMethods(\n (\n store,\n evaluatorService = inject(AXPExpressionEvaluatorService),\n contextEvalFactory = inject(AXPContextEvalFactory),\n router = inject(Router),\n route = inject(ActivatedRoute),\n deviceService = inject(AXPDeviceService),\n formatService = inject(AXFormatService),\n toastService = inject(AXToastService),\n translateService = inject(AXTranslationService),\n settingsService = inject(AXPSettingsService),\n layout = inject(AXPLayoutThemeService),\n adapterLoader = inject(AXP_LAYOUT_DETAILS_VIEW_ADAPTER_LOADER),\n ) => {\n const resolvePageFromId = (\n adapter: AXPLayoutDetailsViewAdapter,\n pageId?: string | null,\n ): AXPLayoutDetailsViewPage | null => {\n if (pageId) {\n return adapter.pages.find((p) => p.id === pageId) ?? null;\n }\n\n if (deviceService.isLarge() || adapter.pages.length === 1) {\n return adapter.pages.find((p) => p.isPrimary) ?? adapter.pages[0] ?? null;\n }\n\n return null;\n };\n\n /** Serializes page activation so route sync and UI cannot run overlapping loads. */\n let pageActivationChain: Promise<void> = Promise.resolve();\n\n /** Serializes route-driven adapter loads (initial navigation and layout refresh). */\n let routeLoadChain: Promise<void> = Promise.resolve();\n\n /** `page` query param from the browser URL (reliable on hard refresh). */\n const readPageQueryParam = (): string | null => {\n const page = router.parseUrl(router.url).queryParams['page'];\n return typeof page === 'string' && page.length > 0 ? page : null;\n };\n\n /** Snapshot of all page-query sources for trace logs. */\n const pageQueryTraceContext = (extra: Record<string, unknown> = {}): Record<string, unknown> => ({\n routerUrl: router.url,\n pageFromRouterUrl: readPageQueryParam(),\n pageFromRouteSnapshot: route.snapshot.queryParamMap.get('page'),\n pageFromRootSnapshot: router.routerState.snapshot.root.queryParams['page'] ?? null,\n currentPageId: store.currentPage()?.id ?? null,\n adapterPageIds: store.adapter()?.pages.map((p) => p.id) ?? [],\n ...extra,\n });\n\n /** Loads page data, context, and evaluated widgets for the target sidebar page. */\n const activatePageById = async (pageId?: string, forceRefresh?: boolean): Promise<void> => {\n const activation = pageActivationChain.then(() => runPageActivation(pageId, forceRefresh));\n pageActivationChain = activation.catch(() => undefined);\n await activation;\n };\n\n const runPageActivation = async (pageId?: string, forceRefresh?: boolean): Promise<void> => {\n const adapter = store.adapter();\n if (!adapter) {\n return;\n }\n\n const targetPageId = pageId ?? readPageQueryParam() ?? undefined;\n const currentPage = resolvePageFromId(adapter, targetPageId);\n\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'runPageActivation', () => pageQueryTraceContext({\n passedPageId: pageId ?? null,\n targetPageId: targetPageId ?? null,\n resolvedPageId: currentPage?.id ?? null,\n forceRefresh: forceRefresh ?? false,\n vmStatus: store.status(),\n }));\n\n if (!forceRefresh && currentPage?.id === store.currentPage()?.id && store.status() === AXPPageStatus.Rendered) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'runPageActivation skipped (already rendered)', () => pageQueryTraceContext({\n resolvedPageId: currentPage?.id ?? null,\n }));\n return;\n }\n\n const previousPageId = store.currentPage()?.id;\n const isSidebarSwitch = previousPageId != null && previousPageId !== currentPage?.id;\n\n if (isSidebarSwitch) {\n layout.setNavigationLoading(true);\n }\n\n const overlayAlreadyOn = layout.overlayTaskCount() > 0;\n if (!overlayAlreadyOn) {\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'activatePage overlay ON', () => ({\n pageId: currentPage?.id,\n forceRefresh,\n isSidebarSwitch,\n }));\n layout.setOverlayLoading(true);\n } else {\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'activatePage skipped overlay ON (task count > 0)', () => ({\n pageId: currentPage?.id,\n forceRefresh,\n isSidebarSwitch,\n taskCount: layout.overlayTaskCount(),\n }));\n }\n\n patchState(store, {\n status: AXPPageStatus.Processing,\n });\n\n try {\n let context: Record<string, unknown> = {};\n if (currentPage) {\n const currentPageIndex = adapter.pages.findIndex((p) => p.id === currentPage.id);\n const pageLoad = adapter.pages[currentPageIndex]?.load;\n if (typeof pageLoad === 'function') {\n const loadResult = await pageLoad({ forceRefresh });\n context = (loadResult?.data as Record<string, unknown>) ?? {};\n } else {\n // Component/list sidebar pages have no `load`; keep entity root context so widget\n // state is not cleared (Change History, etc. use `rootContext` instead).\n context = cloneDeep(store.rootContext()) as Record<string, unknown>;\n }\n }\n\n const currentTab = currentPage?.tabs?.[0] ?? null;\n const shouldSyncRootContext =\n forceRefresh === true && currentPage?.isPrimary === true && !isEmpty(context);\n const rootCtx = shouldSyncRootContext\n ? context\n : (store.rootContext() as Record<string, unknown>);\n const { evaluatedPageContent, evaluatedTabContentsById } = await buildEvaluatedPageContentsForRootContext(\n currentPage,\n rootCtx,\n evaluatorService,\n );\n\n patchState(store, {\n previousContext: cloneDeep(context),\n context: cloneDeep(context),\n savedContext: cloneDeep(context),\n ...(shouldSyncRootContext ? { rootContext: cloneDeep(context) } : {}),\n status: AXPPageStatus.Rendered,\n currentPage,\n currentTab,\n evaluatedPageContent,\n evaluatedTabContentsById,\n formDirty: false,\n pageSelectedRows: [],\n });\n\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'activatePage VM ready (Rendered)', () => ({\n pageId: currentPage?.id,\n forceRefresh,\n }));\n\n const urlPageParam = readPageQueryParam();\n if (currentPage && axpIsEntityDetailsViewRoute(router)) {\n if (!urlPageParam) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'URL sync — add missing ?page=', () => pageQueryTraceContext({\n navigateToPageId: currentPage.id,\n }));\n router.navigate([], {\n relativeTo: route,\n queryParams: { page: currentPage.id },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n } else {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'URL sync — skipped (page already in URL)', () => pageQueryTraceContext({\n urlPageParam,\n resolvedPageId: currentPage.id,\n }));\n }\n }\n } finally {\n if (isSidebarSwitch) {\n layout.setNavigationLoading(false);\n }\n if (store.status() === AXPPageStatus.Processing) {\n patchState(store, { status: AXPPageStatus.Rendered });\n }\n }\n };\n\n // Sync sidebar page from route query params\n effect((onCleanup) => {\n if (!store.adapter()) {\n return;\n }\n\n const subscription = route.queryParams.subscribe((params) => {\n const adapter = store.adapter();\n if (!adapter) {\n return;\n }\n\n // `load()` → `loadPage()` owns the first activation while `currentPage` is still null.\n if (store.currentPage() == null) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'queryParams effect — skipped (currentPage null)', () => pageQueryTraceContext({\n paramsPage: params['page'] ?? null,\n }));\n return;\n }\n\n const pageId = params['page'] as string | undefined;\n if (!pageId) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'queryParams effect — skipped (no page param)', () => pageQueryTraceContext({\n params,\n }));\n return;\n }\n\n const targetPage = adapter.pages.find((p) => p.id === pageId);\n if (!targetPage || store.currentPage()?.id === targetPage.id) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'queryParams effect — skipped (same or unknown page)', () => pageQueryTraceContext({\n paramsPage: pageId,\n targetPageFound: !!targetPage,\n }));\n return;\n }\n\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'queryParams effect — activatePageById', () => pageQueryTraceContext({\n paramsPage: pageId,\n activatePageId: targetPage.id,\n }));\n void activatePageById(targetPage.id);\n });\n\n onCleanup(() => subscription.unsubscribe());\n });\n\n /**\n * Breadcrumb titles are rendered with `{{ t(item.title) | async }}`; values must resolve to primitives\n * or `@` keys. Normalize MLS **before** evaluate/format **and** **after**, because `raw` and the evaluator\n * output can both carry MLS maps or locale-shaped objects.\n */\n function applyLocaleIfMultilingual(value: AXPMultiLanguageString | unknown): AXPMultiLanguageString {\n if (\n value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n translateService.isValidMultiLanguageObject(value)\n ) {\n return translateService.resolve(value as AXPMultiLanguageString);\n }\n return value as AXPMultiLanguageString;\n }\n\n /** Post-eval: collapse MLS maps and plain locale objects after evaluate/format (avoids `[object Object]` in `t()`). */\n function finalizeBreadcrumbTitleEvaluated(\n evaluated: unknown,\n fallback: AXPMultiLanguageString,\n ): AXPMultiLanguageString {\n const chosen = evaluated ?? fallback;\n if (\n chosen !== null &&\n chosen !== undefined &&\n typeof chosen === 'object' &&\n !Array.isArray(chosen) &&\n translateService.isValidMultiLanguageObject(chosen)\n ) {\n return translateService.resolve(chosen as AXPMultiLanguageString);\n }\n if (typeof chosen === 'string') {\n return chosen;\n }\n if (chosen !== null && chosen !== undefined && typeof chosen === 'object' && !Array.isArray(chosen)) {\n return translateService.resolve(chosen as AXPMultiLanguageString);\n }\n if (typeof fallback === 'string') {\n return fallback;\n }\n if (\n fallback !== null &&\n fallback !== undefined &&\n translateService.isValidMultiLanguageObject(fallback as unknown)\n ) {\n return translateService.resolve(fallback as AXPMultiLanguageString);\n }\n return translateService.resolve(fallback);\n }\n\n async function resolveBreadcrumbTitleFields(\n raw: AXPMultiLanguageString,\n evalScope: AXPExpressionEvaluatorScope,\n formatContext: Record<string, unknown>,\n ): Promise<AXPMultiLanguageString> {\n /** Pre-eval: locale strip for recognizable MLS payloads before branching on expressions. */\n const sourceAfterPreLocale = applyLocaleIfMultilingual(raw);\n\n const isStructuredMlsObject =\n translateService.isValidMultiLanguageObject(raw) &&\n typeof raw === 'object' &&\n raw !== null &&\n !Array.isArray(raw);\n\n /** Full-string `{{ ... }}` uses `AXPExpressionEvaluatorService.isExpression` (aligned with evaluator API). */\n let evaluated: unknown;\n if (typeof sourceAfterPreLocale === 'string' && evaluatorService.isExpression(sourceAfterPreLocale)) {\n evaluated = await evaluatorService.evaluate(sourceAfterPreLocale, evalScope);\n } else if (isStructuredMlsObject) {\n evaluated = await evaluatorService.evaluate(raw, evalScope);\n } else if (typeof sourceAfterPreLocale === 'string') {\n if (sourceAfterPreLocale.trim().startsWith('@')) {\n evaluated = await translateService.translateAsync(sourceAfterPreLocale);\n } else {\n evaluated = await formatService.format(sourceAfterPreLocale, 'string', formatContext);\n }\n } else {\n evaluated = await formatService.format(raw as AXPMultiLanguageString, 'string', formatContext);\n }\n\n /** Post-eval: MLS-aware resolution again — evaluate may return MLS or map-like wrappers. */\n return finalizeBreadcrumbTitleEvaluated(evaluated, raw);\n }\n\n /**\n * Resolves MLS objects, evaluates format templates, or applies string formatting against page context (same semantics as legacy details layout header meta).\n */\n function convertToMultiLanguageString(\n value: AXPMultiLanguageString | null | undefined,\n ): AXPMultiLanguageString | null {\n if (!value || isEmpty(value)) {\n return null;\n }\n if (translateService.isValidMultiLanguageObject(value)) {\n return translateService.resolve(value as AXPMultiLanguageString);\n }\n return (formatService.format(value, 'string', store.context()) as AXPMultiLanguageString) ?? '';\n }\n\n return {\n async loadAdapter(adapter: AXPLayoutDetailsViewAdapter) {\n patchState(store, { adapter });\n\n // Load adapter context if adapter has load function\n let adapterContext = {};\n if (adapter.load) {\n const adapterResult = await adapter.load();\n adapterContext = adapterResult?.data ?? {};\n }\n\n patchState(store, {\n rootContext: cloneDeep(adapterContext),\n });\n },\n\n async loadPage(pageId?: string, forceRefresh?: boolean) {\n await activatePageById(pageId, forceRefresh);\n },\n\n async load(adapter: AXPLayoutDetailsViewAdapter, forceRefresh?: boolean, pageIdFromUrl?: string) {\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n ...contextEvalFactory.createLiveScope(() => store.context() as Record<string, unknown>),\n isDirty: () => store.isDirty(),\n },\n };\n patchState(store, {\n scope,\n });\n //\n await this.loadAdapter(adapter);\n const pageId = pageIdFromUrl ?? readPageQueryParam() ?? undefined;\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'load — activate page', () => pageQueryTraceContext({\n pageIdFromUrl: pageIdFromUrl ?? null,\n resolvedPageId: pageId ?? null,\n forceRefresh: forceRefresh ?? false,\n }));\n await this.loadPage(pageId, forceRefresh);\n },\n\n async loadFromRoute(forceRefresh?: boolean): Promise<void> {\n const run = async (): Promise<void> => {\n const pageIdFromUrl = readPageQueryParam() ?? undefined;\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'loadFromRoute start', () => pageQueryTraceContext({\n pageIdFromUrl: pageIdFromUrl ?? null,\n forceRefresh: forceRefresh ?? false,\n }));\n const moduleName = route.parent?.snapshot.paramMap.get('module');\n const entityName = route.snapshot.paramMap.get('entity');\n const id = route.snapshot.paramMap.get('id');\n\n if (!moduleName || !entityName || !id) {\n return;\n }\n\n layout.setNavigationLoading(true);\n if (layout.overlayTaskCount() === 0) {\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'loadFromRoute overlay ON', () => ({\n moduleName,\n entityName,\n id,\n forceRefresh,\n }));\n layout.setOverlayLoading(true);\n } else {\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'loadFromRoute skipped overlay ON (task count > 0)', () => ({\n moduleName,\n entityName,\n id,\n forceRefresh,\n taskCount: layout.overlayTaskCount(),\n }));\n }\n\n try {\n if (forceRefresh) {\n patchState(store, {\n currentPage: null,\n status: AXPPageStatus.Idle,\n });\n }\n\n const adapter = await adapterLoader.load({ moduleName, entityName, id });\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'adapter loaded (overlay still ON — details-view releases)', () => ({\n moduleName,\n entityName,\n id,\n }));\n await this.load(adapter, forceRefresh, pageIdFromUrl);\n } catch (error) {\n AXPDebugService.instance?.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'viewmodel', 'loadFromRoute overlay OFF (error)', () => ({\n moduleName,\n entityName,\n id,\n }));\n layout.setOverlayLoading(false);\n if (error instanceof AXPNotFoundError) {\n void router.navigateByUrl(AXP_NOT_FOUND_ROUTE);\n return;\n }\n throw error;\n } finally {\n layout.setNavigationLoading(false);\n }\n };\n\n const load = routeLoadChain.then(run);\n routeLoadChain = load.catch(() => undefined);\n await load;\n },\n\n updateContext(context: any) {\n patchState(store, {\n context,\n });\n },\n\n setFormDirty(dirty: boolean) {\n if (store.formDirty() === dirty) {\n return;\n }\n patchState(store, {\n formDirty: dirty,\n });\n },\n\n updatePageSelectedRows(rows: any[]) {\n patchState(store, {\n pageSelectedRows: rows,\n });\n },\n\n async currentPagePrimaryActions() {\n // Use getActions() if available for reactive updates, otherwise fall back to static actions\n const currentPage = store.currentPage();\n const allActions = currentPage?.getActions ? await currentPage.getActions() : (currentPage?.actions ?? []);\n\n const raw = allActions.filter((a) => a.priority == 'primary');\n const acceptAction = currentPage?.settings?.commands?.accept;\n const rejectAction = currentPage?.settings?.commands?.reject;\n if (rejectAction) {\n raw.push({\n priority: 'primary',\n zone: 'footer',\n name: 'reject',\n title: rejectAction.title,\n color: rejectAction.color,\n icon: rejectAction.icon,\n command: rejectAction.command,\n visible: rejectAction.visible,\n });\n }\n if (acceptAction) {\n raw.push({\n priority: 'primary',\n zone: 'footer',\n name: 'accept',\n title: acceptAction.title,\n color: acceptAction.color,\n icon: acceptAction.icon,\n command: acceptAction.command,\n visible: acceptAction.visible,\n });\n }\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async currentPageSecondaryActions() {\n const raw =\n store\n .currentPage()\n ?.actions?.filter(\n (a) => a.priority == 'secondary' && a.zone == 'header' && a.scope == AXPEntityCommandScope.TypeLevel,\n ) ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n currentPageContent() {\n return store.evaluatedPageContent();\n },\n\n currentPageTabs() {\n return store.currentPage()?.tabs?.filter((tab) => tab.visible !== false);\n },\n\n setCurrentPage(page: AXPLayoutDetailsViewPage | null) {\n const previousPage = store.currentPage();\n\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'setCurrentPage', () => pageQueryTraceContext({\n requestedPageId: page?.id ?? null,\n previousPageId: previousPage?.id ?? null,\n }));\n\n if (page) {\n if (!previousPage) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'setCurrentPage — ignored (initial load in progress)', () => pageQueryTraceContext({\n requestedPageId: page.id,\n }));\n return;\n }\n\n const pageParam = readPageQueryParam();\n const isSamePage = previousPage?.id === page.id && pageParam === page.id;\n\n if (!isSamePage && axpIsEntityDetailsViewRoute(router)) {\n AXPDebugService.instance?.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'viewmodel', 'setCurrentPage — navigate', () => pageQueryTraceContext({\n navigateToPageId: page.id,\n }));\n const queryParams: Record<string, string | null> = { page: page.id };\n if (previousPage?.id && previousPage.id !== page.id) {\n queryParams['filters'] = null;\n }\n\n router.navigate([], {\n relativeTo: route,\n queryParams,\n queryParamsHandling: 'merge',\n // Push history for desktop sidebar switches and mobile page-list picks.\n replaceUrl: false,\n });\n return;\n }\n\n void activatePageById(page.id);\n } else {\n patchState(store, {\n currentPage: null,\n currentTab: null,\n evaluatedPageContent: [],\n evaluatedTabContentsById: {},\n });\n if (axpIsEntityDetailsViewRoute(router)) {\n const currentParams = { ...route.snapshot.queryParams };\n delete currentParams['page'];\n router.navigate([], {\n relativeTo: route,\n queryParams: currentParams,\n replaceUrl: true,\n });\n }\n }\n },\n\n setCurrentTab(tab: AXPLayoutDetailsViewTabItem) {\n patchState(store, {\n currentTab: tab,\n });\n },\n\n //#region ---- Page layout metadata (title, description, back button, badge, status) ----\n\n backButtonTitle() {\n return store.showPages() ? (store.adapter()?.label ?? '') : (store.adapter()?.title ?? '');\n },\n\n async getPageTitle(): Promise<AXPMultiLanguageString> {\n if (store.showPages()) {\n const raw = store.adapter()?.title;\n return convertToMultiLanguageString(raw) ?? '';\n }\n const raw = store.currentPage()?.title;\n return convertToMultiLanguageString(raw) ?? '';\n },\n\n async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n if (store.showPages()) {\n const raw = store.adapter()?.description;\n return convertToMultiLanguageString(raw);\n }\n const raw = store.currentPage()?.description;\n return convertToMultiLanguageString(raw);\n },\n\n async getBackButton(): Promise<AXPBackButton | null> {\n const adapter = store.adapter();\n if (!adapter) {\n return null;\n }\n if ((adapter.pages?.length ?? 0) > 1) {\n const titleRaw = (\n store.showPages() ? (adapter.label ?? '') : (adapter.title ?? '')\n ) as AXPMultiLanguageString;\n return { title: convertToMultiLanguageString(titleRaw) ?? '@general:terms.common.back' };\n }\n const label = (adapter.label ?? '') as AXPMultiLanguageString;\n return { title: convertToMultiLanguageString(label) ?? '@general:terms.common.back' };\n },\n\n async getPageBadge(): Promise<AXPBadge | null> {\n if (store.currentPage()?.isReadonly) {\n return null;\n }\n const showPageBadge = await settingsService.get<boolean>(AXPCommonSettings.ShowPageBadge);\n if (!showPageBadge) {\n return null;\n }\n const adapter = store.adapter();\n if (!adapter?.getPageBadge) {\n return null;\n }\n return adapter.getPageBadge(store.context(), store.isDirty());\n },\n\n async getPageStatus(): Promise<AXPDetailsPageStatusChip | null> {\n const adapter = store.adapter();\n if (!adapter?.getPageStatus) {\n return null;\n }\n return adapter.getPageStatus(store.context(), store.currentPage());\n },\n\n //#endregion\n\n async primaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'primary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async secondaryActions() {\n const raw =\n store\n .adapter()\n ?.actions?.filter((a) => a.priority == 'secondary' && a.scope == AXPEntityCommandScope.TypeLevel) ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async breadcrumbs() {\n const rootContext = store.rootContext();\n const scope: AXPExpressionEvaluatorScope = {\n ...rootContext,\n context: {\n eval: (path: string) => get(rootContext, path),\n },\n };\n\n const breadcrumbs = await Promise.all(\n store.adapter()?.breadcrumbs?.map(async (b) => {\n const raw = (b?.title ?? '') as AXPMultiLanguageString;\n return {\n ...b,\n title: await resolveBreadcrumbTitleFields(raw, scope, rootContext),\n };\n }) ?? [],\n );\n\n // Add current page title as the last breadcrumb item\n const currentPageLabel = store.currentPage()?.label;\n const pages = store.adapter()?.pages ?? [];\n const primaryPage = pages.find((p) => p.isPrimary) ?? pages[0];\n const isMainPage = primaryPage?.id === store.currentPage()?.id;\n if (currentPageLabel && !isMainPage) {\n const pageScope: AXPExpressionEvaluatorScope = {\n ...store.context(),\n context: {\n eval: (path: string) => get(store.context(), path),\n },\n };\n breadcrumbs.push({\n title: await resolveBreadcrumbTitleFields(\n currentPageLabel as AXPMultiLanguageString,\n pageScope,\n store.context(),\n ),\n });\n }\n\n return breadcrumbs;\n },\n\n /** Aligns view-model context with the container after revert/commit (saved baseline). */\n applySavedState(context: Record<string, unknown>) {\n const snapshot = cloneDeep(context);\n patchState(store, {\n context: snapshot,\n savedContext: snapshot,\n previousContext: snapshot,\n formDirty: false,\n });\n },\n\n async discard() {\n const saved = cloneDeep(store.savedContext());\n patchState(store, {\n context: saved,\n previousContext: saved,\n formDirty: false,\n });\n },\n\n async save(\n command: AXPExecuteCommand,\n form: AXFormComponent,\n liveContext?: Record<string, unknown>,\n ): Promise<boolean> {\n const formResult = await form.validate();\n if (!formResult.result) {\n return false;\n }\n\n const payload = liveContext ?? store.context();\n\n patchState(store, {\n status: AXPPageStatus.Submitting,\n });\n\n try {\n const result = await store.currentPage()?.execute?.(command, payload);\n\n const enableOperationToasts = await settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n if (result?.success) {\n try {\n await this.loadPage(store.currentPage()?.id, true);\n } catch {\n //\n }\n\n patchState(store, {\n previousContext: store.context(),\n savedContext: cloneDeep(store.context()),\n formDirty: false,\n });\n\n if (enableOperationToasts) {\n toastService.show({\n color: 'success',\n title: await translateService.translateAsync('@general:messages.generic.success.title'),\n content: await translateService.translateAsync('@general:messages.generic.success.description'),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n\n return true;\n }\n\n const rawText = result?.message?.text;\n const errorText = rawText\n ? typeof rawText === 'string'\n ? rawText.startsWith('@')\n ? await translateService.translateAsync(rawText)\n : rawText\n : translateService.resolve(rawText)\n : await translateService.translateAsync('@general:messages.generic.error.description');\n\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:messages.generic.error.title'),\n content: errorText,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n\n return false;\n } catch (error: unknown) {\n const errorText =\n error instanceof Error\n ? error.message\n : await translateService.translateAsync('@general:messages.generic.error.description');\n\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:messages.generic.error.title'),\n content: errorText,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n\n return false;\n } finally {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n }\n },\n\n async goToListPage(): Promise<void> {\n const exitUrl = store.adapter()?.exitUrl;\n if (exitUrl) {\n await axpNavigateAppPath(router, exitUrl);\n }\n },\n };\n },\n ),\n);","//#region ---- Details View Action Shortcut Utilities ----\n\nimport type { AXPKeyboardShortcut, AXPKeyboardShortcutChord } from '@acorex/platform/core';\nimport { normalizeKeyboardShortcuts } from '@acorex/platform/core';\n\nexport type AXPDetailsViewActionShortcut = AXPKeyboardShortcutChord;\n\n/** Platform defaults for known entity detail commands when `shortcuts` is omitted on the action. */\nconst DEFAULT_ENTITY_DETAIL_ACTION_SHORTCUTS: Readonly<Record<string, readonly AXPDetailsViewActionShortcut[]>> = {\n 'delete-entity': ['ctrl+shift+delete'],\n};\n\nconst DEFAULT_FOOTER_COMMAND_SHORTCUTS: Readonly<Record<string, readonly AXPDetailsViewActionShortcut[]>> = {\n 'update-entity': ['ctrl+s'],\n discard: ['escape'],\n};\n\nconst SAVE_FOOTER_COMMAND_SUFFIX = ':Save';\nconst DISCARD_FOOTER_COMMAND_SUFFIX = ':Discard';\n\n/**\n * Returns the base workflow/command name from a composite entity action command id (`cmd&actionName`).\n */\nexport function getDetailsViewActionCommandBaseName(commandName: string | undefined): string {\n if (!commandName) {\n return '';\n }\n return commandName.split('&')[0];\n}\n\n/**\n * Resolves keyboard shortcuts for a header entity action.\n * Explicit `shortcuts` wins; pass `[]` to disable. Otherwise known commands use platform defaults.\n */\nexport function resolveDetailsViewActionShortcuts(\n commandBaseName: string,\n explicit?: readonly AXPKeyboardShortcut[],\n): AXPDetailsViewActionShortcut[] | undefined {\n if (explicit !== undefined) {\n const chords = flattenDetailsViewActionShortcuts(explicit);\n return chords.length ? chords : undefined;\n }\n\n const defaults = DEFAULT_ENTITY_DETAIL_ACTION_SHORTCUTS[commandBaseName];\n return defaults?.length ? [...defaults] : undefined;\n}\n\n/**\n * Resolves save/discard footer command shortcuts from page settings.\n */\nexport function resolveDetailsViewFooterCommandShortcuts(\n commandName: string,\n explicit?: readonly AXPKeyboardShortcut[],\n): AXPDetailsViewActionShortcut[] | undefined {\n if (explicit !== undefined) {\n const chords = flattenDetailsViewActionShortcuts(explicit);\n return chords.length ? chords : undefined;\n }\n\n const defaults = DEFAULT_FOOTER_COMMAND_SHORTCUTS[commandName];\n if (defaults?.length) {\n return [...defaults];\n }\n\n return resolvePageFooterActionDefaultShortcuts(commandName);\n}\n\n/**\n * Platform defaults for component-page footer save/discard commands (e.g. `MetaDataBuilder:Save`).\n */\nexport function resolvePageFooterActionDefaultShortcuts(\n commandName: string,\n): AXPDetailsViewActionShortcut[] | undefined {\n if (isSaveFooterCommand(commandName)) {\n return [...DEFAULT_FOOTER_COMMAND_SHORTCUTS['update-entity']];\n }\n\n if (isDiscardFooterCommand(commandName)) {\n return [...DEFAULT_FOOTER_COMMAND_SHORTCUTS['discard']];\n }\n\n return undefined;\n}\n\nexport function isSaveFooterCommand(commandName: string): boolean {\n return commandName === 'update-entity' || commandName.endsWith(SAVE_FOOTER_COMMAND_SUFFIX);\n}\n\nexport function isDiscardFooterCommand(commandName: string): boolean {\n return commandName === 'discard' || commandName.endsWith(DISCARD_FOOTER_COMMAND_SUFFIX);\n}\n\n/**\n * Resolves keyboard shortcuts for a footer action on entity detail sub-pages.\n */\nexport function resolvePageFooterActionShortcuts(\n commandName: string,\n explicit?: readonly AXPKeyboardShortcut[],\n): AXPDetailsViewActionShortcut[] | undefined {\n return resolveDetailsViewFooterCommandShortcuts(commandName, explicit);\n}\n\nfunction flattenDetailsViewActionShortcuts(\n shortcuts: readonly AXPKeyboardShortcut[],\n): AXPDetailsViewActionShortcut[] {\n const chords = normalizeKeyboardShortcuts(shortcuts).flatMap((shortcut) => shortcut.keys);\n return dedupeDetailsViewActionShortcuts(chords);\n}\n\nfunction dedupeDetailsViewActionShortcuts(\n shortcuts: readonly AXPDetailsViewActionShortcut[],\n): AXPDetailsViewActionShortcut[] {\n const seen = new Set<string>();\n const result: AXPDetailsViewActionShortcut[] = [];\n\n for (const shortcut of shortcuts) {\n const token = shortcut.trim().toLowerCase();\n if (!token || seen.has(token)) {\n continue;\n }\n seen.add(token);\n result.push(shortcut.trim());\n }\n\n return result;\n}\n\n//#endregion\n","import { AXPPageLayoutBaseComponent } from '../../layouts';\nimport { Injectable } from '@angular/core';\n\n/**\n * Registry of rendered page component instances by component key.\n * Used so page execute can delegate to the actual component instance in the view.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPPageComponentInstanceRegistryService {\n private readonly instances = new Map<string, AXPPageLayoutBaseComponent>();\n\n register(key: string, instance: AXPPageLayoutBaseComponent): void {\n this.instances.set(key, instance);\n }\n\n unregister(key: string): void {\n this.instances.delete(key);\n }\n\n get(key: string): AXPPageLayoutBaseComponent | null {\n return this.instances.get(key) ?? null;\n }\n}\n","import { AXPPageComponentRegistryService } from '@acorex/platform/layout/components';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport { ComponentRef, Directive, effect, inject, input, OnDestroy, OnInit, output, ViewContainerRef } from '@angular/core';\nimport { AXPPageComponentInstanceRegistryService } from './page-component-instance-registry.service';\n\n//#region ---- Page Component Renderer Directive ----\n\n/**\n * Directive for rendering page components dynamically\n * Similar to component-slot pattern but specifically for page components\n */\n@Directive({\n selector: '[axp-page-component-renderer]',\n standalone: true,\n})\nexport class AXPPageComponentRendererDirective implements OnInit, OnDestroy {\n componentKey = input.required<string>();\n rootContext = input<Record<string, any>>({});\n pageConfig = input<Record<string, unknown>>();\n options = input<Record<string, any>>({});\n\n /** Emitted when the component instance is registered and ready */\n componentReady = output<string>();\n\n /** Returns the dynamically mounted page component instance, if loaded. */\n getMountedPageInstance(): unknown {\n return this.componentRef?.instance ?? null;\n }\n\n private viewContainerRef = inject(ViewContainerRef);\n private pageComponentRegistry = inject(AXPPageComponentRegistryService);\n private instanceRegistry = inject(AXPPageComponentInstanceRegistryService);\n private contextStore = inject(AXPContextStore);\n private componentRef: ComponentRef<any> | null = null;\n\n #contextEffect = effect(() => {\n const context = this.rootContext();\n if (this.componentRef && context) {\n this.componentRef.setInput('rootContext', context);\n }\n });\n\n #pageConfigEffect = effect(() => {\n const config = this.pageConfig();\n if (this.componentRef && config) {\n this.componentRef.setInput('pageConfig', config);\n }\n });\n\n #optionsEffect = effect(() => {\n const options = this.options();\n if (this.componentRef && options) {\n this.componentRef.setInput('options', options);\n }\n });\n\n async ngOnInit(): Promise<void> {\n await this.loadComponent();\n }\n\n ngOnDestroy(): void {\n if (this.componentRef) {\n this.syncWizardStepContextBeforeTeardown();\n this.instanceRegistry.unregister(this.componentKey());\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n\n /** Persists page edits into the shared form context before the step component is destroyed. */\n private syncWizardStepContextBeforeTeardown(): void {\n const instance = this.componentRef?.instance;\n const partial = instance?.getWizardStepContext?.();\n if (!partial || typeof partial !== 'object') {\n return;\n }\n for (const [path, value] of Object.entries(partial as Record<string, unknown>)) {\n this.contextStore.update(path, value, { origin: 'system' });\n }\n }\n\n private async loadComponent(): Promise<void> {\n try {\n // Clear any existing component\n this.viewContainerRef.clear();\n\n // Get component loader from registry\n const loader = await this.pageComponentRegistry.find(this.componentKey());\n if (!loader) {\n console.error(`Component with key \"${this.componentKey()}\" not found in registry`);\n return;\n }\n\n // Load component type\n const ComponentType = await loader();\n\n // Create component instance\n this.componentRef = this.viewContainerRef.createComponent(ComponentType);\n this.instanceRegistry.register(this.componentKey(), this.componentRef.instance);\n\n const context = this.rootContext();\n if (context) {\n this.componentRef.setInput('rootContext', context);\n }\n\n const options = this.options();\n if (options) {\n this.componentRef.setInput('options', options);\n }\n\n const pageConfig = this.pageConfig();\n if (pageConfig) {\n this.componentRef.setInput('pageConfig', pageConfig);\n }\n\n // Notify that component is ready (allows parent to re-fetch actions)\n this.componentReady.emit(this.componentKey());\n } catch (error) {\n console.error(`Failed to load component \"${this.componentKey()}\":`, error);\n }\n }\n}\n\n//#endregion\n","import { AXPEntityCommandScope } from '@acorex/platform/layout/entity-contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n OnDestroy,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\n//\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXTabsComponent, AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXP_ENTITY_DELETED_WORKFLOW_EVENT_TYPE, type AXPEntityDeletedEventPayload, AXPUnsavedChangesPopstateService } from '@acorex/platform/common';\nimport { AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, AXPPageStatus } from '@acorex/platform/contracts';\nimport { AXPContextChangeEvent, summarizeFormContextDirtyDiff } from '@acorex/platform/contracts';\nimport { AXPActionMenuItem, AXPBroadcastEventService, AXPDeviceService, AXPDebugService, AXPKeyboardShortcutBinding, AXPKeyboardShortcutPriority, AXPKeyboardShortcutRegistry, FORM_DIRTY_TRACE_NS, OVERLAY_DETAILS_VIEW_TRACE_NS } from '@acorex/platform/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWidgetContainerComponent, AXPWidgetCoreElement, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { ActivatedRoute } from '@angular/router';\nimport { filter, Subject, Subscription, takeUntil } from 'rxjs';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n buildNotSavedPageBadge,\n isDiscardCommand,\n} from '../../layouts';\nimport {\n getDetailsViewActionCommandBaseName,\n isDiscardFooterCommand,\n isSaveFooterCommand,\n resolveDetailsViewActionShortcuts,\n resolveDetailsViewFooterCommandShortcuts,\n resolvePageFooterActionShortcuts,\n} from './details-view-action-shortcuts.util';\nimport {\n AXPLayoutDetailsViewAction,\n AXPLayoutDetailsViewPage,\n AXPPageContentItem,\n} from './details-view.adapter';\nimport { AXPLayoutDetailsViewViewModel } from './details-view.viewmodel';\nimport { DETAILS_VIEW_PAGE_TRACE_NS } from './details-view-trace.constants';\n\n/** Registered id of the data-list inside related-entity `page-list` sidebar pages. */\nconst PAGE_LIST_TABLE_WIDGET_ID = 'page-list_table';\nimport { AXPPageComponentInstanceRegistryService } from './page-component-instance-registry.service';\nimport { AXPPageComponentRendererDirective } from './page-component-renderer.directive';\n\ninterface AXPDetailsViewActionShortcutEntry {\n command: AXPExecuteCommand;\n /** i18n key or plain label for the help dialog. */\n title: string;\n chords: string[];\n visible: boolean;\n disabled: boolean;\n}\n\n@Component({\n templateUrl: './details-view.component.html',\n styleUrl: './details-view.component.scss',\n selector: 'axp-layout-details-view',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n AXSearchBoxModule,\n AXTabsModule,\n //\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPWidgetCoreModule,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXFormModule,\n AXPPageComponentRendererDirective,\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPLayoutDetailsViewComponent,\n },\n AXPLayoutDetailsViewViewModel,\n ],\n})\nexport class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {\n //\n protected vm = inject(AXPLayoutDetailsViewViewModel);\n protected route = inject(ActivatedRoute);\n protected eventService = inject(AXPBroadcastEventService);\n protected deviceService = inject(AXPDeviceService);\n private readonly unsavedChangesPopstate = inject(AXPUnsavedChangesPopstateService);\n private readonly pageComponentInstanceRegistry = inject(AXPPageComponentInstanceRegistryService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly workflowService = inject(AXPWorkflowService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly debug = inject(AXPDebugService);\n private onSelectionChangeSubscription?: Subscription;\n /** Cancels in-flight list selection bind when the sidebar page or widget tree changes. */\n private pageListSelectionBindGeneration = 0;\n\n /** Prevents sidebar tab init events from pushing history before the first page activation completes. */\n private readonly detailsLayoutReady = signal(false);\n\n private readonly destroyed$ = new Subject<void>();\n private footerActionsGeneration = 0;\n private keyboardShortcutRegistrationGeneration = 0;\n private overlayFallbackTimer?: ReturnType<typeof setTimeout>;\n /** Page id the overlay release logic is bound to; reset on sidebar/page switch. */\n private overlayTargetPageId: string | null = null;\n /** After a page switch, wait for widget registry to clear before accepting remounted widgets. */\n private overlaySawZeroWidgetsAfterPageChange = false;\n /** Cancels in-flight overlay release when the page changes. */\n private overlayReleaseGeneration = 0;\n private overlayReleasePromise?: Promise<void>;\n\n /** Safety cap when widget ready detection does not settle. */\n private static readonly overlayMaxWaitMs = 30_000;\n\n /** Header actions with resolved shortcut chords, keyed by command name. */\n private readonly actionShortcutEntries = signal<Map<string, AXPDetailsViewActionShortcutEntry>>(new Map());\n\n /** Save/discard use live {@link AXPLayoutDetailsViewViewModel.isDirty}; other actions use evaluated `visible`. */\n private static isTruthyActionFlag(value: boolean | string | undefined | null): boolean {\n if (value === true) {\n return true;\n }\n if (value === false || value == null) {\n return false;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'false' || normalized === '0' || normalized === '') {\n return false;\n }\n if (normalized === 'true') {\n return true;\n }\n // Unevaluated template expressions must not keep footer actions visible or disabled.\n if (normalized.startsWith('{{')) {\n return false;\n }\n return true;\n }\n return Boolean(value);\n }\n\n protected form = viewChild<AXFormComponent>('form');\n protected widgetContainer = viewChild<AXPWidgetContainerComponent>(AXPWidgetContainerComponent);\n private readonly sidebarTabs = viewChild<AXTabsComponent>('sidebarTabs');\n private sidebarTabChangeSuppressed = false;\n\n /** Syncs the line indicator when the active page changes programmatically. */\n #sidebarTabsIndicatorEffect = effect(() => {\n const pages = this.vm.adapter()?.pages;\n const currentId = this.vm.currentPage()?.id;\n if (!pages?.length || !currentId) {\n return;\n }\n\n const index = pages.findIndex((page) => page.id === currentId);\n if (index < 0) {\n return;\n }\n\n untracked(() =>\n queueMicrotask(() => {\n this.debug.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'details-view', 'sidebarTabs select (sync indicator)', () => ({\n currentPageId: currentId,\n tabIndex: index,\n routerUrl: this.router.url,\n }));\n this.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(index);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }),\n );\n });\n\n /**\n * Binds list selection whenever `page-list_table` registers (including after remount).\n * `find()` / `waitForWidget()` can return a destroyed instance; registration always carries the live widget.\n */\n #pageListSelectionBindEffect = effect((onCleanup) => {\n const pageId = this.vm.currentPage()?.id;\n const isPageReady = this.vm.isPageReady();\n\n if (!pageId || this.vm.showPages() || !isPageReady || this.getActivePageComponentKey()) {\n return;\n }\n\n this.vm.currentPageContent();\n\n if (!this.pageHasEntityListWidget()) {\n return;\n }\n\n const generation = ++this.pageListSelectionBindGeneration;\n const container = this.widgetContainer();\n if (!container) {\n return;\n }\n\n const builder = container.builderService;\n\n onCleanup(() => {\n this.onSelectionChangeSubscription?.unsubscribe();\n this.onSelectionChangeSubscription = undefined;\n });\n\n const registrationSub = builder.widgetRegistered$.subscribe(({ id, widget }) => {\n if (id !== PAGE_LIST_TABLE_WIDGET_ID) {\n return;\n }\n\n this.attachSelectionToListWidget(pageId, generation, widget);\n });\n\n onCleanup(() => registrationSub.unsubscribe());\n\n const existing = builder.getWidget(PAGE_LIST_TABLE_WIDGET_ID);\n if (existing) {\n untracked(() => this.attachSelectionToListWidget(pageId, generation, existing));\n }\n });\n\n /** Clears the page overlay reactively once VM + widget hydration are both idle. */\n #overlayReleaseEffect = effect(() => {\n const showPages = this.vm.showPages();\n const pageId = this.vm.currentPage()?.id;\n const isVmBusy = this.vm.isOverlayBusy();\n const isPageReady = this.vm.isPageReady();\n const container = this.widgetContainer();\n\n this.vm.currentPageContent();\n this.vm.activeTabContent();\n this.vm.context();\n\n container?.builderService.registeredWidgetsCount();\n container?.builderService.isHydrating();\n container?.isBusy();\n container?.isWidgetsReady();\n const widgetCount = container?.builderService.registeredWidgetsCount() ?? 0;\n const widgetsBusy = container?.isBusy() ?? false;\n const widgetsReady = container?.isWidgetsReady() ?? false;\n\n untracked(() => {\n const widgetSnapshot = container?.builderService.getWidgetStateSnapshot();\n\n if (pageId !== this.overlayTargetPageId) {\n const isInitialOverlayBind = this.overlayTargetPageId == null;\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'page bind changed', () => ({\n pageId,\n previousPageId: this.overlayTargetPageId,\n isInitialOverlayBind,\n overlayReleaseGeneration: this.overlayReleaseGeneration + 1,\n }));\n this.overlayTargetPageId = pageId ?? null;\n // First bind: widgets mount without a prior page registry. Sidebar switch: require clear first.\n this.overlaySawZeroWidgetsAfterPageChange = isInitialOverlayBind;\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearOverlayFallback();\n }\n\n if (showPages) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'showPages — release overlay', () => ({ isVmBusy }));\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearOverlayFallback();\n if (!isVmBusy) {\n this.clearPageOverlay('showPages — release overlay');\n }\n return;\n }\n\n if (isVmBusy || !isPageReady || !pageId) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'waiting on VM', () => ({\n pageId,\n isVmBusy,\n isPageReady,\n }));\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearOverlayFallback();\n return;\n }\n\n if (this.getActivePageComponentKey()) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'component page — release overlay', () => ({\n componentKey: this.getActivePageComponentKey(),\n }));\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearOverlayFallback();\n this.clearPageOverlay('component page — release overlay');\n return;\n }\n\n if (!this.pageHasWidgetNodes()) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'no widget nodes — release overlay', () => ({ pageId }));\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearOverlayFallback();\n this.clearPageOverlay('no widget nodes — release overlay');\n return;\n }\n\n if (widgetCount === 0) {\n this.overlaySawZeroWidgetsAfterPageChange = true;\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'widget registry cleared (remount gate open)', () => ({ pageId }));\n }\n\n if (!this.overlaySawZeroWidgetsAfterPageChange) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'blocked: remount gate (await widgetCount=0)', () => ({\n pageId,\n widgetCount,\n ...widgetSnapshot,\n }));\n this.scheduleOverlayFallback();\n return;\n }\n\n if (!widgetsReady || widgetsBusy) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'blocked: widgets not ready', () => ({\n pageId,\n widgetsReady,\n widgetsBusy,\n overlaySawZero: this.overlaySawZeroWidgetsAfterPageChange,\n releaseInFlight: !!this.overlayReleasePromise,\n ...widgetSnapshot,\n hydratingWidgets: widgetSnapshot?.widgets?.filter((w) => w.isHydrating).map((w) => w.id),\n renderingWidgets: widgetSnapshot?.widgets?.filter((w) => w.status === 'rendering').map((w) => w.id),\n }));\n this.scheduleOverlayFallback();\n return;\n }\n\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'request overlay release', () => ({\n pageId,\n overlayReleaseGeneration: this.overlayReleaseGeneration,\n ...widgetSnapshot,\n }));\n void this.requestOverlayRelease(pageId);\n });\n });\n\n protected footerPrimaryActions = signal<AXPActionMenuItem[]>([]);\n protected footerSecondaryActions = signal<AXPActionMenuItem[]>([]);\n\n protected footerActions = computed(() => [...this.footerPrimaryActions(), ...this.footerSecondaryActions()]);\n\n protected rejectFooterCommand = computed(() => {\n if (this.vm.currentPage()?.isReadonly) {\n return null;\n }\n return this.vm.currentPage()?.settings?.commands?.reject ?? null;\n });\n\n protected acceptFooterCommand = computed(() => {\n if (this.vm.currentPage()?.isReadonly) {\n return null;\n }\n return this.vm.currentPage()?.settings?.commands?.accept ?? null;\n });\n\n protected hasSaveDiscardFooterCommands = computed(() => !!(this.rejectFooterCommand() || this.acceptFooterCommand()));\n\n /** Entity save/discard — driven live by widget/container dirty state, not evaluated action metadata. */\n protected showSaveDiscardFooter = computed(() => this.hasSaveDiscardFooterCommands() && this.liveFormIsDirty());\n\n /** Live dirty flag for widget-based entity forms (not component-hosted pages). */\n protected liveFormIsDirty = computed(() => {\n if (this.vm.currentPage()?.isReadonly || this.getActivePageComponentKey()) {\n return false;\n }\n if (this.vm.isOverlayBusy()) {\n return false;\n }\n const container = this.widgetContainer();\n if (!container?.isSavedCommitted()) {\n return false;\n }\n return container.isFormDirty();\n });\n\n protected hasVisibleFooterPrimaryActions = computed(() => {\n if (this.showSaveDiscardFooter()) {\n return true;\n }\n return this.footerPrimaryActions().some(\n (action) => !this.isSaveDiscardFooterAction(action) && this.isFooterActionVisible(action),\n );\n });\n\n protected hasVisibleFooterSecondaryActions = computed(() =>\n this.footerSecondaryActions().some((action) => this.isFooterActionVisible(action)),\n );\n\n protected isSaveDiscardFooterAction(action: AXPActionMenuItem): boolean {\n const commandName = action.command?.name;\n const acceptCommand = this.vm.currentPage()?.settings?.commands?.accept?.command?.name;\n const rejectCommand = this.vm.currentPage()?.settings?.commands?.reject?.command?.name;\n return (\n action.name === 'accept' ||\n action.name === 'reject' ||\n commandName === 'update-entity' ||\n commandName === 'discard' ||\n (!!acceptCommand && commandName === acceptCommand) ||\n (!!rejectCommand && commandName === rejectCommand)\n );\n }\n\n protected isFooterActionVisible(action: AXPActionMenuItem): boolean {\n if (this.isSaveDiscardFooterAction(action)) {\n return false;\n }\n return AXPLayoutDetailsViewComponent.isTruthyActionFlag(action.visible);\n }\n\n protected isFooterActionDisabled(action: AXPActionMenuItem): boolean {\n if (this.vm.isOverlayBusy()) {\n return true;\n }\n return AXPLayoutDetailsViewComponent.isTruthyActionFlag(action.disabled);\n }\n\n protected hasFooter = computed(() => {\n return (\n (this.hasVisibleFooterPrimaryActions() || this.hasVisibleFooterSecondaryActions()) &&\n !this.vm.currentPage()?.isReadonly\n );\n });\n\n /**\n * Re-fetches the entity adapter and reloads the active page.\n */\n protected async refreshLayout(): Promise<void> {\n this.unsavedChangesConfirm.markLeaveConfirmed();\n this.detailsLayoutReady.set(false);\n try {\n await this.vm.loadFromRoute(true);\n } finally {\n this.detailsLayoutReady.set(true);\n }\n }\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.debug.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'details-view', 'ngOnInit — before loadFromRoute', () => ({\n routerUrl: this.router.url,\n pageFromRouterUrl: this.router.parseUrl(this.router.url).queryParams['page'] ?? null,\n pageFromRouteSnapshot: this.route.snapshot.queryParamMap.get('page'),\n }));\n\n this.unsavedChangesPopstate.registerSource({\n id: 'axp-layout-details-view',\n isDirty: () => this.hasUnsavedChanges(),\n });\n this.destroyRef.onDestroy(() => this.unsavedChangesPopstate.unregisterSource('axp-layout-details-view'));\n //\n await this.vm.loadFromRoute();\n\n this.debug.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'details-view', 'ngOnInit — after loadFromRoute', () => ({\n routerUrl: this.router.url,\n currentPageId: this.vm.currentPage()?.id ?? null,\n }));\n\n this.detailsLayoutReady.set(true);\n\n void this.refreshKeyboardShortcutRegistrations(++this.keyboardShortcutRegistrationGeneration);\n\n this.eventService\n //TODO: Use the constant from the entity module\n .listen('entity:refresh-layout')\n .pipe(takeUntil(this.destroyed$))\n .subscribe((e) => {\n if ((e.data as any).name == this.vm.adapter()?.name) {\n this.refreshLayout();\n }\n });\n\n this.workflowService.events$\n .pipe(\n filter((event) => event.type === AXP_ENTITY_DELETED_WORKFLOW_EVENT_TYPE),\n takeUntil(this.destroyed$),\n )\n .subscribe((event) => {\n void this.handleEntityDeleted(event.payload as AXPEntityDeletedEventPayload | undefined);\n });\n }\n\n /** Navigates to {@link AXPLayoutDetailsViewAdapter.exitUrl} when the open record was deleted. */\n private async handleEntityDeleted(payload: AXPEntityDeletedEventPayload | undefined): Promise<void> {\n if (!payload?.entity || !payload.ids?.length) {\n return;\n }\n\n const adapterName = this.vm.adapter()?.name;\n const recordId = this.vm.context()?.['id'];\n if (!adapterName || recordId == null) {\n return;\n }\n\n const deletedIds = payload.ids.map((id) => String(id));\n if (payload.entity !== adapterName || !deletedIds.includes(String(recordId))) {\n return;\n }\n\n this.unsavedChangesConfirm.markLeaveConfirmed();\n\n if (this.tabNavigation.effectiveMode() === 'tabular') {\n const tabKey = this.getPageTabKey();\n await this.vm.goToListPage();\n if (tabKey) {\n this.unsavedChangesConfirm.markLeaveConfirmed();\n await this.tabNavigation.closeTab(tabKey);\n }\n return;\n }\n\n await this.vm.goToListPage();\n }\n\n ngOnDestroy(): void {\n this.onSelectionChangeSubscription?.unsubscribe();\n ++this.keyboardShortcutRegistrationGeneration;\n this.clearOverlayFallback();\n this.overlayReleaseGeneration += 1;\n this.overlayReleasePromise = undefined;\n this.clearPageOverlay('ngOnDestroy');\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n #formDirtyEffect = effect(() => {\n if (this.vm.currentPage()?.isReadonly || this.getActivePageComponentKey()) {\n return;\n }\n if (this.vm.isOverlayBusy()) {\n return;\n }\n\n const container = this.widgetContainer();\n if (!container?.isSavedCommitted()) {\n if (this.vm.formDirty()) {\n untracked(() => this.vm.setFormDirty(false));\n }\n return;\n }\n\n const isDirty = container.isFormDirty();\n if (this.vm.formDirty() === isDirty) {\n return;\n }\n\n untracked(() => {\n this.debug.trace(FORM_DIRTY_TRACE_NS, 'details-view', 'formDirty effect', () => ({\n isDirty,\n vmFormDirty: this.vm.formDirty(),\n }));\n this.vm.setFormDirty(isDirty);\n this.recompute();\n });\n });\n\n /** Refresh title badge (Not Saved) when dirty state changes. */\n #headerBadgeEffect = effect(() => {\n this.liveFormIsDirty();\n this.vm.currentPage()?.id;\n this.isActivePageComponentDirty();\n untracked(() => this.recompute());\n });\n\n #FooterActionsEffect = effect(() => {\n const generation = ++this.footerActionsGeneration;\n this.updateTrigger();\n this.liveFormIsDirty();\n this.vm.isOverlayBusy();\n void this.refreshFooterActions(generation);\n });\n\n #keyboardShortcutsEffect = effect(() => {\n const generation = ++this.keyboardShortcutRegistrationGeneration;\n this.updateTrigger();\n this.liveFormIsDirty();\n this.isActivePageComponentDirty();\n this.vm.isOverlayBusy();\n this.vm.currentPage()?.id;\n untracked(() => void this.refreshKeyboardShortcutRegistrations(generation));\n });\n\n private async refreshFooterActions(generation: number): Promise<void> {\n const [footerPrimaryActions, footerSecondaryActions] = await Promise.all([\n this.getFooterPrimaryActions(),\n this.getFooterSecondaryActions(),\n ]);\n if (generation !== this.footerActionsGeneration) {\n return;\n }\n this.footerPrimaryActions.set(footerPrimaryActions);\n this.footerSecondaryActions.set(footerSecondaryActions);\n }\n\n /** Whether the active page hosts a related-entity list (`page-list` widget). */\n private pageHasEntityListWidget(): boolean {\n return this.vm.currentPageContent().some((item) => {\n if ('type' in item && item.type === 'component') {\n return false;\n }\n return item.name === 'page-list';\n });\n }\n\n /** Subscribes to the live data-list selection stream for Selected-scope header actions. */\n private attachSelectionToListWidget(pageId: string, generation: number, widget: AXPWidgetCoreElement): void {\n if (generation !== this.pageListSelectionBindGeneration || this.vm.currentPage()?.id !== pageId) {\n return;\n }\n\n const selectionStream = widget.api()['onSelectionChange'];\n if (!selectionStream || typeof (selectionStream as Subject<unknown[]>).subscribe !== 'function') {\n return;\n }\n\n this.onSelectionChangeSubscription?.unsubscribe();\n this.onSelectionChangeSubscription = (selectionStream as Subject<unknown[]>).subscribe((rows: unknown[]) => {\n this.vm.updatePageSelectedRows(rows);\n this.recompute();\n });\n }\n\n protected handleOnContextChanged(e: AXPContextChangeEvent) {\n if (\n !this.vm.currentPage()?.isReadonly &&\n !this.getActivePageComponentKey() &&\n this.widgetContainer()?.isSavedCommitted()\n ) {\n const isDirty = e.isFormDirty ?? false;\n const container = this.widgetContainer();\n this.debug.trace(FORM_DIRTY_TRACE_NS, 'details-view', 'handleOnContextChanged', () => ({\n isFormDirty: isDirty,\n vmFormDirty: this.vm.formDirty(),\n changePath: e.path,\n changeOrigin: e.origin,\n userEditedSinceCommit: container?.contextService.hasUserEditedSinceCommit(),\n dirtyPaths: container\n ? summarizeFormContextDirtyDiff(\n container.contextService.data() as Record<string, unknown>,\n container.contextService.saved() as Record<string, unknown>,\n )\n : [],\n }));\n if (this.vm.formDirty() !== isDirty) {\n this.vm.setFormDirty(isDirty);\n }\n }\n this.recompute();\n }\n\n private getLiveFormContext(): Record<string, unknown> {\n const container = this.widgetContainer();\n return (container?.contextService.data() ?? this.vm.context()) as Record<string, unknown>;\n }\n\n /** Whether the active page renders widget nodes (not only hosted components). */\n private pageHasWidgetNodes(): boolean {\n const pageWidgets = this.vm.currentPageContent();\n if (pageWidgets.some((item) => !('type' in item && item.type === 'component'))) {\n return true;\n }\n return this.vm.activeTabContent().length > 0;\n }\n\n /** Clears all overlay loading tasks once the page (or hosted view) is ready. */\n private clearPageOverlay(reason: string): void {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', reason, () => ({\n taskCount: this.layoutService.overlayTaskCount(),\n }));\n this.layoutService.clearOverlayLoading();\n }\n\n private scheduleOverlayFallback(): void {\n if (this.overlayFallbackTimer) {\n return;\n }\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'schedule fallback timer', () => ({\n timeoutMs: AXPLayoutDetailsViewComponent.overlayMaxWaitMs,\n pageId: this.overlayTargetPageId,\n }));\n this.overlayFallbackTimer = setTimeout(() => {\n this.overlayFallbackTimer = undefined;\n const isOverlayLoading = this.layoutService.isOverlayLoading();\n const isVmBusy = this.vm.isOverlayBusy();\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'fallback timer fired', () => ({\n isOverlayLoading,\n isVmBusy,\n pageId: this.overlayTargetPageId,\n }));\n if (!isOverlayLoading) {\n return;\n }\n if (!isVmBusy) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'fallback forcing overlay off', () => ({\n taskCount: this.layoutService.overlayTaskCount(),\n }));\n this.clearPageOverlay('fallback forcing overlay off');\n }\n }, AXPLayoutDetailsViewComponent.overlayMaxWaitMs);\n }\n\n private clearOverlayFallback(): void {\n if (this.overlayFallbackTimer) {\n clearTimeout(this.overlayFallbackTimer);\n this.overlayFallbackTimer = undefined;\n }\n }\n\n /**\n * Hides overlay after the widget container reports continuous idle (same gate as saved baseline).\n */\n private requestOverlayRelease(pageId: string | null): void {\n if (this.overlayReleasePromise) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release skipped — already in flight', () => ({ pageId }));\n return;\n }\n\n const generation = this.overlayReleaseGeneration;\n const container = this.widgetContainer();\n if (!container) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release skipped — no container', () => ({ pageId }));\n this.scheduleOverlayFallback();\n return;\n }\n\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'waitUntilSettled started', () => ({ pageId, generation }));\n\n this.overlayReleasePromise = container\n .waitUntilSettled()\n .then(() => {\n const latest = this.widgetContainer();\n const snapshot = latest?.builderService.getWidgetStateSnapshot();\n\n if (generation !== this.overlayReleaseGeneration) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release aborted — generation mismatch', () => ({\n pageId,\n generation,\n currentGeneration: this.overlayReleaseGeneration,\n }));\n return;\n }\n if (pageId !== this.overlayTargetPageId || pageId !== this.vm.currentPage()?.id) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release aborted — page changed', () => ({\n pageId,\n overlayTargetPageId: this.overlayTargetPageId,\n currentPageId: this.vm.currentPage()?.id,\n }));\n return;\n }\n if (this.vm.isOverlayBusy()) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release aborted — VM still busy', () => ({ pageId }));\n return;\n }\n\n if (!latest?.isWidgetsReady() || latest.isBusy()) {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release aborted — widgets not ready after settle', () => ({\n pageId,\n widgetsReady: latest?.isWidgetsReady(),\n widgetsBusy: latest?.isBusy(),\n ...snapshot,\n }));\n return;\n }\n\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'release overlay OFF', () => ({\n pageId,\n generation,\n taskCount: this.layoutService.overlayTaskCount(),\n ...snapshot,\n }));\n this.clearOverlayFallback();\n this.clearPageOverlay('widgets settled — release overlay');\n })\n .finally(() => {\n this.overlayReleasePromise = undefined;\n });\n }\n\n private async finalizeSave(): Promise<void> {\n const container = this.widgetContainer();\n if (!container) {\n this.vm.setFormDirty(false);\n return;\n }\n\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'finalizeSave overlay ON');\n this.layoutService.setOverlayLoading(true);\n try {\n const savedContext = this.vm.context() as Record<string, unknown>;\n await container.replaceContext(savedContext);\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n if (!this.getActivePageComponentKey()) {\n await container.settleSavedBaseline();\n }\n } finally {\n this.debug.trace(OVERLAY_DETAILS_VIEW_TRACE_NS, 'details-view', 'finalizeSave overlay OFF');\n this.layoutService.setOverlayLoading(false);\n }\n }\n\n private finalizeDiscard(): void {\n this.debug.trace(FORM_DIRTY_TRACE_NS, 'details-view', 'finalizeDiscard');\n const container = this.widgetContainer();\n if (container) {\n container.revertAndSettle();\n const saved = container.contextService.saved() as Record<string, unknown>;\n this.vm.applySavedState(saved);\n return;\n }\n\n void this.vm.discard();\n }\n\n /** Reverts widget form state and view-model context to the last saved baseline. */\n private async discardUnsavedChanges(): Promise<void> {\n this.finalizeDiscard();\n this.recompute();\n }\n\n /**\n * `ax-tabs` selects on click before we can confirm. Revert synchronously, then confirm + switch.\n */\n protected handleSidebarTabChanged(event: AXTabStripChangedEvent): void {\n if (!this.detailsLayoutReady() || this.sidebarTabChangeSuppressed) {\n return;\n }\n\n const pages = this.vm.adapter()?.pages ?? [];\n const target = pages[event.index];\n const currentId = this.vm.currentPage()?.id;\n\n if (!currentId || !target || target.id === currentId) {\n return;\n }\n\n this.debug.trace(DETAILS_VIEW_PAGE_TRACE_NS, 'details-view', 'handleSidebarTabChanged', () => ({\n routerUrl: this.router.url,\n targetPageId: target.id,\n currentPageId: currentId ?? null,\n tabIndex: event.index,\n }));\n\n const activeIndex = pages.findIndex((page) => page.id === currentId);\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.completePageSwitch(target);\n }\n\n protected async handleSelectPage(page: AXPLayoutDetailsViewPage) {\n if (page.id === this.vm.currentPage()?.id) {\n return;\n }\n\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n this.vm.setCurrentPage(page);\n }\n\n private async completePageSwitch(page: AXPLayoutDetailsViewPage): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n this.vm.setCurrentPage(page);\n }\n\n protected async getAllPrimaryActions(): Promise<AXPLayoutDetailsViewAction[]> {\n if (!this.vm.showPages()) {\n const [primaryActions, pagePrimaryActions] = await Promise.all([\n this.vm.primaryActions(),\n this.vm.currentPagePrimaryActions(),\n ]);\n return [...primaryActions, ...pagePrimaryActions];\n } else {\n return [];\n }\n }\n\n public override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllPrimaryActions()).filter((a) => {\n return (\n a.priority == 'primary' &&\n (((a as any).scope == AXPEntityCommandScope.Selected && this.vm.currentPageSelectedRows().length) ||\n (((a as any).scope == AXPEntityCommandScope.TypeLevel || !(a as any).scope) &&\n a.zone != 'footer' &&\n !this.vm.currentPageSelectedRows().length))\n );\n });\n }\n\n protected async getFooterPrimaryActions(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllPrimaryActions()).filter((item) => item.zone == 'footer');\n }\n\n protected async getAllSecondaryActions(): Promise<AXPLayoutDetailsViewAction[]> {\n if (!this.vm.showPages()) {\n const [secondaryActions, pageSecondaryActions] = await Promise.all([\n this.vm.secondaryActions(),\n this.vm.currentPageSecondaryActions(),\n ]);\n return [...secondaryActions, ...pageSecondaryActions];\n } else {\n return [];\n }\n }\n\n public override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllSecondaryActions()).filter((item) => item.zone == 'header');\n }\n\n protected async getFooterSecondaryActions(): Promise<AXPActionMenuItem[]> {\n return (await this.getAllSecondaryActions()).filter((item) => item.zone == 'footer');\n }\n\n protected override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return (await this.vm.breadcrumbs()) ?? [];\n }\n\n protected override async getPageTitle(): Promise<AXPMultiLanguageString> {\n return this.vm.getPageTitle();\n }\n\n override async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n return this.vm.getPageDescription();\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n return this.vm.getBackButton();\n }\n\n override hasUnsavedChanges(): boolean {\n return this.shouldPromptLeave();\n }\n\n override async getPageBadge(): Promise<AXPBadge | null> {\n if (this.vm.currentPage()?.isReadonly) {\n return null;\n }\n\n const componentInstance = this.getActivePageComponentInstance();\n if (componentInstance) {\n return componentInstance.resolvePageBadge();\n }\n\n if (!this.liveFormIsDirty()) {\n return null;\n }\n\n return buildNotSavedPageBadge(this.translateService, this.settingsService);\n }\n\n override async getPageStatus(): Promise<AXPPageStatus | null> {\n return this.vm.getPageStatus();\n }\n\n /**\n * Get entity data for status chip component\n */\n getEntityData(): Record<string, any> | null {\n return this.vm.context() ?? null;\n }\n\n override async onBackButtonClick(): Promise<void> {\n if (!(await this.confirmLeaveIfDirty())) {\n return;\n }\n\n // When back button is clicked in small layout, go back to page list\n if (!this.vm.showPages() && this.vm.adapter()?.pages?.length! > 1) {\n this.vm.setCurrentPage(null);\n } else {\n this.vm.goToListPage();\n }\n }\n\n //#region ---- Leave Page Gate ----\n\n /**\n * Router guard hook — same unsaved-changes confirm as dialog builder {@link confirmCloseWhenDirty}.\n */\n async canDeactivate(): Promise<boolean> {\n if (this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return true;\n }\n\n return this.confirmLeaveIfDirty();\n }\n\n /** Background tab close — confirm without discarding (the cached instance is destroyed). */\n override onBeforeTabClose(): Promise<boolean> {\n if (this.unsavedChangesConfirm.hasLeaveConfirmed()) {\n return Promise.resolve(true);\n }\n\n return this.unsavedChangesConfirm.confirmIfDirty(this.shouldPromptLeave(), {\n approveLeaveOnConfirm: false,\n });\n }\n\n /** Active entity component page instance, when the current details sub-page is component-based. */\n private getActivePageComponentInstance(): AXPPageLayoutBaseComponent | null {\n const componentKey = this.getActivePageComponentKey();\n if (!componentKey) {\n return null;\n }\n return this.pageComponentInstanceRegistry.get(componentKey);\n }\n\n /** Component key for the current details sub-page, when content is component-based. */\n private getActivePageComponentKey(): string | null {\n const content = this.vm.currentPage()?.content;\n if (!content?.length) {\n return null;\n }\n for (const item of content) {\n if (AXPLayoutDetailsViewComponent.isComponentPageContent(item)) {\n return item.componentKey;\n }\n }\n return null;\n }\n\n private static isComponentPageContent(\n item: AXPPageContentItem,\n ): item is { type: 'component'; componentKey: string; pageConfig?: Record<string, unknown> } {\n return 'type' in item && item.type === 'component';\n }\n\n protected pageContentTrackKey(item: AXPPageContentItem, index: number): string {\n const pageId = this.vm.currentPage()?.id ?? 'unknown';\n\n if (AXPLayoutDetailsViewComponent.isComponentPageContent(item)) {\n return `${pageId}:component:${item.componentKey}`;\n }\n\n return `${pageId}:${item.name ?? `widget:${index}`}`;\n }\n\n /** Whether the active component-based entity page has unsaved edits. */\n private isActivePageComponentDirty(): boolean {\n return this.getActivePageComponentInstance()?.hasUnsavedChanges() ?? false;\n }\n\n /**\n * Widget-form dirty state for leave guards (popstate, canDeactivate).\n * Unlike {@link liveFormIsDirty}, does not suppress dirty while overlay is busy.\n */\n private hasWidgetFormUnsavedChanges(): boolean {\n if (this.getActivePageComponentKey()) {\n return false;\n }\n\n const container = this.widgetContainer();\n if (!container) {\n return this.vm.formDirty();\n }\n\n if (container.isSavedCommitted()) {\n return container.isFormDirty();\n }\n\n return container.contextService.hasUserEditedSinceCommit() || this.vm.formDirty();\n }\n\n /** Whether the current details page has user-origin unsaved edits (form or component page). */\n private shouldPromptLeave(): boolean {\n if (this.vm.currentPage()?.isReadonly) {\n return false;\n }\n\n if (this.isActivePageComponentDirty()) {\n return true;\n }\n\n return this.hasWidgetFormUnsavedChanges();\n }\n\n /** Single gate for leaving the page or switching details sub-pages when dirty. */\n private async confirmLeaveIfDirty(): Promise<boolean> {\n const shouldPrompt = this.shouldPromptLeave();\n const confirmed = await this.unsavedChangesConfirm.confirmIfDirty(shouldPrompt);\n if (confirmed && shouldPrompt) {\n await this.discardUnsavedChanges();\n }\n return confirmed;\n }\n\n //#endregion\n\n //#region ---- Command Execution ----\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (!this.vm.adapter()) {\n return;\n }\n\n const acceptCommand = this.vm.currentPage()?.settings?.commands?.accept?.command.name;\n const rejectCommand = this.vm.currentPage()?.settings?.commands?.reject?.command.name;\n\n if (command.name == acceptCommand) {\n const saved = await this.vm.save(command, this.form()!, this.getLiveFormContext());\n if (saved) {\n await this.finalizeSave();\n }\n this.recompute();\n return;\n }\n\n if (command.name == rejectCommand) {\n await this.discardUnsavedChanges();\n return;\n }\n\n // Handle status update command\n if (command.name === 'update-status') {\n const transition = command.options?.['transition'];\n if (transition?.toStatus?.name) {\n const status = await this.vm.getPageStatus();\n if (status?.dataPath) {\n // Update entity context with new status value\n const entity = this.vm.context();\n if (entity) {\n entity[status.dataPath] = transition.toStatus.name;\n this.vm.updateContext(entity);\n this.recompute();\n }\n }\n }\n return;\n }\n\n // Get all actions\n const [adapterPrimaryActions, adapterSecondaryActions, pagePrimaryActions, pageSecondaryActions] =\n await Promise.all([\n this.vm.primaryActions(),\n this.vm.secondaryActions(),\n this.vm.currentPagePrimaryActions(),\n this.vm.currentPageSecondaryActions(),\n ]);\n\n // Combine adapter actions (primary + secondary)\n const adapterActions = [...adapterPrimaryActions, ...adapterSecondaryActions];\n\n // Combine current page actions (primary + secondary)\n const pageActions = [...pagePrimaryActions, ...pageSecondaryActions];\n\n const commandExistsInActions = (actions: AXPLayoutDetailsViewAction[], commandName: string): boolean => {\n const check = (list: AXPLayoutDetailsViewAction[] | undefined): boolean => {\n if (!Array.isArray(list) || list.length === 0) return false;\n return list.some(\n (action) =>\n action?.command?.name === commandName ||\n (Array.isArray(action?.items) && check(action.items as AXPLayoutDetailsViewAction[])),\n );\n };\n return check(actions);\n };\n\n // Check if command exists in adapter actions first\n if (commandExistsInActions(adapterActions, command.name)) {\n await this.vm.adapter()?.execute?.(command, this.vm.context());\n }\n // Check if command exists in current page actions\n else if (commandExistsInActions(pageActions, command.name)) {\n await this.vm\n .currentPage()\n ?.execute?.(command, this.vm.pageSelectedRows().length ? this.vm.pageSelectedRows() : this.vm.context());\n await this.syncDirtyStateAfterPageComponentCommand(command);\n }\n }\n\n /**\n * After a component-based page command (e.g. custom discard/save), align view-model dirty\n * state and widget context with the hosted page when it no longer reports unsaved changes.\n */\n private async syncDirtyStateAfterPageComponentCommand(command: AXPExecuteCommand): Promise<void> {\n const rejectCommand = this.vm.currentPage()?.settings?.commands?.reject?.command?.name;\n\n await this.waitForComponentDirtySettle();\n\n if (!this.getActivePageComponentKey()) {\n return;\n }\n\n if (isDiscardCommand(command.name, rejectCommand)) {\n await this.discardUnsavedChanges();\n return;\n }\n\n if (!this.isActivePageComponentDirty()) {\n const container = this.widgetContainer();\n if (container) {\n await container.settleSavedBaseline();\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\n } else {\n this.vm.setFormDirty(false);\n }\n }\n\n this.recompute();\n }\n\n /** Waits for builder/effect microtasks to finish after a component page command. */\n private waitForComponentDirtySettle(): Promise<void> {\n return new Promise((resolve) => {\n queueMicrotask(() => {\n requestAnimationFrame(() => resolve());\n });\n });\n }\n\n //#endregion\n\n //#region ---- Keyboard Shortcuts ----\n\n private async refreshKeyboardShortcutRegistrations(generation: number): Promise<void> {\n const entries = await this.collectActionShortcutEntries();\n if (generation !== this.keyboardShortcutRegistrationGeneration || this.destroyed$.closed) {\n return;\n }\n\n this.actionShortcutEntries.set(entries);\n this.registerCoreKeyboardShortcuts();\n this.registerActionKeyboardShortcuts(entries);\n }\n\n /** i18n scope label for the active details sub-page shortcut group in the help dialog. */\n private getKeyboardShortcutScope(): string {\n const page = this.vm.currentPage();\n if (page?.isPrimary) {\n return '@general:keyboard-shortcuts.groups.entity-details';\n }\n\n const label = page?.label;\n if (typeof label === 'string' && label.length > 0) {\n return label;\n }\n\n return page?.id ?? '@general:keyboard-shortcuts.groups.entity-details';\n }\n\n /** Primary overview page backed by the entity widget form (not a component-hosted sub-page). */\n private isWidgetFormPrimaryPage(): boolean {\n return !!this.vm.currentPage()?.isPrimary && !this.getActivePageComponentKey();\n }\n\n private registerDetailsViewShortcutScope(id: string, shortcuts: AXPKeyboardShortcutBinding[]): void {\n const scope = this.getKeyboardShortcutScope();\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n elementRef: this.elementRef,\n id,\n priority: AXPKeyboardShortcutPriority.Page,\n scope,\n shortcuts,\n });\n }\n\n private async collectActionShortcutEntries(): Promise<Map<string, AXPDetailsViewActionShortcutEntry>> {\n const map = new Map<string, AXPDetailsViewActionShortcutEntry>();\n\n if (this.vm.showPages()) {\n return map;\n }\n\n const includeAdapterActions = this.isWidgetFormPrimaryPage();\n const [adapterPrimaryActions, adapterSecondaryActions, pagePrimaryActions, pageSecondaryActions] =\n await Promise.all([\n includeAdapterActions ? this.vm.primaryActions() : Promise.resolve([]),\n includeAdapterActions ? this.vm.secondaryActions() : Promise.resolve([]),\n this.vm.currentPagePrimaryActions(),\n this.vm.currentPageSecondaryActions(),\n ]);\n\n for (const action of [\n ...adapterPrimaryActions,\n ...adapterSecondaryActions,\n ...pagePrimaryActions,\n ...pageSecondaryActions,\n ]) {\n const zone = action.zone ?? 'header';\n if (zone !== 'header' && zone !== 'footer') {\n continue;\n }\n\n if (zone === 'footer' && this.isWidgetFormPrimaryPage() && this.isSaveDiscardFooterAction(action)) {\n continue;\n }\n\n if (zone === 'header' && this.isSaveDiscardFooterAction(action)) {\n continue;\n }\n\n const commandName = action.command?.name;\n const command = action.command;\n if (!commandName || !command) {\n continue;\n }\n\n const commandBaseName = getDetailsViewActionCommandBaseName(commandName);\n const chords =\n zone === 'footer'\n ? resolvePageFooterActionShortcuts(commandBaseName, action.shortcuts)\n : resolveDetailsViewActionShortcuts(commandBaseName, action.shortcuts);\n if (!chords?.length) {\n continue;\n }\n\n map.set(commandName, {\n command,\n title: typeof action.title === 'string' ? action.title : '',\n chords,\n visible: this.isShortcutActionAvailable(action),\n disabled: AXPLayoutDetailsViewComponent.isTruthyActionFlag(action.disabled),\n });\n }\n\n return map;\n }\n\n private isShortcutActionAvailable(action: AXPLayoutDetailsViewAction): boolean {\n if (AXPLayoutDetailsViewComponent.isTruthyActionFlag((action as { hidden?: boolean | string }).hidden)) {\n return false;\n }\n if (action.visible !== undefined && !AXPLayoutDetailsViewComponent.isTruthyActionFlag(action.visible)) {\n return false;\n }\n return true;\n }\n\n /** Whether save/discard core shortcuts are listed in the help dialog (widget overview page only). */\n private isCoreSaveShortcutAvailable(): boolean {\n return this.isWidgetFormPrimaryPage() && !this.vm.currentPage()?.isReadonly && !!this.acceptFooterCommand();\n }\n\n private isCoreDiscardShortcutAvailable(): boolean {\n return this.isWidgetFormPrimaryPage() && !this.vm.currentPage()?.isReadonly && !!this.rejectFooterCommand();\n }\n\n private canExecuteSaveShortcut(): boolean {\n if (this.vm.currentPage()?.isReadonly || this.vm.isOverlayBusy()) {\n return false;\n }\n if (!this.acceptFooterCommand()) {\n return false;\n }\n return this.shouldPromptLeave();\n }\n\n private canExecuteDiscardShortcut(): boolean {\n if (this.vm.currentPage()?.isReadonly || this.vm.isOverlayBusy()) {\n return false;\n }\n if (this.unsavedChangesConfirm.isConfirmPending()) {\n return false;\n }\n if (!this.rejectFooterCommand()) {\n return false;\n }\n return this.shouldPromptLeave();\n }\n\n private async executeDiscardViaShortcut(rejectCommandName: string): 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.execute({ name: rejectCommandName });\n }\n\n private async executeActionShortcut(entry: AXPDetailsViewActionShortcutEntry): Promise<void> {\n const commandName = entry.command.name;\n if (isDiscardFooterCommand(commandName)) {\n if (this.vm.currentPage()?.isReadonly || this.vm.isOverlayBusy()) {\n return;\n }\n if (this.unsavedChangesConfirm.isConfirmPending()) {\n return;\n }\n if (!this.shouldPromptLeave()) {\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\n await this.execute(entry.command);\n }\n\n private isActionShortcutActive(entryId: string): boolean {\n if (this.vm.currentPage()?.isReadonly || this.vm.isOverlayBusy()) {\n return false;\n }\n\n const entry = this.actionShortcutEntries().get(entryId);\n if (!entry) {\n return false;\n }\n\n return entry.visible && !entry.disabled;\n }\n\n private registerCoreKeyboardShortcuts(): void {\n if (!this.isWidgetFormPrimaryPage()) {\n this.registerDetailsViewShortcutScope('layout-details-view-core', []);\n return;\n }\n\n const accept = this.vm.currentPage()?.settings?.commands?.accept;\n const reject = this.vm.currentPage()?.settings?.commands?.reject;\n const acceptCommandName = accept?.command.name ?? 'update-entity';\n const rejectCommandName = reject?.command.name ?? 'discard';\n\n const saveKeys = resolveDetailsViewFooterCommandShortcuts(acceptCommandName, accept?.shortcuts);\n const discardKeys = resolveDetailsViewFooterCommandShortcuts(rejectCommandName, reject?.shortcuts);\n const scope = this.getKeyboardShortcutScope();\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n if (saveKeys?.length && this.isCoreSaveShortcutAvailable()) {\n shortcuts.push({\n keys: saveKeys,\n title: accept?.title ?? '@general:actions.save.title',\n group: scope,\n allowInEditableFields: true,\n when: () => this.canExecuteSaveShortcut(),\n handler: () => {\n void this.execute({ name: acceptCommandName });\n },\n });\n }\n\n if (discardKeys?.length && this.isCoreDiscardShortcutAvailable()) {\n shortcuts.push({\n keys: discardKeys,\n title: reject?.title ?? '@general:actions.discard.title',\n group: scope,\n allowInEditableFields: true,\n when: () => this.canExecuteDiscardShortcut(),\n handler: () => {\n void this.executeDiscardViaShortcut(rejectCommandName);\n },\n });\n }\n\n this.registerDetailsViewShortcutScope('layout-details-view-core', shortcuts);\n }\n\n private registerActionKeyboardShortcuts(entries: Map<string, AXPDetailsViewActionShortcutEntry>): void {\n const scope = this.getKeyboardShortcutScope();\n const shortcuts: AXPKeyboardShortcutBinding[] = [];\n\n for (const [entryId, entry] of entries) {\n for (const chord of entry.chords) {\n shortcuts.push({\n keys: [chord],\n title: entry.title,\n group: scope,\n allowInEditableFields: entry.command.name ? isSaveFooterCommand(entry.command.name) || isDiscardFooterCommand(entry.command.name) : false,\n when: () => this.isActionShortcutActive(entryId),\n handler: () => {\n if (!this.isActionShortcutActive(entryId)) {\n return;\n }\n void this.executeActionShortcut(entry);\n },\n });\n }\n }\n\n this.registerDetailsViewShortcutScope('layout-details-view-actions', shortcuts);\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n @if (vm.adapter()?.pages?.length! > 1 && vm.isLarge()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{\n formatService.format(\n vm.showPages() ? (vm.adapter()?.title ?? '') : (vm.adapter()?.label ?? ''),\n 'string',\n vm.rootContext()\n )\n | translate\n | async\n }}</axp-layout-title>\n <axp-layout-description>{{\n formatService.format(vm.adapter()?.description ?? '', 'string', vm.rootContext()) | translate | async\n }}</axp-layout-description>\n </axp-layout-header>\n <axp-layout-content>\n <ax-tabs #sidebarTabs class=\"axp-vertical-tabs\" [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\">\n @for (item of vm.adapter()?.pages; track item.id) {\n <ax-tab-item [key]=\"item.id\"\n [text]=\"(formatService.format(item.label, 'string', vm.rootContext()) | translate | async)!\"\n [active]=\"vm.currentPage()?.id === item.id\">\n <ax-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n <!-- Content Section -->\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-4\">\n @if (vm.showPages()) {\n <axp-layout-list class=\"ax-w-full\">\n @for (item of vm.adapter()?.pages; track $index) {\n <axp-layout-list-item (click)=\"handleSelectPage(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"ax-text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"ax-font-semibold\">{{\n formatService.format(item.label, 'string', vm.rootContext()) | translate | async\n }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"ax-text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n } @else {\n <ax-form class=\"ax-h-full ax-w-full\" #form>\n <axp-widgets-container #widgetsContainerRef [context]=\"vm.context()\"\n (onContextChanged)=\"handleOnContextChanged($event)\">\n <div class=\"ax-flex ax-flex-col ax-w-full ax-gap-4 ax-h-full\">\n @for (item of vm.currentPageContent(); track pageContentTrackKey($any(item), $index)) {\n @if ('type' in item && item.type === 'component') {\n <!-- Component-based content -->\n <div axp-page-component-renderer [componentKey]=\"$any(item).componentKey\" [rootContext]=\"vm.rootContext()\"\n [pageConfig]=\"$any(item).pageConfig\" [options]=\"$any(item).options\" (componentReady)=\"recompute()\"></div>\n } @else {\n <!-- Widget-based content -->\n <ng-container axp-widget-renderer [node]=\"$any(item)\" [mode]=\"$any(item).mode ?? 'view'\"></ng-container>\n }\n }\n @if (vm.currentPage()?.tabs?.length) {\n <div class=\"axp-horizontal-tabs\">\n <ax-tabs [location]=\"'bottom'\" [fitParent]=\"false\" look=\"classic\">\n @for (tab of vm.currentPageTabs(); track $index) {\n <ax-tab-item (onClick)=\"vm.setCurrentTab(tab)\" [text]=\"(tab.title | translate | async)!\"\n [active]=\"vm.currentTab()?.id === tab.id\">\n <ax-prefix>\n <ax-icon icon=\"far ${{ tab.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n <div class=\"content\">\n @if (vm.currentTab()) {\n @for (content of vm.activeTabContent(); track content.name) {\n <ng-container axp-widget-renderer [node]=\"content\" [mode]=\"content.mode ?? 'view'\">\n </ng-container>\n }\n }\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n }\n </axp-page-content>\n\n <!-- Footer Section -->\n @if (hasFooter()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <!-- secondary footer actions -->\n @if (hasVisibleFooterSecondaryActions()) {\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\" [color]=\"'default'\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (action of footerSecondaryActions(); track $index) {\n @if (isFooterActionVisible(action)) {\n <ax-button-item [text]=\"(t(action.title) | async)!\" [color]=\"action.color\"\n [disabled]=\"isFooterActionDisabled(action)\" (onClick)=\"execute(action.command!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ action.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (action.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n\n @if (hasVisibleFooterPrimaryActions()) {\n @if (showSaveDiscardFooter()) {\n @if (rejectFooterCommand(); as reject) {\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isOverlayBusy()\"\n [text]=\"(t(reject.title) | async)!\" [look]=\"'solid'\" [color]=\"reject.color\" (onClick)=\"execute(reject.command)\">\n <ax-prefix>\n <i class=\"{{ reject.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n @if (acceptFooterCommand(); as accept) {\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"vm.isOverlayBusy()\"\n [text]=\"(t(accept.title) | async)!\" [look]=\"'solid'\" [color]=\"accept.color\" (onClick)=\"execute(accept.command)\">\n <ax-prefix>\n <i class=\"{{ accept.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n }\n @for (action of footerPrimaryActions(); track $index) {\n @if (isFooterActionVisible(action)) {\n <ax-button [class.ax-sm]=\"deviceService.isSmall()\" [disabled]=\"isFooterActionDisabled(action)\"\n [text]=\"(t(action.title) | async)!\" [look]=\"'solid'\" [color]=\"action.color\"\n (onClick)=\"execute(action.command!)\">\n <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n @if (action?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of action?.items; track $index) {\n @if (isFooterActionVisible(sub)) {\n <ax-button-item [text]=\"(t(sub.title) | async)!\" [color]=\"sub.color\"\n [disabled]=\"isFooterActionDisabled(sub)\" (onClick)=\"execute(sub.command!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ sub.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (sub.break) {\n <ax-divider></ax-divider>\n }\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n }\n }\n }\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>","import { createUnsavedChangesCanDeactivateGuard } from '@acorex/platform/common';\nimport { AXPLayoutDetailsViewComponent } from './details-view.component';\n\n//#region ---- Details View Can Deactivate Guard ----\n\n/**\n * Prompts for unsaved changes before leaving the entity details route (breadcrumbs, menu, back to list).\n */\nexport const axpDetailsViewCanDeactivateGuard = createUnsavedChangesCanDeactivateGuard<AXPLayoutDetailsViewComponent>();\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i7","i1","i2","i3","i4","filter","i5","i6","i8"],"mappings":"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"}