{"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":["\n\nimport { AXPActionMenuItem, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, type AXPPageStatus } from '@acorex/platform/contracts';\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","\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { 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';\n\nimport { 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 { AXPActionMenuItem, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, type AXPPageStatus } from '@acorex/platform/contracts';\nimport { 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';\n\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","\n\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/contracts';\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} ","\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { 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';\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","\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/contracts';\nimport { 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';\n\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 { AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, type AXPPageStatus as AXPDetailsPageStatusChip, type AXPWidgetNode, getSmart } from '@acorex/platform/contracts';\nimport { AXPPageStatus } from '@acorex/platform/layout/widget-core-contracts';\nimport { 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, axpGetEntityListReturnUrl, axpIsEntityDetailsViewRoute, axpIsEntityListPath, axpNavigateAppPath, AXPNotFoundError, AXPSettingsService, AXPTabNavigationService } from '@acorex/platform/common';\n\nimport { AXPContextEvalFactory, AXPDebugService, AXPDeviceService, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService, OVERLAY_DETAILS_VIEW_TRACE_NS } from '@acorex/platform/core';\n\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\n//#region ---- Entity list return URL (breadcrumb / back navigation) ----\n\n/** Restores query params on the entity list breadcrumb when returning from details. */\nfunction applyEntityListReturnUrlToBreadcrumb(\n  item: AXPBreadcrumbItem,\n  moduleName: string | null,\n  entityName: string | null,\n): AXPBreadcrumbItem {\n  if (!moduleName || !entityName || item.command?.name !== 'navigate') {\n    return item;\n  }\n\n  const options = item.command.options as { path?: string } | undefined;\n  const path = options?.path;\n  if (typeof path !== 'string' || !axpIsEntityListPath(path)) {\n    return item;\n  }\n\n  return {\n    ...item,\n    command: {\n      ...item.command,\n      options: {\n        ...options,\n        path: axpGetEntityListReturnUrl(moduleName, entityName, path),\n      },\n    },\n  };\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      tabNavigation = inject(AXPTabNavigationService),\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      /** Resolves the list URL with query params captured before opening details. */\n      const resolveListReturnPath = (fallbackPath: string): string => {\n        const moduleName = route.parent?.snapshot.paramMap.get('module');\n        const entityName = route.snapshot.paramMap.get('entity');\n        if (!moduleName || !entityName) {\n          return fallbackPath;\n        }\n        return axpGetEntityListReturnUrl(moduleName, entityName, fallbackPath);\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          const moduleName = route.parent?.snapshot.paramMap.get('module') ?? null;\n          const entityName = route.snapshot.paramMap.get('entity') ?? null;\n\n          return breadcrumbs.map((item) => applyEntityListReturnUrlToBreadcrumb(item, moduleName, entityName));\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            if (enableOperationToasts) {\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\n            return false;\n          } catch (error: unknown) {\n            const enableOperationToasts = await settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n            if (enableOperationToasts) {\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\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            return;\n          }\n\n          const path = resolveListReturnPath(exitUrl);\n          await tabNavigation.navigate(path);\n        },\n      };\n    },\n  ),\n);","//#region ---- Details View Action Shortcut Utilities ----\n\nimport type { AXPKeyboardShortcut, AXPKeyboardShortcutChord } from '@acorex/platform/contracts';\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","\nimport { AXPActionMenuItem, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPContextChangeEvent, AXPExecuteCommand, AXPKeyboardShortcutBinding, AXPKeyboardShortcutPriority, AXPMultiLanguageString, type AXPPageStatus, summarizeFormContextDirtyDiff } from '@acorex/platform/contracts';\nimport { AXPEntityCommandScope, buildPageListTableWidgetId, isPageListWidgetName } 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';\n\nimport { AXPBroadcastEventService, AXPDeviceService, AXPDebugService, 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\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 the active page-list data-list 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    const tableWidgetId = this.activePageListTableWidgetId();\n\n    if (!pageId || this.vm.showPages() || !isPageReady || this.getActivePageComponentKey() || !tableWidgetId) {\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 !== tableWidgetId) {\n        return;\n      }\n\n      this.attachSelectionToListWidget(pageId, generation, widget);\n    });\n\n    onCleanup(() => registrationSub.unsubscribe());\n\n    const existing = builder.getWidget(tableWidgetId);\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` layout widget). */\n  private pageHasEntityListWidget(): boolean {\n    return this.findPageListWidgetNameInContent(this.vm.currentPageContent()) != null;\n  }\n\n  /** Data-list widget id for the active related-entity `page-list` page, if any. */\n  private activePageListTableWidgetId(): string | null {\n    const widgetName = this.findPageListWidgetNameInContent(this.vm.currentPageContent());\n    return widgetName ? buildPageListTableWidgetId(widgetName) : null;\n  }\n\n  private findPageListWidgetNameInContent(content: AXPPageContentItem[]): string | null {\n    for (const item of content) {\n      if (AXPLayoutDetailsViewComponent.isComponentPageContent(item)) {\n        continue;\n      }\n      if (isPageListWidgetName(item.name)) {\n        return item.name ?? null;\n      }\n    }\n    return null;\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    <axp-widgets-container class=\"ax-h-full ax-w-full\" #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        <ax-form class=\"ax-w-full\" #form>\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        </ax-form>\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    }\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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"}