@acorex/platform 21.0.0-next.71 → 21.0.0-next.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +10 -2
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-common-common-settings.provider-Bi1RYif5.mjs → acorex-platform-common-common-settings.provider-Ytey9uhY.mjs} +15 -1
  4. package/fesm2022/acorex-platform-common-common-settings.provider-Ytey9uhY.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +3792 -1679
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1112 -103
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-layout-builder.mjs +53 -170
  10. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-components.mjs +70 -46
  12. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-designer.mjs +199 -126
  14. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  15. package/fesm2022/{acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs → acorex-platform-layout-entity-attachments-page.component-B0EkdqvH.mjs} +6 -1
  16. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-B0EkdqvH.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-layout-entity.mjs +341 -418
  18. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-views.mjs +675 -301
  20. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-widget-core.mjs +115 -74
  22. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  23. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs.map → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs.map} +1 -1
  27. package/fesm2022/acorex-platform-layout-widgets.mjs +184 -655
  28. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-themes-default-error-401.component-B1nsdpTY.mjs +48 -0
  30. package/fesm2022/acorex-platform-themes-default-error-401.component-B1nsdpTY.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-themes-default-error-404.component-D4UvRe8u.mjs +42 -0
  32. package/fesm2022/acorex-platform-themes-default-error-404.component-D4UvRe8u.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-themes-default.mjs +76 -32
  34. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  35. package/package.json +1 -1
  36. package/types/acorex-platform-auth.d.ts +2 -0
  37. package/types/acorex-platform-common.d.ts +891 -259
  38. package/types/acorex-platform-core.d.ts +284 -40
  39. package/types/acorex-platform-layout-builder.d.ts +10 -22
  40. package/types/acorex-platform-layout-components.d.ts +9 -7
  41. package/types/acorex-platform-layout-entity.d.ts +37 -41
  42. package/types/acorex-platform-layout-views.d.ts +125 -67
  43. package/types/acorex-platform-layout-widget-core.d.ts +53 -61
  44. package/types/acorex-platform-layout-widgets.d.ts +33 -20
  45. package/types/acorex-platform-themes-default.d.ts +14 -4
  46. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +0 -1
  47. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs.map +0 -1
  48. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs +0 -31
  49. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +0 -1
  50. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs +0 -25
  51. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-layout-views.mjs","sources":["../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/page/page-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.viewmodel.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/acorex-platform-layout-views.ts"],"sourcesContent":["import { AXPActionMenuItem, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, AXPPageStatus } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPageLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n\n abstract hasTitleActions: Signal<boolean>;\n\n abstract hasPrimaryActions: Signal<boolean>;\n\n abstract hasSecondaryActions: Signal<boolean>;\n\n abstract hasActions: Signal<boolean>;\n\n abstract breadcrumbs: Signal<AXPBreadcrumbItem[]>;\n\n abstract title: Signal<AXPMultiLanguageString>;\n\n abstract titleIcon: Signal<string | null>;\n\n abstract hasTitle: Signal<boolean>;\n\n abstract hasTitleIcon: Signal<boolean>;\n\n abstract hasDescription: Signal<boolean>;\n\n abstract description: Signal<AXPMultiLanguageString | null>;\n\n abstract hasBreadcrumbs: Signal<boolean>;\n\n abstract hasBadge: Signal<boolean>;\n\n abstract badge: Signal<AXPBadge | null>;\n\n abstract hasStatus: Signal<boolean>;\n\n abstract status: Signal<AXPPageStatus | null>;\n\n abstract hasBackButton: Signal<boolean>;\n\n abstract backButton: Signal<AXPBackButton | null>;\n\n abstract onBackButtonClick: () => void | Promise<void>;\n\n abstract startSideToggle: () => void | Promise<void>;\n\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXClickEvent, AXCommonModule } from '@acorex/cdk/common';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXPComponentSlotModule } from '@acorex/platform/core';\n//\nimport { AXDrawerContainerDirective, AXDrawerDirectiveModule, AXDrawerItemDirective } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPDeviceService, AXPExecuteCommand } 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\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 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 //#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\"\n class=\"ax-z-50 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)=\"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 Title Badge -------->\n @if (page?.hasBadge()) {\n <div id=\"axp-page-badge\" class=\"__title-badge --{{ page?.badge()?.color }}\"\n [attr.title]=\"page?.badge()?.description\">\n <i class=\"fa-solid fa-circle\"></i>\n {{ page?.badge()?.title }}\n </div>\n }\n <!-------- Finish Title Badge -------->\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 </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 { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBadge,\n AXPBreadcrumbItem,\n AXPExecuteCommand,\n AXPMultiLanguageString,\n AXPPageStatus,\n} from '@acorex/platform/core';\nimport { AXPPolicyEngineService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { isEmpty } from 'lodash-es';\nimport { AXPPageLayoutBase } from './page-layout.base';\nimport { AXPPageLayoutComponent } from './page-layout.component';\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\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 async ngOnInit() {\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\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\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 //#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 this.breadcrumbs.set([...this.defaultBreadCrumbs, ...breadCrumbs]);\n });\n\n public hasBreadcrumbs = computed(() => this.breadcrumbs().length > 1);\n\n protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]> {\n return [];\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 protected getPageBadge(): AXPBadge | null | Promise<AXPBadge | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Status ----------------\n\n public status = signal<AXPPageStatus | null>(null);\n\n public hasStatus = computed(() => this.status() !== null);\n\n #statusEffect = effect(async () => {\n this.updateTrigger();\n this.status.set(await this.getPageStatus());\n });\n\n protected getPageStatus(): AXPPageStatus | null | Promise<AXPPageStatus | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Layout ----------------\n\n protected layout = viewChild(AXPPageLayoutComponent);\n\n //TODO: Remove this after migration to the new layout\n protected toggleEndSide() {\n //this.layout()?.toggleStartSide()\n }\n\n //TODO: Remove this after migration to the new layout\n protected toggleStartSide() {\n this.layout()?.toggleStartSide();\n }\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasPrimaryActions = computed(() => this.primaryMenuItems().filter((item) => item.visible != false).length > 0);\n\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getPrimaryMenuItems();\n this.primaryMenuItems.set(items);\n });\n\n public getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasSecondaryActions = computed(\n () => this.secondaryMenuItems().filter((item) => item.visible != false).length > 0,\n );\n\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getSecondaryMenuItems();\n this.secondaryMenuItems.set(items);\n });\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public backButton = signal<AXPBackButton | null>(null);\n\n public hasBackButton = computed(() => this.backButton() !== null);\n\n protected getBackButton(): (AXPBackButton | null) | Promise<AXPBackButton | null> {\n return null;\n }\n\n #backButtonEffect = effect(async () => {\n this.updateTrigger();\n this.backButton.set(await this.getBackButton());\n });\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n /**\n * Optional partial context to merge into the create/update wizard when leaving a page step.\n * Override when the page keeps edits in local state instead of the shared form context.\n */\n getWizardStepContext(): Record<string, unknown> | null {\n return null;\n }\n\n public startSideToggle(): void | Promise<void> {\n this.layout();\n }\n\n public onBackButtonClick(): void | Promise<void> { }\n\n //#endregion\n}\n","import { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPopupLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n abstract hasTitleActions: Signal<boolean>;\n abstract hasPrimaryActions: Signal<boolean>;\n abstract hasSecondaryActions: Signal<boolean>;\n abstract hasActions: Signal<boolean>;\n abstract title: Signal<string>;\n abstract hasTitle: Signal<boolean>;\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n} ","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent, AXCommonModule } from \"@acorex/cdk/common\";\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\n//\nimport { AXDrawerDirectiveModule } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPopupLayoutBase } from './popup-layout.base';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n ],\n templateUrl: './popup-layout.component.html',\n styleUrls: ['./popup-layout.component.scss'],\n selector: 'axp-popup-layout',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPPopupLayoutComponent {\n protected popup = inject<AXPPopupLayoutBase>(AXPPopupLayoutBase);\n protected layoutService = inject(AXPLayoutThemeService);\n protected workflow = inject(AXPWorkflowService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.popup?.title();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-popup-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.popup?.execute(item.command);\n }\n }\n\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.popup?.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n} ","<axp-layout-container id=\"axp-popup-layout\" #container>\n <ng-content select=\"axp-page-content\"></ng-content>\n <axp-page-footer id=\"axp-popup-footer\" *translate=\"let t\">\n <ax-prefix> </ax-prefix>\n @if (popup.hasPrimaryActions()) {\n <ax-suffix>\n @for (item of popup.primaryMenuItems(); track $index) {\n <ax-button\n [attr.id]=\"'axp-btn-primary-' + (item.name || item.title)\"\n [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"item.color\"\n (onClick)=\"handleActionClick(item)\"\n >\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-suffix>\n }\n </axp-page-footer>\n</axp-layout-container>\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { AXPPopupLayoutComponent } from './popup-layout.component';\nimport { AXBasePageComponent } from '@acorex/components/page';\n\n@Component({\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n override async ngOnInit() {\n super.ngOnInit();\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<string>('');\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPopupTitle());\n });\n\n protected getPopupTitle(): string | Promise<string> {\n return '';\n }\n\n public hasTitle = computed(() => this.title() !== '');\n\n //#endregion\n\n\n\n //#region ---------------- Layout ----------------\n\n // Placeholder for popup layout reference if needed\n protected layout = viewChild(AXPPopupLayoutComponent);\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasPrimaryActions = computed(() => this.primaryMenuItems().length > 0);\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.primaryMenuItems.set(await this.getPrimaryMenuItems());\n });\n protected getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasSecondaryActions = computed(() => this.secondaryMenuItems().length > 0);\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.secondaryMenuItems.set(await this.getSecondaryMenuItems());\n });\n protected getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n //#endregion\n} ","import { AXFormComponent } from '@acorex/components/form';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPEntityCommandScope, AXPSettingsService } from '@acorex/platform/common';\nimport {\n AXPBackButton,\n AXPBadge,\n AXPPageStatus as AXPDetailsPageStatusChip,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n AXPMultiLanguageString,\n getSmart,\n} from '@acorex/platform/core';\nimport { AXPPageStatus, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\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, isEqual } from 'lodash-es';\nimport {\n AXPLayoutDetailsViewAdapter,\n AXPLayoutDetailsViewPage,\n AXPLayoutDetailsViewTabItem,\n} from './details-view.adapter';\n\n//#region ---- Root-context widget expression resolution ----\n\n/**\n * Evaluates `{{ ... }}` strings inside `options.customFilterDefinitions` using `rootContext`\n * (details adapter load data), so filter UI does not depend on widget-renderer contextService.\n */\nasync function buildEvaluatedPageContentsForRootContext(\n currentPage: AXPLayoutDetailsViewPage | null,\n rootContext: Record<string, unknown>,\n evaluatorService: AXPExpressionEvaluatorService,\n): Promise<{\n evaluatedPageContent: AXPWidgetNode[];\n evaluatedTabContentsById: Record<string, AXPWidgetNode[]>;\n}> {\n if (!currentPage) {\n return { evaluatedPageContent: [], evaluatedTabContentsById: {} };\n }\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => getSmart(rootContext, path),\n },\n };\n\n const resolveNodes = async (nodes: AXPWidgetNode[] | undefined): Promise<AXPWidgetNode[]> => {\n if (!nodes?.length) {\n return [];\n }\n const cloned = cloneDeep(nodes);\n for (const node of cloned) {\n const defs = node.options?.['customFilterDefinitions'] as unknown[] | undefined;\n if (Array.isArray(defs) && defs.length > 0) {\n node.options!['customFilterDefinitions'] = await evaluatorService.evaluate(defs, scope);\n }\n }\n return cloned;\n };\n\n const evaluatedPageContent = await resolveNodes(currentPage.content);\n const evaluatedTabContentsById: Record<string, AXPWidgetNode[]> = {};\n for (const tab of currentPage.tabs ?? []) {\n evaluatedTabContentsById[tab.id] = await resolveNodes(tab.content);\n }\n\n return { evaluatedPageContent, evaluatedTabContentsById };\n}\n\n//#endregion\n\nexport const AXPLayoutDetailsViewViewModel = signalStore(\n withState(() => {\n const state = {\n adapter: null as AXPLayoutDetailsViewAdapter | null,\n rootContext: {} as Record<string, any>,\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n scope: null as AXPExpressionEvaluatorScope | null,\n status: AXPPageStatus.Processing,\n currentPage: null as AXPLayoutDetailsViewPage | null,\n currentTab: null as AXPLayoutDetailsViewTabItem | null,\n pageSelectedRows: [] as any[],\n // Cache for rendered tabs per page to prevent re-rendering\n renderedTabsCache: {} as Record<string, Array<{ tabId: string; tab: AXPLayoutDetailsViewTabItem }>>,\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 /** User/composite-widget dirty flag synced from the widgets container context store. */\n formIsDirty: false,\n /** Whether post-load hydration baseline has been committed on the context store. */\n formBaselineCommitted: 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 isDirty: computed(() => store.formBaselineCommitted() && store.formIsDirty()),\n changesCount: computed(() => (store.formIsDirty() ? 1 : 0)),\n isLoaded: computed(() => store.adapter() != null),\n currentPageSelectedRows: computed(() => store.pageSelectedRows()),\n //\n // Rendered tabs for current page - prevents re-rendering on tab switch\n currentPageRenderedTabs: computed(() => {\n const currentPage = store.currentPage();\n if (!currentPage?.id) {\n return [];\n }\n\n const pageId = currentPage.id;\n const cache = store.renderedTabsCache();\n return cache[pageId] || [];\n }),\n })),\n withMethods(\n (\n store,\n evaluatorService = inject(AXPExpressionEvaluatorService),\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 ) => {\n // Effect to automatically cache current tab when it changes\n effect(() => {\n const currentPage = store.currentPage();\n const currentTab = store.currentTab();\n\n if (currentPage?.id && currentTab?.id) {\n const pageId = currentPage.id;\n const tabId = currentTab.id;\n const cache = store.renderedTabsCache();\n const pageCache = cache[pageId] || [];\n\n // Check if tab is already in cache\n const isTabCached = pageCache.some((cached) => cached.tabId === tabId);\n\n if (!isTabCached) {\n // Add tab to cache for this page\n const newTabCache = {\n tabId: tabId,\n tab: currentTab,\n };\n\n const updatedPageCache = [...pageCache, newTabCache];\n\n // Update the cache immutably\n const updatedCache = {\n ...cache,\n [pageId]: updatedPageCache,\n };\n\n patchState(store, {\n renderedTabsCache: updatedCache,\n });\n }\n }\n });\n\n // Create an effect to handle route changes\n effect(() => {\n if (store.adapter()) {\n route.queryParams.subscribe((params) => {\n const pageId = params['page'];\n const adapter = store.adapter();\n if (adapter) {\n // Find current page from query param or conditionally default to first page\n let currentPage: AXPLayoutDetailsViewPage | null = null;\n if (pageId) {\n const foundPage = adapter.pages.find((p) => p.id === pageId);\n if (foundPage) {\n currentPage = foundPage;\n }\n } else {\n // Only auto-select primary page if layout is large\n if (deviceService.isLarge() || adapter.pages.length == 1) {\n const primaryPage = adapter.pages.find((p) => p.isPrimary) ?? adapter.pages[0];\n currentPage = primaryPage;\n }\n }\n\n // Set current tab to first tab of the current page (internal state only)\n let currentTab = currentPage?.tabs?.[0] ?? null;\n\n // Only update if there's a change. When `currentPage` is still null, `load()` → `loadPage`\n // will set `currentPage` and evaluated content; the first `queryParams` emit would otherwise\n // race and duplicate `buildEvaluatedPageContentsForRootContext` (double render).\n if (store.currentPage()?.id !== currentPage?.id) {\n if (store.currentPage() == null) {\n return;\n }\n patchState(store, {\n currentPage,\n currentTab,\n });\n void (async () => {\n const rootCtx = store.rootContext() as Record<string, unknown>;\n const { evaluatedPageContent, evaluatedTabContentsById } =\n await buildEvaluatedPageContentsForRootContext(currentPage, rootCtx, evaluatorService);\n patchState(store, {\n evaluatedPageContent,\n evaluatedTabContentsById,\n });\n })();\n }\n }\n });\n }\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 evaluated = await formatService.format(sourceAfterPreLocale, 'string', formatContext);\n } else {\n evaluated = await formatService.format(raw as AXPMultiLanguageString, 'string', formatContext);\n }\n\n /** Post-eval: MLS-aware resolution again — evaluate may return MLS or map-like wrappers. */\n return finalizeBreadcrumbTitleEvaluated(evaluated, raw);\n }\n\n /**\n * Resolves MLS objects, evaluates format templates, or applies string formatting against page context (same semantics as legacy details layout header meta).\n */\n function convertToMultiLanguageString(\n value: AXPMultiLanguageString | null | undefined,\n ): AXPMultiLanguageString | null {\n if (!value || isEmpty(value)) {\n return null;\n }\n if (translateService.isValidMultiLanguageObject(value)) {\n return translateService.resolve(value as AXPMultiLanguageString);\n }\n return (formatService.format(value, 'string', store.context()) as AXPMultiLanguageString) ?? '';\n }\n\n return {\n async loadAdapter(adapter: AXPLayoutDetailsViewAdapter) {\n patchState(store, { adapter });\n\n // Load adapter context if adapter has load function\n let adapterContext = {};\n if (adapter.load) {\n const adapterResult = await adapter.load();\n adapterContext = adapterResult?.data ?? {};\n }\n\n patchState(store, {\n rootContext: cloneDeep(adapterContext),\n });\n },\n\n async loadPage(pageId?: string, forceRefresh?: boolean) {\n const adapter = store.adapter();\n if (!adapter) {\n throw new Error('Adapter must be loaded before loading page');\n }\n\n patchState(store, {\n status: AXPPageStatus.Processing,\n });\n\n // Get page ID from parameter or query params\n const queryParams = router.routerState.snapshot.root.queryParams;\n const targetPageId = pageId || queryParams['page'];\n\n // Find current page from page ID or conditionally default to first page\n let currentPage: AXPLayoutDetailsViewPage | null = null;\n if (targetPageId) {\n const foundPage = adapter.pages.find((p) => p.id === targetPageId);\n if (foundPage) {\n currentPage = foundPage;\n }\n } else {\n // Only auto-select primary page if layout is large\n if (deviceService.isLarge() || adapter.pages.length == 1) {\n const primaryPage = adapter.pages.find((p) => p.isPrimary) ?? adapter.pages[0];\n currentPage = primaryPage;\n }\n }\n\n // Load page data if current page exists\n let context = {};\n if (currentPage) {\n const currentPageIndex = adapter.pages.findIndex((p) => p.id === currentPage.id);\n const loadResult = await adapter.pages[currentPageIndex]?.load?.({ forceRefresh });\n context = loadResult?.data ?? {};\n }\n\n // Set current tab to first tab of the current page (internal state only)\n let currentTab = currentPage?.tabs?.[0] ?? null;\n const rootCtx = store.rootContext() as Record<string, unknown>;\n const { evaluatedPageContent, evaluatedTabContentsById } = await buildEvaluatedPageContentsForRootContext(\n currentPage,\n rootCtx,\n evaluatorService,\n );\n patchState(store, {\n previousContext: cloneDeep(context),\n context: cloneDeep(context),\n status: AXPPageStatus.Rendered,\n currentPage,\n currentTab,\n evaluatedPageContent,\n evaluatedTabContentsById,\n formIsDirty: false,\n formBaselineCommitted: false,\n });\n },\n\n async load(adapter: AXPLayoutDetailsViewAdapter) {\n // Setup expression evaluator scope\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return getSmart(store.context(), path);\n },\n isDirty: () => store.isDirty(),\n },\n };\n patchState(store, {\n scope,\n });\n //\n await this.loadAdapter(adapter);\n await this.loadPage(undefined, true);\n },\n\n updateContext(context: any, formIsDirty?: boolean) {\n patchState(store, {\n context,\n ...(formIsDirty !== undefined ? { formIsDirty } : {}),\n });\n },\n\n markFormBaselineCommitted() {\n patchState(store, {\n formBaselineCommitted: true,\n });\n },\n\n resetFormBaselineCommitted() {\n patchState(store, {\n formBaselineCommitted: false,\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 // Clear previous page cache if changing pages\n const previousPage = store.currentPage();\n if (previousPage?.id && previousPage.id !== page?.id) {\n this.clearPageTabCache(previousPage.id);\n }\n\n if (page) {\n const firstTab = page.tabs?.[0] ?? null;\n\n patchState(store, {\n currentPage: page,\n currentTab: firstTab,\n });\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 queryParams,\n queryParamsHandling: 'merge',\n });\n } else {\n patchState(store, {\n currentPage: null,\n currentTab: null,\n });\n // Remove page query parameter\n const currentParams = { ...route.snapshot.queryParams };\n delete currentParams['page'];\n router.navigate([], {\n queryParams: currentParams,\n });\n }\n },\n\n //Current Tab\n setCurrentTab(tab: AXPLayoutDetailsViewTabItem) {\n patchState(store, {\n currentTab: tab,\n });\n // Cache management is handled automatically by the effect\n },\n\n getCurrentTabContent() {\n return store.currentTab()?.content ?? [];\n },\n\n //#region ---- Rendered Tabs Management ----\n\n /**\n * Get content for a specific rendered tab\n */\n getRenderedTabContent(tabId: string) {\n const byTab = store.evaluatedTabContentsById();\n if (Object.prototype.hasOwnProperty.call(byTab, tabId)) {\n return byTab[tabId];\n }\n const renderedTabs = store.currentPageRenderedTabs();\n const renderedTab = renderedTabs.find((cached) => cached.tabId === tabId);\n return renderedTab?.tab?.content ?? [];\n },\n\n /**\n * Clear cache when page changes to free memory\n */\n clearPageTabCache(pageId: string) {\n const cache = store.renderedTabsCache();\n const updatedCache = { ...cache };\n delete updatedCache[pageId];\n\n patchState(store, {\n renderedTabsCache: updatedCache,\n });\n },\n\n //#endregion\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 const showPageBadge = await settingsService.get<boolean>(AXPCommonSettings.ShowPageBadge);\n if (!showPageBadge) {\n return null;\n }\n const adapter = store.adapter();\n if (!adapter?.getPageBadge) {\n return null;\n }\n return adapter.getPageBadge(store.context(), store.isDirty());\n },\n\n async getPageStatus(): Promise<AXPDetailsPageStatusChip | null> {\n const adapter = store.adapter();\n if (!adapter?.getPageStatus) {\n return null;\n }\n return adapter.getPageStatus(store.context(), store.currentPage());\n },\n\n //#endregion\n\n async primaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'primary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async secondaryActions() {\n const raw =\n store\n .adapter()\n ?.actions?.filter((a) => a.priority == 'secondary' && a.scope == AXPEntityCommandScope.TypeLevel) ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async breadcrumbs() {\n const rootContext = store.rootContext();\n const scope: AXPExpressionEvaluatorScope = {\n ...rootContext,\n context: {\n eval: (path: string) => get(rootContext, path),\n },\n };\n\n const breadcrumbs = await Promise.all(\n store.adapter()?.breadcrumbs?.map(async (b) => {\n const raw = (b?.title ?? '') as AXPMultiLanguageString;\n return {\n ...b,\n title: await resolveBreadcrumbTitleFields(raw, scope, rootContext),\n };\n }) ?? [],\n );\n\n // Add current page title as the last breadcrumb item\n const currentPageLabel = store.currentPage()?.label;\n const pages = store.adapter()?.pages ?? [];\n const primaryPage = pages.find((p) => p.isPrimary) ?? pages[0];\n const isMainPage = primaryPage?.id === store.currentPage()?.id;\n if (currentPageLabel && !isMainPage) {\n const pageScope: AXPExpressionEvaluatorScope = {\n ...store.context(),\n context: {\n eval: (path: string) => get(store.context(), path),\n },\n };\n breadcrumbs.push({\n title: await resolveBreadcrumbTitleFields(\n currentPageLabel as AXPMultiLanguageString,\n pageScope,\n store.context(),\n ),\n });\n }\n\n return breadcrumbs;\n },\n\n async discard() {\n patchState(store, {\n context: cloneDeep(store.previousContext()),\n formIsDirty: false,\n formBaselineCommitted: false,\n });\n },\n\n async save(command: AXPExecuteCommand, form: AXFormComponent): Promise<boolean> {\n const formResult = await form.validate();\n if (!formResult.result) {\n return false;\n }\n\n patchState(store, {\n status: AXPPageStatus.Submitting,\n });\n\n try {\n const result = await store.currentPage()?.execute?.(command, store.context());\n\n // Clear submitting before post-save refresh so the footer is not left disabled.\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n\n const enableOperationToasts = await settingsService.get(AXPCommonSettings.EnableOperationToasts);\n\n if (result?.success) {\n patchState(store, {\n previousContext: store.context(),\n formIsDirty: false,\n });\n\n try {\n await this.loadPage(store.currentPage()?.id, true);\n } catch {\n //\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 patchState(store, {\n formIsDirty: false,\n });\n return true;\n }\n\n const rawText = result?.message?.text;\n const errorText = rawText\n ? typeof rawText === 'string'\n ? rawText.startsWith('@')\n ? await translateService.translateAsync(rawText)\n : rawText\n : translateService.resolve(rawText)\n : await translateService.translateAsync('@general:messages.generic.error.description');\n\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:messages.generic.error.title'),\n content: errorText,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n\n return false;\n } catch (error: unknown) {\n const errorText =\n error instanceof Error\n ? error.message\n : await translateService.translateAsync('@general:messages.generic.error.description');\n\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:messages.generic.error.title'),\n content: errorText,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n\n return false;\n } finally {\n if (store.status() === AXPPageStatus.Submitting) {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n }\n }\n },\n\n goToListPage() {\n if (store.adapter()?.exitUrl) {\n router.navigate([store.adapter()?.exitUrl]);\n }\n },\n };\n },\n ),\n);\n","import { AXPPageLayoutBaseComponent } from '../../layouts';\nimport { Injectable } from '@angular/core';\n\n/**\n * Registry of rendered page component instances by component key.\n * Used so page execute can delegate to the actual component instance in the view.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPPageComponentInstanceRegistryService {\n private readonly instances = new Map<string, AXPPageLayoutBaseComponent>();\n\n register(key: string, instance: AXPPageLayoutBaseComponent): void {\n this.instances.set(key, instance);\n }\n\n unregister(key: string): void {\n this.instances.delete(key);\n }\n\n get(key: string): AXPPageLayoutBaseComponent | null {\n return this.instances.get(key) ?? null;\n }\n}\n","import { AXPPageComponentRegistryService } from '@acorex/platform/layout/components';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport { ComponentRef, Directive, effect, inject, input, OnDestroy, OnInit, output, ViewContainerRef } from '@angular/core';\nimport { AXPPageComponentInstanceRegistryService } from './page-component-instance-registry.service';\n\n//#region ---- Page Component Renderer Directive ----\n\n/**\n * Directive for rendering page components dynamically\n * Similar to component-slot pattern but specifically for page components\n */\n@Directive({\n selector: '[axp-page-component-renderer]',\n standalone: true,\n})\nexport class AXPPageComponentRendererDirective implements OnInit, OnDestroy {\n componentKey = input.required<string>();\n rootContext = input<Record<string, any>>({});\n pageConfig = input<Record<string, unknown>>();\n options = input<Record<string, any>>({});\n\n /** Emitted when the component instance is registered and ready */\n componentReady = output<string>();\n\n /** Returns the dynamically mounted page component instance, if loaded. */\n getMountedPageInstance(): unknown {\n return this.componentRef?.instance ?? null;\n }\n\n private viewContainerRef = inject(ViewContainerRef);\n private pageComponentRegistry = inject(AXPPageComponentRegistryService);\n private instanceRegistry = inject(AXPPageComponentInstanceRegistryService);\n private contextStore = inject(AXPContextStore);\n private componentRef: ComponentRef<any> | null = null;\n\n #contextEffect = effect(() => {\n const context = this.rootContext();\n if (this.componentRef && context) {\n this.componentRef.setInput('rootContext', context);\n }\n });\n\n #pageConfigEffect = effect(() => {\n const config = this.pageConfig();\n if (this.componentRef && config) {\n this.componentRef.setInput('pageConfig', config);\n }\n });\n\n #optionsEffect = effect(() => {\n const options = this.options();\n if (this.componentRef && options) {\n this.componentRef.setInput('options', options);\n }\n });\n\n async ngOnInit(): Promise<void> {\n await this.loadComponent();\n }\n\n ngOnDestroy(): void {\n if (this.componentRef) {\n this.syncWizardStepContextBeforeTeardown();\n this.instanceRegistry.unregister(this.componentKey());\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n\n /** Persists page edits into the shared form context before the step component is destroyed. */\n private syncWizardStepContextBeforeTeardown(): void {\n const instance = this.componentRef?.instance;\n const partial = instance?.getWizardStepContext?.();\n if (!partial || typeof partial !== 'object') {\n return;\n }\n for (const [path, value] of Object.entries(partial as Record<string, unknown>)) {\n this.contextStore.update(path, value, { origin: 'system' });\n }\n }\n\n private async loadComponent(): Promise<void> {\n try {\n // Clear any existing component\n this.viewContainerRef.clear();\n\n // Get component loader from registry\n const loader = await this.pageComponentRegistry.find(this.componentKey());\n if (!loader) {\n console.error(`Component with key \"${this.componentKey()}\" not found in registry`);\n return;\n }\n\n // Load component type\n const ComponentType = await loader();\n\n // Create component instance\n this.componentRef = this.viewContainerRef.createComponent(ComponentType);\n this.instanceRegistry.register(this.componentKey(), this.componentRef.instance);\n\n const context = this.rootContext();\n if (context) {\n this.componentRef.setInput('rootContext', context);\n }\n\n const options = this.options();\n if (options) {\n this.componentRef.setInput('options', options);\n }\n\n const pageConfig = this.pageConfig();\n if (pageConfig) {\n this.componentRef.setInput('pageConfig', pageConfig);\n }\n\n // Notify that component is ready (allows parent to re-fetch actions)\n this.componentReady.emit(this.componentKey());\n } catch (error) {\n console.error(`Failed to load component \"${this.componentKey()}\":`, error);\n }\n }\n}\n\n//#endregion\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostListener,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\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 { AXLoadingModule } from '@acorex/components/loading';\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 { AXTabsModule } from '@acorex/components/tabs';\nimport { AXPEntityCommandScope } from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBadge,\n AXPBreadcrumbItem,\n AXPBroadcastEventService,\n AXPContextChangeEvent,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPMultiLanguageString,\n AXPPageStatus,\n} from '@acorex/platform/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWidgetContainerComponent, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPDataListWidgetViewComponent } from '@acorex/platform/layout/widgets';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subject, Subscription, takeUntil } from 'rxjs';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '../../layouts';\nimport {\n AXPLayoutDetailsViewAction,\n AXPLayoutDetailsViewAdapter,\n AXPLayoutDetailsViewPage,\n} from './details-view.adapter';\nimport { AXPLayoutDetailsViewViewModel } from './details-view.viewmodel';\nimport { AXPPageComponentRendererDirective } from './page-component-renderer.directive';\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 AXLoadingModule,\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 adapter = input.required<AXPLayoutDetailsViewAdapter>();\n //\n protected vm = inject(AXPLayoutDetailsViewViewModel);\n protected router = inject(Router);\n protected route = inject(ActivatedRoute);\n protected eventService = inject(AXPBroadcastEventService);\n protected deviceService = inject(AXPDeviceService);\n private onSelectionChangeSubscription?: Subscription;\n private readonly destroyed$ = new Subject<void>();\n private formBaselineCaptured = false;\n private formBaselinePageKey: string | null = null;\n private formBaselineTimer?: ReturnType<typeof setTimeout>;\n private suppressDirtySync = false;\n private footerActionsGeneration = 0;\n\n private static readonly FORM_BASELINE_IDLE_MS = 500;\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\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(\n () => !!(this.rejectFooterCommand() || this.acceptFooterCommand()),\n );\n\n /** Entity save/discard — driven live by {@link AXPLayoutDetailsViewViewModel.isDirty}, not evaluated action metadata. */\n protected showSaveDiscardFooter = computed(() => this.hasSaveDiscardFooterCommands() && this.vm.isDirty());\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.isSaving()) {\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 * Append timestamp query param to trigger router to re-run guards/resolvers\n */\n protected async refreshLayout(): Promise<void> {\n const router = this.router;\n const route = this.route;\n const now = Date.now();\n await router.navigate([], {\n relativeTo: route,\n queryParams: { _ts: now },\n queryParamsHandling: 'merge',\n });\n }\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n //\n await this.vm.load(this.adapter());\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\n async ngAfterViewInit() {\n const listWidget = (await this.widgetContainer()?.find('page-list_table')) as AXPDataListWidgetViewComponent;\n if (listWidget?.api && typeof listWidget.api === 'function') {\n const onSelectionChange = listWidget.api()['onSelectionChange'] as Subject<any>;\n if (onSelectionChange) {\n this.onSelectionChangeSubscription = onSelectionChange.subscribe((e: any) => {\n this.vm.updatePageSelectedRows(e);\n this.recompute();\n });\n }\n }\n }\n\n ngOnDestroy(): void {\n if (this.formBaselineTimer) {\n clearTimeout(this.formBaselineTimer);\n }\n this.onSelectionChangeSubscription?.unsubscribe();\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n #formDirtyEffect = effect(() => {\n if (this.suppressDirtySync) {\n return;\n }\n\n const container = this.widgetContainer();\n if (!container || !this.vm.formBaselineCommitted()) {\n return;\n }\n\n const isDirty = container.isFormDirty();\n if (this.vm.isDirty() === isDirty) {\n return;\n }\n this.vm.updateContext(this.vm.context(), isDirty);\n untracked(() => this.recompute());\n });\n\n #formBaselineEffect = effect(() => {\n const pageId = this.vm.currentPage()?.id ?? null;\n const isRendered = this.vm.isLoaded() && !this.vm.isBusy();\n const baselineCommitted = this.vm.formBaselineCommitted();\n\n if (!baselineCommitted) {\n untracked(() => {\n this.formBaselineCaptured = false;\n if (this.formBaselineTimer) {\n clearTimeout(this.formBaselineTimer);\n this.formBaselineTimer = undefined;\n }\n });\n }\n\n if (!isRendered) {\n return;\n }\n\n const container = this.widgetContainer();\n if (!container) {\n return;\n }\n\n // Re-run when widgets finish registering so baseline is not skipped at idle timeout.\n container.builderService.registeredWidgetsCount();\n\n if (this.formBaselinePageKey !== pageId) {\n untracked(() => {\n this.formBaselinePageKey = pageId;\n this.formBaselineCaptured = false;\n if (this.formBaselineTimer) {\n clearTimeout(this.formBaselineTimer);\n this.formBaselineTimer = undefined;\n }\n });\n }\n\n if (this.formBaselineCaptured) {\n return;\n }\n\n this.scheduleFormBaselineCommit(container);\n });\n\n #FooterActionsEffect = effect(() => {\n const generation = ++this.footerActionsGeneration;\n this.updateTrigger();\n this.vm.isDirty();\n this.vm.isSaving();\n this.vm.formBaselineCommitted();\n void this.refreshFooterActions(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 protected handleOnContextChanged(e: AXPContextChangeEvent) {\n if (this.suppressDirtySync) {\n this.vm.updateContext(e.data);\n return;\n }\n\n const formIsDirty = this.vm.formBaselineCommitted() ? (e.isFormDirty ?? false) : false;\n this.vm.updateContext(e.data, formIsDirty);\n this.recompute();\n }\n\n /**\n * Clears widget-store dirty state and schedules a fresh post-hydration baseline (discard / save).\n */\n private resetFormDirtyBaseline(): void {\n this.suppressDirtySync = true;\n\n const container = this.widgetContainer();\n const context = this.vm.context();\n\n this.vm.resetFormBaselineCommitted();\n this.vm.updateContext(context, false);\n this.formBaselineCaptured = false;\n if (this.formBaselineTimer) {\n clearTimeout(this.formBaselineTimer);\n this.formBaselineTimer = undefined;\n }\n\n if (container) {\n this.finalizeFormCleanState(container, context);\n } else {\n this.suppressDirtySync = false;\n }\n }\n\n /**\n * Commits a clean baseline immediately when widgets are mounted; otherwise defers to idle commit.\n */\n private finalizeFormCleanState(container: AXPWidgetContainerComponent, context: unknown): void {\n container.replaceContext(context);\n\n const widgetCount = container.builderService.registeredWidgetsCount();\n if (widgetCount > 0) {\n container.contextService.commitBaseline();\n this.vm.markFormBaselineCommitted();\n this.formBaselineCaptured = true;\n this.suppressDirtySync = false;\n this.vm.updateContext(container.contextService.data(), false);\n return;\n }\n\n this.scheduleFormBaselineCommit(container);\n }\n\n private scheduleFormBaselineCommit(container: AXPWidgetContainerComponent): void {\n if (this.formBaselineTimer) {\n clearTimeout(this.formBaselineTimer);\n }\n\n this.formBaselineTimer = setTimeout(() => {\n if (this.formBaselineCaptured) {\n return;\n }\n\n const widgetCount = container.builderService.registeredWidgetsCount();\n if (widgetCount === 0) {\n this.formBaselineTimer = undefined;\n this.scheduleFormBaselineCommit(container);\n return;\n }\n\n container.contextService.commitBaseline();\n container.builderService.notifyWidgetDirtyChanged();\n this.vm.markFormBaselineCommitted();\n this.formBaselineCaptured = true;\n this.formBaselineTimer = undefined;\n this.suppressDirtySync = false;\n // Post-baseline form must start clean; composite widgets may still report stale dirty during hydration.\n this.vm.updateContext(container.contextService.data(), false);\n }, AXPLayoutDetailsViewComponent.FORM_BASELINE_IDLE_MS);\n }\n\n protected handleSelectPage(page: AXPLayoutDetailsViewPage) {\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 async getPageBadge(): Promise<AXPBadge | null> {\n return this.vm.getPageBadge();\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 // 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 ---- 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()!);\n if (saved) {\n this.resetFormDirtyBaseline();\n }\n this.recompute();\n return;\n }\n\n if (command.name == rejectCommand) {\n await this.vm.discard();\n this.resetFormDirtyBaseline();\n this.recompute();\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 }\n }\n\n @HostListener('document:keydown', ['$event'])\n protected async handleKeyboardEvent(event: KeyboardEvent) {\n if (event.ctrlKey) {\n switch (event.code) {\n case 'KeyS':\n event.preventDefault();\n event.stopPropagation();\n await this.execute({ name: this.vm.currentPage()?.settings?.commands?.accept?.command.name || 'save' });\n break;\n }\n }\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(vm.showPages() ? (vm.adapter()?.title ?? '') : (vm.adapter()?.label ?? ''), 'string', vm.rootContext())\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 class=\"axp-vertical-tabs\" [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\">\n @for (item of vm.adapter()?.pages; track $index) {\n <ax-tab-item\n [text]=\"(formatService.format(item.label, 'string', vm.rootContext()) | translate | async)!\"\n (onClick)=\"handleSelectPage(item)\"\n [active]=\"vm.currentPage()?.id === item.id\"\n >\n <ax-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n <!-- Content Section -->\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-4\">\n @if (vm.showPages()) {\n <axp-layout-list class=\"ax-w-full\">\n @for (item of vm.adapter()?.pages; track $index) {\n <axp-layout-list-item (click)=\"handleSelectPage(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"ax-text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"ax-font-semibold\">{{\n formatService.format(item.label, 'string', vm.rootContext()) | translate | async\n }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"ax-text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n } @else {\n <ax-form class=\"ax-h-full ax-w-full\" #form>\n <axp-widgets-container\n #widgetsContainerRef\n [context]=\"vm.context()\"\n (onContextChanged)=\"handleOnContextChanged($event)\"\n >\n <div class=\"ax-flex ax-flex-col ax-w-full ax-gap-4 ax-h-full\">\n @for (item of vm.currentPageContent(); track $index) {\n @if ('type' in item && item.type === 'component') {\n <!-- Component-based content -->\n <div\n axp-page-component-renderer\n [componentKey]=\"$any(item).componentKey\"\n [rootContext]=\"vm.rootContext()\"\n [pageConfig]=\"$any(item).pageConfig\"\n [options]=\"$any(item).options\"\n (componentReady)=\"recompute()\"\n ></div>\n } @else {\n <!-- Widget-based content -->\n <ng-container axp-widget-renderer [node]=\"$any(item)\" [mode]=\"$any(item).mode ?? 'view'\"></ng-container>\n }\n }\n @if (vm.currentPage()?.tabs?.length) {\n <div class=\"axp-horizontal-tabs\">\n <ax-tabs [location]=\"'bottom'\" [fitParent]=\"false\" look=\"classic\">\n @for (tab of vm.currentPageTabs(); track $index) {\n <ax-tab-item\n (onClick)=\"vm.setCurrentTab(tab)\"\n [text]=\"(tab.title | translate | async)!\"\n [active]=\"vm.currentTab()?.id === tab.id\"\n >\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 @for (renderedTab of vm.currentPageRenderedTabs(); track renderedTab.tabId) {\n <div [class]=\"renderedTab.tabId === vm.currentTab()?.id ? '' : 'ax-hidden'\">\n @for (content of vm.getRenderedTabContent(renderedTab.tabId); track $index) {\n <ng-container axp-widget-renderer [node]=\"content\" [mode]=\"content.mode ?? 'view'\">\n </ng-container>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n }\n </axp-page-content>\n\n <!-- Footer Section -->\n @if (hasFooter()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <!-- secondary footer actions -->\n @if (hasVisibleFooterSecondaryActions()) {\n <ax-button\n [class.ax-sm]=\"deviceService.isSmall()\"\n [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\"\n [color]=\"'default'\"\n >\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\n [text]=\"(t(action.title) | async)!\"\n [color]=\"action.color\"\n [disabled]=\"isFooterActionDisabled(action)\"\n (onClick)=\"execute(action.command!)\"\n >\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\n [class.ax-sm]=\"deviceService.isSmall()\"\n [disabled]=\"vm.isSaving()\"\n [text]=\"(t(reject.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"reject.color\"\n (onClick)=\"execute(reject.command)\"\n >\n <ax-prefix>\n <i class=\"{{ reject.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n @if (acceptFooterCommand(); as accept) {\n <ax-button\n [class.ax-sm]=\"deviceService.isSmall()\"\n [disabled]=\"vm.isSaving()\"\n [text]=\"(t(accept.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"accept.color\"\n (onClick)=\"execute(accept.command)\"\n >\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\n [class.ax-sm]=\"deviceService.isSmall()\"\n [disabled]=\"isFooterActionDisabled(action)\"\n [text]=\"(t(action.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"action.color\"\n (onClick)=\"execute(action.command!)\"\n >\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\n [text]=\"(t(sub.title) | async)!\"\n [color]=\"sub.color\"\n [disabled]=\"isFooterActionDisabled(sub)\"\n (onClick)=\"execute(sub.command!)\"\n >\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>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i7","i1","i2","i3","i4","i5","i6","i8"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-layout-views.mjs","sources":["../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/page/page-unsaved-changes.util.ts","../../../../libs/platform/layout/views/src/lib/layouts/page/page-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.base.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.ts","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout.component.html","../../../../libs/platform/layout/views/src/lib/layouts/popup/popup-layout-base.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.viewmodel.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-action-shortcuts.util.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.component.ts","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view.component.html","../../../../libs/platform/layout/views/src/lib/views/details-view/details-view-can-deactivate.guard.ts","../../../../libs/platform/layout/views/src/acorex-platform-layout-views.ts"],"sourcesContent":["import { AXPActionMenuItem, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPExecuteCommand, AXPMultiLanguageString, AXPPageStatus } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPageLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n\n abstract hasTitleActions: Signal<boolean>;\n\n abstract hasPrimaryActions: Signal<boolean>;\n\n abstract hasSecondaryActions: Signal<boolean>;\n\n abstract hasActions: Signal<boolean>;\n\n abstract breadcrumbs: Signal<AXPBreadcrumbItem[]>;\n\n abstract title: Signal<AXPMultiLanguageString>;\n\n abstract titleIcon: Signal<string | null>;\n\n abstract hasTitle: Signal<boolean>;\n\n abstract hasTitleIcon: Signal<boolean>;\n\n abstract hasDescription: Signal<boolean>;\n\n abstract description: Signal<AXPMultiLanguageString | null>;\n\n abstract hasBreadcrumbs: Signal<boolean>;\n\n abstract hasBadge: Signal<boolean>;\n\n abstract badge: Signal<AXPBadge | null>;\n\n abstract hasStatus: Signal<boolean>;\n\n abstract status: Signal<AXPPageStatus | null>;\n\n abstract hasBackButton: Signal<boolean>;\n\n abstract backButton: Signal<AXPBackButton | null>;\n\n abstract onBackButtonClick: () => void | Promise<void>;\n\n abstract startSideToggle: () => void | Promise<void>;\n\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n\n /** Whether the page has user-origin edits that are not yet persisted. */\n abstract hasUnsavedChanges(): boolean;\n\n /** Resolves the page title badge (used by host layouts for nested entity pages). */\n abstract resolvePageBadge(): AXPBadge | null | Promise<AXPBadge | null>;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXClickEvent, AXCommonModule } from '@acorex/cdk/common';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXPStickyDirective, AXPUnsavedChangesCanDeactivate } from '@acorex/platform/common';\nimport { AXPComponentSlotModule } from '@acorex/platform/core';\n//\nimport { AXDrawerContainerDirective, AXDrawerDirectiveModule, AXDrawerItemDirective } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPDeviceService, AXPExecuteCommand } 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\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\"\n class=\"ax-z-50 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\n id=\"axp-page-badge\"\n class=\"__title-badge --{{ page?.badge()?.color }}\"\n [attr.title]=\"page?.badge()?.description ?? page?.badge()?.title\"\n [attr.aria-label]=\"page?.badge()?.title\"\n >\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/core';\n\n//#region ---- Page Unsaved Changes Utilities ----\n\n/**\n * Builds the standard \"Not Saved\" page badge when the global show-page-badge setting is enabled.\n */\nexport async function buildNotSavedPageBadge(\n translateService: AXTranslationService,\n settingsService: AXPSettingsService,\n): Promise<AXPBadge | null> {\n const showPageBadge = await settingsService.get<boolean>(AXPCommonSettings.ShowPageBadge);\n if (!showPageBadge) {\n return null;\n }\n\n return {\n title: await translateService.translateAsync('@general:terms.interface.save-status.not-saved.title'),\n color: 'warning',\n description: await translateService.translateAsync(\n '@general:terms.interface.save-status.not-saved.description',\n ),\n };\n}\n\n/**\n * Whether a command name represents a discard/revert action on a details sub-page.\n */\nexport function isDiscardCommand(commandName: string, rejectCommandName?: string | null): boolean {\n if (!commandName) {\n return false;\n }\n if (rejectCommandName && commandName === rejectCommandName) {\n return true;\n }\n if (commandName === 'discard') {\n return true;\n }\n return /:discard$/i.test(commandName) || commandName.endsWith('Discard');\n}\n\n//#endregion\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService, AXPSettingsService } from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBadge,\n AXPBreadcrumbItem,\n AXPExecuteCommand,\n AXPMultiLanguageString,\n AXPPageStatus,\n} from '@acorex/platform/core';\nimport { AXPPolicyEngineService } from '@acorex/platform/runtime';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { isEmpty } from 'lodash-es';\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\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 async ngOnInit() {\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\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\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 //#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 this.breadcrumbs.set([...this.defaultBreadCrumbs, ...breadCrumbs]);\n });\n\n public hasBreadcrumbs = computed(() => this.breadcrumbs().length > 1);\n\n protected getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]> {\n return [];\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 protected async getPageBadge(): Promise<AXPBadge | null> {\n if (!this.hasUnsavedChanges()) {\n return null;\n }\n return buildNotSavedPageBadge(this.translateService, this.settingsService);\n }\n\n async resolvePageBadge(): Promise<AXPBadge | null> {\n return this.getPageBadge();\n }\n\n //#endregion\n\n //#region ---------------- Status ----------------\n\n public status = signal<AXPPageStatus | null>(null);\n\n public hasStatus = computed(() => this.status() !== null);\n\n #statusEffect = effect(async () => {\n this.updateTrigger();\n this.status.set(await this.getPageStatus());\n });\n\n protected getPageStatus(): AXPPageStatus | null | Promise<AXPPageStatus | null> {\n return null;\n }\n\n //#endregion\n\n //#region ---------------- Layout ----------------\n\n protected layout = viewChild(AXPPageLayoutComponent);\n\n //TODO: Remove this after migration to the new layout\n protected toggleEndSide() {\n //this.layout()?.toggleStartSide()\n }\n\n //TODO: Remove this after migration to the new layout\n protected toggleStartSide() {\n this.layout()?.toggleStartSide();\n }\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasPrimaryActions = computed(() => this.primaryMenuItems().filter((item) => item.visible != false).length > 0);\n\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getPrimaryMenuItems();\n this.primaryMenuItems.set(items);\n });\n\n public getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n\n public hasSecondaryActions = computed(\n () => this.secondaryMenuItems().filter((item) => item.visible != false).length > 0,\n );\n\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n const items = await this.getSecondaryMenuItems();\n this.secondaryMenuItems.set(items);\n });\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public backButton = signal<AXPBackButton | null>(null);\n\n public hasBackButton = computed(() => this.backButton() !== null);\n\n protected getBackButton(): (AXPBackButton | null) | Promise<AXPBackButton | null> {\n return null;\n }\n\n #backButtonEffect = effect(async () => {\n this.updateTrigger();\n this.backButton.set(await this.getBackButton());\n });\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n /**\n * Optional partial context to merge into the create/update wizard when leaving a page step.\n * Override when the page keeps edits in local state instead of the shared form context.\n */\n getWizardStepContext(): Record<string, unknown> | null {\n return null;\n }\n\n public startSideToggle(): void | Promise<void> {\n this.layout();\n }\n\n public onBackButtonClick(): void | Promise<void> { }\n\n //#endregion\n}\n","import { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { Signal } from '@angular/core';\n\nexport abstract class AXPPopupLayoutBase {\n abstract primaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract secondaryMenuItems: Signal<AXPActionMenuItem[]>;\n abstract titleActions: Signal<AXPActionMenuItem[]>;\n abstract hasTitleActions: Signal<boolean>;\n abstract hasPrimaryActions: Signal<boolean>;\n abstract hasSecondaryActions: Signal<boolean>;\n abstract hasActions: Signal<boolean>;\n abstract title: Signal<string>;\n abstract hasTitle: Signal<boolean>;\n abstract execute: (command: AXPExecuteCommand) => void | Promise<void>;\n} ","import { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\n//\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXClickEvent, AXCommonModule } from \"@acorex/cdk/common\";\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\n//\nimport { AXDrawerDirectiveModule } from '@acorex/cdk/drawer';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPPopupLayoutBase } from './popup-layout.base';\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n //\n AXCommonModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXButtonModule,\n AXTranslationModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutContainerComponent,\n ],\n templateUrl: './popup-layout.component.html',\n styleUrls: ['./popup-layout.component.scss'],\n selector: 'axp-popup-layout',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPPopupLayoutComponent {\n protected popup = inject<AXPPopupLayoutBase>(AXPPopupLayoutBase);\n protected layoutService = inject(AXPLayoutThemeService);\n protected workflow = inject(AXPWorkflowService);\n\n #initialize = afterNextRender(async () => {\n this.checkScrollableContent();\n });\n\n #effect = effect(() => {\n this.popup?.title();\n this.checkScrollableContent();\n });\n\n private checkScrollableContent() {\n const content = document.querySelector('axp-popup-content');\n if (content && content.scrollHeight >= content.clientHeight) {\n content.classList.add('--scrollable');\n }\n }\n\n protected handleActionClick(item: AXPActionMenuItem) {\n if (item.command && (item.items?.length ?? 0) == 0) {\n this.popup?.execute(item.command);\n }\n }\n\n\n protected handleSecondaryActionClick(item: AXPActionMenuItem) {\n if (item.command) {\n this.popup?.execute(item.command);\n }\n }\n\n protected handleBackdropClick(e: AXClickEvent) {\n e.nativeEvent.preventDefault();\n e.nativeEvent.stopPropagation();\n e.component.hide();\n return false;\n }\n} ","<axp-layout-container id=\"axp-popup-layout\" #container>\n <ng-content select=\"axp-page-content\"></ng-content>\n <axp-page-footer id=\"axp-popup-footer\" *translate=\"let t\">\n <ax-prefix> </ax-prefix>\n @if (popup.hasPrimaryActions()) {\n <ax-suffix>\n @for (item of popup.primaryMenuItems(); track $index) {\n <ax-button\n [attr.id]=\"'axp-btn-primary-' + (item.name || item.title)\"\n [text]=\"(t(item.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"item.color\"\n (onClick)=\"handleActionClick(item)\"\n >\n <ax-prefix>\n <i class=\"{{ item.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-suffix>\n }\n </axp-page-footer>\n</axp-layout-container>\n","import { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\nimport { AXPPopupLayoutComponent } from './popup-layout.component';\nimport { AXBasePageComponent } from '@acorex/components/page';\n\n@Component({\n standalone: true,\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class AXPPopupLayoutBaseComponent extends AXBasePageComponent {\n //#region ---------------- Services ----------------\n\n protected readonly layoutService = inject(AXPLayoutThemeService);\n protected readonly sessionService = inject(AXPSessionService);\n protected readonly translateService = inject(AXTranslationService);\n protected readonly formatService = inject(AXFormatService);\n protected readonly toastService = inject(AXToastService);\n protected readonly homePageService = inject(AXPHomePageService);\n\n //#endregion\n\n //#region ---------------- Signal to force recomputation ----------------\n\n private _updateTrigger = signal(0);\n\n protected updateTrigger = this._updateTrigger.asReadonly();\n\n protected recompute() {\n this._updateTrigger.set(this._updateTrigger() + 1);\n }\n\n //#endregion\n\n //#region ---------------- Lifecycle hooks ----------------\n\n override async ngOnInit() {\n super.ngOnInit();\n this.translateService.langChanges$.subscribe(() => {\n this.recompute();\n });\n }\n\n //#endregion\n\n //#region ---------------- Title ----------------\n\n public title = signal<string>('');\n\n #titleEffect = effect(async () => {\n this.updateTrigger();\n this.title.set(await this.getPopupTitle());\n });\n\n protected getPopupTitle(): string | Promise<string> {\n return '';\n }\n\n public hasTitle = computed(() => this.title() !== '');\n\n //#endregion\n\n\n\n //#region ---------------- Layout ----------------\n\n // Placeholder for popup layout reference if needed\n protected layout = viewChild(AXPPopupLayoutComponent);\n\n //#endregion\n\n //#region ---------------- Actions ----------------\n\n public primaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasPrimaryActions = computed(() => this.primaryMenuItems().length > 0);\n #primaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.primaryMenuItems.set(await this.getPrimaryMenuItems());\n });\n protected getPrimaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public secondaryMenuItems = signal<AXPActionMenuItem[]>([]);\n public hasSecondaryActions = computed(() => this.secondaryMenuItems().length > 0);\n #secondaryMenuItemsEffect = effect(async () => {\n this.updateTrigger();\n this.secondaryMenuItems.set(await this.getSecondaryMenuItems());\n });\n protected getSecondaryMenuItems(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n public hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());\n\n public titleActions = signal<AXPActionMenuItem[]>([]);\n public hasTitleActions = computed(() => this.titleActions().length > 0);\n #titleActionsEffect = effect(async () => {\n this.updateTrigger();\n this.titleActions.set(await this.getTitleActions());\n });\n protected getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n return [];\n }\n\n\n //#endregion\n\n //#region ---------------- Handle Commands ----------------\n\n public execute(command: AXPExecuteCommand): void | Promise<void> { }\n\n //#endregion\n} ","import { AXFormComponent } from '@acorex/components/form';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPCommonSettings,\n AXPEntityCommandScope,\n AXPSettingsService,\n axpIsEntityDetailsViewRoute,\n axpNavigateAppPath,\n} from '@acorex/platform/common';\nimport {\n AXPBackButton,\n AXPBadge,\n AXPPageStatus as AXPDetailsPageStatusChip,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n AXPMultiLanguageString,\n getSmart,\n} from '@acorex/platform/core';\nimport { AXPPageStatus, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\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, isEqual } from 'lodash-es';\nimport {\n AXPLayoutDetailsViewAdapter,\n AXPLayoutDetailsViewPage,\n AXPLayoutDetailsViewTabItem,\n} from './details-view.adapter';\n\n//#region ---- Root-context widget expression resolution ----\n\n/**\n * Evaluates `{{ ... }}` strings inside `options.customFilterDefinitions` using `rootContext`\n * (details adapter load data), so filter UI does not depend on widget-renderer contextService.\n */\nasync function buildEvaluatedPageContentsForRootContext(\n currentPage: AXPLayoutDetailsViewPage | null,\n rootContext: Record<string, unknown>,\n evaluatorService: AXPExpressionEvaluatorService,\n): Promise<{\n evaluatedPageContent: AXPWidgetNode[];\n evaluatedTabContentsById: Record<string, AXPWidgetNode[]>;\n}> {\n if (!currentPage) {\n return { evaluatedPageContent: [], evaluatedTabContentsById: {} };\n }\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => getSmart(rootContext, path),\n },\n };\n\n const resolveNodes = async (nodes: AXPWidgetNode[] | undefined): Promise<AXPWidgetNode[]> => {\n if (!nodes?.length) {\n return [];\n }\n const cloned = cloneDeep(nodes);\n for (const node of cloned) {\n const defs = node.options?.['customFilterDefinitions'] as unknown[] | undefined;\n if (Array.isArray(defs) && defs.length > 0) {\n node.options!['customFilterDefinitions'] = await evaluatorService.evaluate(defs, scope);\n }\n }\n return cloned;\n };\n\n const evaluatedPageContent = await resolveNodes(currentPage.content);\n const evaluatedTabContentsById: Record<string, AXPWidgetNode[]> = {};\n for (const tab of currentPage.tabs ?? []) {\n evaluatedTabContentsById[tab.id] = await resolveNodes(tab.content);\n }\n\n return { evaluatedPageContent, evaluatedTabContentsById };\n}\n\n//#endregion\n\nexport const AXPLayoutDetailsViewViewModel = signalStore(\n withState(() => {\n const state = {\n adapter: null as AXPLayoutDetailsViewAdapter | null,\n rootContext: {} as Record<string, any>,\n previousContext: {} as Record<string, any>,\n context: {} as Record<string, any>,\n scope: null as AXPExpressionEvaluatorScope | null,\n status: AXPPageStatus.Processing,\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 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 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 ) => {\n const refreshEvaluatedPageContents = async (page: AXPLayoutDetailsViewPage | null): Promise<void> => {\n const rootCtx = store.rootContext() as Record<string, unknown>;\n const { evaluatedPageContent, evaluatedTabContentsById } = await buildEvaluatedPageContentsForRootContext(\n page,\n rootCtx,\n evaluatorService,\n );\n patchState(store, {\n evaluatedPageContent,\n evaluatedTabContentsById,\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 pageId = params['page'];\n const adapter = store.adapter();\n if (!adapter) {\n return;\n }\n\n let currentPage: AXPLayoutDetailsViewPage | null = null;\n if (pageId) {\n currentPage = adapter.pages.find((p) => p.id === pageId) ?? null;\n } else if (deviceService.isLarge() || adapter.pages.length === 1) {\n currentPage = adapter.pages.find((p) => p.isPrimary) ?? adapter.pages[0];\n }\n\n const currentTab = currentPage?.tabs?.[0] ?? null;\n\n if (store.currentPage()?.id !== currentPage?.id) {\n // `load()` → `loadPage` owns initial hydration when both sides are still null.\n if (store.currentPage() == null && currentPage == null) {\n return;\n }\n\n patchState(store, {\n currentPage,\n currentTab,\n });\n void refreshEvaluatedPageContents(currentPage);\n }\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 evaluated = await formatService.format(sourceAfterPreLocale, 'string', formatContext);\n } else {\n evaluated = await formatService.format(raw as AXPMultiLanguageString, 'string', formatContext);\n }\n\n /** Post-eval: MLS-aware resolution again — evaluate may return MLS or map-like wrappers. */\n return finalizeBreadcrumbTitleEvaluated(evaluated, raw);\n }\n\n /**\n * Resolves MLS objects, evaluates format templates, or applies string formatting against page context (same semantics as legacy details layout header meta).\n */\n function convertToMultiLanguageString(\n value: AXPMultiLanguageString | null | undefined,\n ): AXPMultiLanguageString | null {\n if (!value || isEmpty(value)) {\n return null;\n }\n if (translateService.isValidMultiLanguageObject(value)) {\n return translateService.resolve(value as AXPMultiLanguageString);\n }\n return (formatService.format(value, 'string', store.context()) as AXPMultiLanguageString) ?? '';\n }\n\n return {\n async loadAdapter(adapter: AXPLayoutDetailsViewAdapter) {\n patchState(store, { adapter });\n\n // Load adapter context if adapter has load function\n let adapterContext = {};\n if (adapter.load) {\n const adapterResult = await adapter.load();\n adapterContext = adapterResult?.data ?? {};\n }\n\n patchState(store, {\n rootContext: cloneDeep(adapterContext),\n });\n },\n\n async loadPage(pageId?: string, forceRefresh?: boolean) {\n const adapter = store.adapter();\n if (!adapter) {\n throw new Error('Adapter must be loaded before loading page');\n }\n\n patchState(store, {\n status: AXPPageStatus.Processing,\n });\n\n // Get page ID from parameter or query params\n const queryParams = router.routerState.snapshot.root.queryParams;\n const targetPageId = pageId || queryParams['page'];\n\n // Find current page from page ID or conditionally default to first page\n let currentPage: AXPLayoutDetailsViewPage | null = null;\n if (targetPageId) {\n const foundPage = adapter.pages.find((p) => p.id === targetPageId);\n if (foundPage) {\n currentPage = foundPage;\n }\n } else {\n // Only auto-select primary page if layout is large\n if (deviceService.isLarge() || adapter.pages.length == 1) {\n const primaryPage = adapter.pages.find((p) => p.isPrimary) ?? adapter.pages[0];\n currentPage = primaryPage;\n }\n }\n\n // Load page data if current page exists\n let context = {};\n if (currentPage) {\n const currentPageIndex = adapter.pages.findIndex((p) => p.id === currentPage.id);\n const loadResult = await adapter.pages[currentPageIndex]?.load?.({ forceRefresh });\n context = loadResult?.data ?? {};\n }\n\n // Set current tab to first tab of the current page (internal state only)\n let currentTab = currentPage?.tabs?.[0] ?? null;\n const rootCtx = store.rootContext() as Record<string, unknown>;\n const { evaluatedPageContent, evaluatedTabContentsById } = await buildEvaluatedPageContentsForRootContext(\n currentPage,\n rootCtx,\n evaluatorService,\n );\n patchState(store, {\n previousContext: cloneDeep(context),\n context: cloneDeep(context),\n status: AXPPageStatus.Rendered,\n currentPage,\n currentTab,\n evaluatedPageContent,\n evaluatedTabContentsById,\n formDirty: false,\n });\n\n if (currentPage && axpIsEntityDetailsViewRoute(router)) {\n const pageParam = route.snapshot.queryParamMap.get('page');\n if (pageParam !== currentPage.id) {\n router.navigate([], {\n relativeTo: route,\n queryParams: { page: currentPage.id },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n }\n },\n\n async load(adapter: AXPLayoutDetailsViewAdapter) {\n // Setup expression evaluator scope\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => {\n return getSmart(store.context(), path);\n },\n isDirty: () => store.isDirty(),\n },\n };\n patchState(store, {\n scope,\n });\n //\n await this.loadAdapter(adapter);\n await this.loadPage(undefined, true);\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 if (page) {\n const firstTab = page.tabs?.[0] ?? null;\n const pageParam = route.snapshot.queryParamMap.get('page');\n const isSamePage = previousPage?.id === page.id && pageParam === page.id;\n\n patchState(store, {\n currentPage: page,\n currentTab: firstTab,\n ...(page.isReadonly ? { formDirty: false } : {}),\n });\n\n if (!isSamePage && axpIsEntityDetailsViewRoute(router)) {\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 }\n\n void refreshEvaluatedPageContents(page);\n } else {\n patchState(store, {\n currentPage: null,\n currentTab: null,\n evaluatedPageContent: [],\n evaluatedTabContentsById: {},\n });\n if (axpIsEntityDetailsViewRoute(router)) {\n const currentParams = { ...route.snapshot.queryParams };\n delete currentParams['page'];\n router.navigate([], {\n relativeTo: route,\n queryParams: currentParams,\n replaceUrl: true,\n });\n }\n }\n },\n\n setCurrentTab(tab: AXPLayoutDetailsViewTabItem) {\n patchState(store, {\n currentTab: tab,\n });\n },\n\n //#region ---- Page layout metadata (title, description, back button, badge, status) ----\n\n backButtonTitle() {\n return store.showPages() ? (store.adapter()?.label ?? '') : (store.adapter()?.title ?? '');\n },\n\n async getPageTitle(): Promise<AXPMultiLanguageString> {\n if (store.showPages()) {\n const raw = store.adapter()?.title;\n return convertToMultiLanguageString(raw) ?? '';\n }\n const raw = store.currentPage()?.title;\n return convertToMultiLanguageString(raw) ?? '';\n },\n\n async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n if (store.showPages()) {\n const raw = store.adapter()?.description;\n return convertToMultiLanguageString(raw);\n }\n const raw = store.currentPage()?.description;\n return convertToMultiLanguageString(raw);\n },\n\n async getBackButton(): Promise<AXPBackButton | null> {\n const adapter = store.adapter();\n if (!adapter) {\n return null;\n }\n if ((adapter.pages?.length ?? 0) > 1) {\n const titleRaw = (\n store.showPages() ? (adapter.label ?? '') : (adapter.title ?? '')\n ) as AXPMultiLanguageString;\n return { title: convertToMultiLanguageString(titleRaw) ?? '@general:terms.common.back' };\n }\n const label = (adapter.label ?? '') as AXPMultiLanguageString;\n return { title: convertToMultiLanguageString(label) ?? '@general:terms.common.back' };\n },\n\n async getPageBadge(): Promise<AXPBadge | null> {\n if (store.currentPage()?.isReadonly) {\n return null;\n }\n const showPageBadge = await settingsService.get<boolean>(AXPCommonSettings.ShowPageBadge);\n if (!showPageBadge) {\n return null;\n }\n const adapter = store.adapter();\n if (!adapter?.getPageBadge) {\n return null;\n }\n return adapter.getPageBadge(store.context(), store.isDirty());\n },\n\n async getPageStatus(): Promise<AXPDetailsPageStatusChip | null> {\n const adapter = store.adapter();\n if (!adapter?.getPageStatus) {\n return null;\n }\n return adapter.getPageStatus(store.context(), store.currentPage());\n },\n\n //#endregion\n\n async primaryActions() {\n const raw = store.adapter()?.actions?.filter((a) => a.priority == 'primary') ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async secondaryActions() {\n const raw =\n store\n .adapter()\n ?.actions?.filter((a) => a.priority == 'secondary' && a.scope == AXPEntityCommandScope.TypeLevel) ?? [];\n const processed = await evaluatorService.evaluate(raw, store.scope() as AXPExpressionEvaluatorScope);\n return processed;\n },\n\n async breadcrumbs() {\n const rootContext = store.rootContext();\n const scope: AXPExpressionEvaluatorScope = {\n ...rootContext,\n context: {\n eval: (path: string) => get(rootContext, path),\n },\n };\n\n const breadcrumbs = await Promise.all(\n store.adapter()?.breadcrumbs?.map(async (b) => {\n const raw = (b?.title ?? '') as AXPMultiLanguageString;\n return {\n ...b,\n title: await resolveBreadcrumbTitleFields(raw, scope, rootContext),\n };\n }) ?? [],\n );\n\n // Add current page title as the last breadcrumb item\n const currentPageLabel = store.currentPage()?.label;\n const pages = store.adapter()?.pages ?? [];\n const primaryPage = pages.find((p) => p.isPrimary) ?? pages[0];\n const isMainPage = primaryPage?.id === store.currentPage()?.id;\n if (currentPageLabel && !isMainPage) {\n const pageScope: AXPExpressionEvaluatorScope = {\n ...store.context(),\n context: {\n eval: (path: string) => get(store.context(), path),\n },\n };\n breadcrumbs.push({\n title: await resolveBreadcrumbTitleFields(\n currentPageLabel as AXPMultiLanguageString,\n pageScope,\n store.context(),\n ),\n });\n }\n\n return breadcrumbs;\n },\n\n /** Aligns view-model context with the container after revert/commit (saved baseline). */\n applySavedState(context: Record<string, unknown>) {\n const snapshot = cloneDeep(context);\n patchState(store, {\n context: snapshot,\n previousContext: snapshot,\n formDirty: false,\n });\n },\n\n async discard() {\n patchState(store, {\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 // Clear submitting before post-save refresh so the footer is not left disabled.\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\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 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 patchState(store, {\n formDirty: false,\n });\n return true;\n }\n\n const rawText = result?.message?.text;\n const errorText = rawText\n ? typeof rawText === 'string'\n ? rawText.startsWith('@')\n ? await translateService.translateAsync(rawText)\n : rawText\n : translateService.resolve(rawText)\n : await translateService.translateAsync('@general:messages.generic.error.description');\n\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:messages.generic.error.title'),\n content: errorText,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n\n return false;\n } catch (error: unknown) {\n const errorText =\n error instanceof Error\n ? error.message\n : await translateService.translateAsync('@general:messages.generic.error.description');\n\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n\n toastService.show({\n color: 'danger',\n title: await translateService.translateAsync('@general:messages.generic.error.title'),\n content: errorText,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n\n return false;\n } finally {\n if (store.status() === AXPPageStatus.Submitting) {\n patchState(store, {\n status: AXPPageStatus.Rendered,\n });\n }\n }\n },\n\n goToListPage() {\n const exitUrl = store.adapter()?.exitUrl;\n if (exitUrl) {\n void axpNavigateAppPath(router, exitUrl);\n }\n },\n };\n },\n ),\n);\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","//#region ---- Details View Action Shortcut Utilities ----\n\nimport type { AXPKeyboardShortcut, AXPKeyboardShortcutChord } from '@acorex/platform/core';\nimport { normalizeKeyboardShortcuts } from '@acorex/platform/core';\n\nexport type AXPDetailsViewActionShortcut = AXPKeyboardShortcutChord;\n\n/** Platform defaults for known entity detail commands when `shortcuts` is omitted on the action. */\nconst DEFAULT_ENTITY_DETAIL_ACTION_SHORTCUTS: Readonly<Record<string, readonly AXPDetailsViewActionShortcut[]>> = {\n 'delete-entity': ['ctrl+shift+delete'],\n};\n\nconst DEFAULT_FOOTER_COMMAND_SHORTCUTS: Readonly<Record<string, readonly AXPDetailsViewActionShortcut[]>> = {\n 'update-entity': ['ctrl+s'],\n discard: ['escape'],\n};\n\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 return defaults?.length ? [...defaults] : undefined;\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 { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\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 { AXLoadingModule } from '@acorex/components/loading';\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 {\n AXPEntityCommandScope,\n AXPUnsavedChangesConfirmService,\n AXPUnsavedChangesPopstateService,\n} from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBadge,\n AXPBreadcrumbItem,\n AXPBroadcastEventService,\n AXPContextChangeEvent,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPKeyboardShortcutBinding,\n AXPKeyboardShortcutPriority,\n AXPKeyboardShortcutRegistry,\n AXPMultiLanguageString,\n AXPPageStatus,\n} from '@acorex/platform/core';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutListComponent,\n AXPThemeLayoutListItemComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPWidgetContainerComponent, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPDataListWidgetViewComponent } from '@acorex/platform/layout/widgets';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subject, Subscription, takeUntil } from 'rxjs';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n buildNotSavedPageBadge,\n isDiscardCommand,\n} from '../../layouts';\nimport {\n AXPLayoutDetailsViewAction,\n AXPLayoutDetailsViewAdapter,\n AXPLayoutDetailsViewPage,\n AXPPageContentItem,\n} from './details-view.adapter';\nimport { AXPLayoutDetailsViewViewModel } from './details-view.viewmodel';\nimport { AXPPageComponentInstanceRegistryService } from './page-component-instance-registry.service';\nimport { AXPPageComponentRendererDirective } from './page-component-renderer.directive';\nimport {\n getDetailsViewActionCommandBaseName,\n resolveDetailsViewActionShortcuts,\n resolveDetailsViewFooterCommandShortcuts,\n} from './details-view-action-shortcuts.util';\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 AXLoadingModule,\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 adapter = input.required<AXPLayoutDetailsViewAdapter>();\n //\n protected vm = inject(AXPLayoutDetailsViewViewModel);\n protected router = inject(Router);\n protected route = inject(ActivatedRoute);\n protected eventService = inject(AXPBroadcastEventService);\n protected deviceService = inject(AXPDeviceService);\n private readonly unsavedChangesConfirm = inject(AXPUnsavedChangesConfirmService);\n private readonly unsavedChangesPopstate = inject(AXPUnsavedChangesPopstateService);\n private readonly pageComponentInstanceRegistry = inject(AXPPageComponentInstanceRegistryService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private onSelectionChangeSubscription?: Subscription;\n\n /** Prevents sidebar tab init events from pushing history before {@link ngOnInit} load completes. */\n private detailsLayoutReady = false;\n private readonly destroyed$ = new Subject<void>();\n private footerActionsGeneration = 0;\n private keyboardShortcutRegistrationGeneration = 0;\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.sidebarTabChangeSuppressed = true;\n try {\n this.sidebarTabs()?.select(index);\n } finally {\n this.sidebarTabChangeSuppressed = false;\n }\n }),\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(\n () => !!(this.rejectFooterCommand() || this.acceptFooterCommand()),\n );\n\n /** Entity save/discard — driven live by widget/container dirty state, not evaluated action metadata. */\n protected showSaveDiscardFooter = computed(\n () => this.hasSaveDiscardFooterCommands() && this.liveFormIsDirty(),\n );\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 return this.widgetContainer()?.isFormDirty() ?? false;\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.isSaving()) {\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 * Append timestamp query param to trigger router to re-run guards/resolvers\n */\n protected async refreshLayout(): Promise<void> {\n const router = this.router;\n const route = this.route;\n const now = Date.now();\n this.unsavedChangesConfirm.markLeaveConfirmed();\n await router.navigate([], {\n relativeTo: route,\n queryParams: { _ts: now },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.unsavedChangesPopstate.registerSource({\n id: 'axp-layout-details-view',\n isDirty: () => this.shouldPromptLeave(),\n });\n //\n await this.vm.load(this.adapter());\n this.detailsLayoutReady = true;\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\n async ngAfterViewInit() {\n const listWidget = (await this.widgetContainer()?.find('page-list_table')) as AXPDataListWidgetViewComponent;\n if (listWidget?.api && typeof listWidget.api === 'function') {\n const onSelectionChange = listWidget.api()['onSelectionChange'] as Subject<any>;\n if (onSelectionChange) {\n this.onSelectionChangeSubscription = onSelectionChange.subscribe((e: any) => {\n this.vm.updatePageSelectedRows(e);\n this.recompute();\n });\n }\n }\n }\n\n ngOnDestroy(): void {\n this.unsavedChangesPopstate.unregisterSource('axp-layout-details-view');\n this.onSelectionChangeSubscription?.unsubscribe();\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\n const isDirty = this.liveFormIsDirty();\n if (this.vm.formDirty() === isDirty) {\n return;\n }\n\n untracked(() => {\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.isSaving();\n void this.refreshFooterActions(generation);\n });\n\n #keyboardShortcutsEffect = effect(() => {\n const generation = ++this.keyboardShortcutRegistrationGeneration;\n this.updateTrigger();\n this.liveFormIsDirty();\n this.vm.isSaving();\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 protected handleOnContextChanged(e: AXPContextChangeEvent) {\n this.vm.setFormDirty(e.isFormDirty ?? false);\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 private async finalizeSave(): Promise<void> {\n const container = this.widgetContainer();\n if (!container) {\n this.vm.setFormDirty(false);\n return;\n }\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 }\n\n private finalizeDiscard(): void {\n const container = this.widgetContainer();\n if (!container) {\n return;\n }\n container.revertAndSettle();\n this.vm.applySavedState(container.contextService.data() as Record<string, unknown>);\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 (!target || target.id === currentId) {\n return;\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 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 /** 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 /** Whether the active component-based entity page has unsaved edits. */\n private isActivePageComponentDirty(): boolean {\n return this.getActivePageComponentInstance()?.hasUnsavedChanges() ?? false;\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.liveFormIsDirty();\n }\n\n /** Single gate for leaving the page or switching details sub-pages when dirty. */\n private confirmLeaveIfDirty(): Promise<boolean> {\n return this.unsavedChangesConfirm.confirmIfDirty(this.shouldPromptLeave());\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.vm.discard();\n this.finalizeDiscard();\n this.recompute();\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.vm.discard();\n this.finalizeDiscard();\n this.recompute();\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) {\n return;\n }\n\n this.actionShortcutEntries.set(entries);\n this.registerCoreKeyboardShortcuts();\n this.registerActionKeyboardShortcuts(entries);\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 [primaryActions, secondaryActions] = await Promise.all([\n this.getAllPrimaryActions(),\n this.getAllSecondaryActions(),\n ]);\n\n for (const action of [...primaryActions, ...secondaryActions]) {\n if (action.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 = 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.isHeaderActionAvailable(action),\n disabled: AXPLayoutDetailsViewComponent.isTruthyActionFlag(action.disabled),\n });\n }\n\n return map;\n }\n\n private isHeaderActionAvailable(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 (page supports them). */\n private isCoreSaveShortcutAvailable(): boolean {\n return !this.vm.currentPage()?.isReadonly && !!this.acceptFooterCommand();\n }\n\n private isCoreDiscardShortcutAvailable(): boolean {\n return !this.vm.currentPage()?.isReadonly && !!this.rejectFooterCommand();\n }\n\n private canExecuteSaveShortcut(): boolean {\n if (this.vm.currentPage()?.isReadonly || this.vm.isSaving()) {\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.isSaving()) {\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 isActionShortcutActive(entryId: string): boolean {\n if (this.vm.currentPage()?.isReadonly || this.vm.isSaving()) {\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 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\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: '@general:keyboard-shortcuts.groups.entity-details',\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: '@general:keyboard-shortcuts.groups.entity-details',\n allowInEditableFields: true,\n when: () => this.canExecuteDiscardShortcut(),\n handler: () => {\n void this.executeDiscardViaShortcut(rejectCommandName);\n },\n });\n }\n\n if (shortcuts.length === 0) {\n return;\n }\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n elementRef: this.elementRef,\n id: 'layout-details-view-core',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@general:keyboard-shortcuts.groups.entity-details',\n shortcuts,\n });\n }\n\n private registerActionKeyboardShortcuts(entries: Map<string, AXPDetailsViewActionShortcutEntry>): void {\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: '@general:keyboard-shortcuts.groups.entity-details',\n when: () => this.isActionShortcutActive(entryId),\n handler: () => {\n if (!this.isActionShortcutActive(entryId)) {\n return;\n }\n void this.execute(entry.command);\n },\n });\n }\n }\n\n if (shortcuts.length === 0) {\n return;\n }\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n elementRef: this.elementRef,\n id: 'layout-details-view-actions',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@general:keyboard-shortcuts.groups.entity-details',\n shortcuts,\n });\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(vm.showPages() ? (vm.adapter()?.title ?? '') : (vm.adapter()?.label ?? ''), 'string', vm.rootContext())\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\n #sidebarTabs\n class=\"axp-vertical-tabs\"\n [look]=\"'with-line-color'\"\n [location]=\"'end'\"\n [fitParent]=\"true\"\n (onActiveTabChanged)=\"handleSidebarTabChanged($event)\"\n >\n @for (item of vm.adapter()?.pages; track item.id) {\n <ax-tab-item\n [key]=\"item.id\"\n [text]=\"(formatService.format(item.label, 'string', vm.rootContext()) | translate | async)!\"\n [active]=\"vm.currentPage()?.id === item.id\"\n >\n <ax-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n <!-- Content Section -->\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-4\">\n @if (vm.showPages()) {\n <axp-layout-list class=\"ax-w-full\">\n @for (item of vm.adapter()?.pages; track $index) {\n <axp-layout-list-item (click)=\"handleSelectPage(item)\">\n <axp-layout-prefix>\n <ax-icon icon=\"far ${{ item.icon }}\" class=\"ax-text-gray-500\"></ax-icon>\n </axp-layout-prefix>\n <axp-layout-content>\n <a class=\"ax-font-semibold\">{{\n formatService.format(item.label, 'string', vm.rootContext()) | translate | async\n }}</a>\n </axp-layout-content>\n <axp-layout-suffix>\n <ax-icon icon=\" far fa-chevron-right\" class=\"ax-text-gray-400\"></ax-icon>\n </axp-layout-suffix>\n </axp-layout-list-item>\n }\n </axp-layout-list>\n } @else {\n <ax-form class=\"ax-h-full ax-w-full\" #form>\n <axp-widgets-container\n #widgetsContainerRef\n [context]=\"vm.context()\"\n (onContextChanged)=\"handleOnContextChanged($event)\"\n >\n <div class=\"ax-flex ax-flex-col ax-w-full ax-gap-4 ax-h-full\">\n @for (item of vm.currentPageContent(); track $index) {\n @if ('type' in item && item.type === 'component') {\n <!-- Component-based content -->\n <div\n axp-page-component-renderer\n [componentKey]=\"$any(item).componentKey\"\n [rootContext]=\"vm.rootContext()\"\n [pageConfig]=\"$any(item).pageConfig\"\n [options]=\"$any(item).options\"\n (componentReady)=\"recompute()\"\n ></div>\n } @else {\n <!-- Widget-based content -->\n <ng-container axp-widget-renderer [node]=\"$any(item)\" [mode]=\"$any(item).mode ?? 'view'\"></ng-container>\n }\n }\n @if (vm.currentPage()?.tabs?.length) {\n <div class=\"axp-horizontal-tabs\">\n <ax-tabs [location]=\"'bottom'\" [fitParent]=\"false\" look=\"classic\">\n @for (tab of vm.currentPageTabs(); track $index) {\n <ax-tab-item\n (onClick)=\"vm.setCurrentTab(tab)\"\n [text]=\"(tab.title | translate | async)!\"\n [active]=\"vm.currentTab()?.id === tab.id\"\n >\n <ax-prefix>\n <ax-icon icon=\"far ${{ tab.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n }\n </ax-tabs>\n <div class=\"content\">\n @if (vm.currentTab()) {\n @for (content of vm.activeTabContent(); track content.name) {\n <ng-container axp-widget-renderer [node]=\"content\" [mode]=\"content.mode ?? 'view'\">\n </ng-container>\n }\n }\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n </ax-form>\n }\n </axp-page-content>\n\n <!-- Footer Section -->\n @if (hasFooter()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <!-- secondary footer actions -->\n @if (hasVisibleFooterSecondaryActions()) {\n <ax-button\n [class.ax-sm]=\"deviceService.isSmall()\"\n [iconOnly]=\"deviceService.isSmall()\"\n [text]=\"'@general:terms.interface.actions' | translate | async\"\n [look]=\"deviceService.isSmall() ? 'blank' : 'solid'\"\n [color]=\"'default'\"\n >\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\n [text]=\"(t(action.title) | async)!\"\n [color]=\"action.color\"\n [disabled]=\"isFooterActionDisabled(action)\"\n (onClick)=\"execute(action.command!)\"\n >\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\n [class.ax-sm]=\"deviceService.isSmall()\"\n [disabled]=\"vm.isSaving()\"\n [text]=\"(t(reject.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"reject.color\"\n (onClick)=\"execute(reject.command)\"\n >\n <ax-prefix>\n <i class=\"{{ reject.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n @if (acceptFooterCommand(); as accept) {\n <ax-button\n [class.ax-sm]=\"deviceService.isSmall()\"\n [disabled]=\"vm.isSaving()\"\n [text]=\"(t(accept.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"accept.color\"\n (onClick)=\"execute(accept.command)\"\n >\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\n [class.ax-sm]=\"deviceService.isSmall()\"\n [disabled]=\"isFooterActionDisabled(action)\"\n [text]=\"(t(action.title) | async)!\"\n [look]=\"'solid'\"\n [color]=\"action.color\"\n (onClick)=\"execute(action.command!)\"\n >\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\n [text]=\"(t(sub.title) | async)!\"\n [color]=\"sub.color\"\n [disabled]=\"isFooterActionDisabled(sub)\"\n (onClick)=\"execute(sub.command!)\"\n >\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>\n","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","i5","i6","i8"],"mappings":"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"}