@acorex/platform 19.3.8 → 19.4.1

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 (171) hide show
  1. package/auth/lib/permission/permission-definition.builder.d.ts +2 -2
  2. package/auth/lib/permission/permission.types.d.ts +1 -1
  3. package/common/index.d.ts +0 -1
  4. package/common/lib/layout/index.d.ts +0 -2
  5. package/common/lib/layout/menu/badge-helper.d.ts +2 -2
  6. package/core/index.d.ts +8 -1
  7. package/core/lib/context/context-store.service.d.ts +37 -0
  8. package/core/lib/directives/content-checker.directive.d.ts +10 -0
  9. package/core/lib/directives/index.d.ts +1 -0
  10. package/core/lib/expression-evaluator/expression-evaluator-scope-provider.service.d.ts +23 -0
  11. package/core/lib/expression-evaluator/expression-evaluator.service.d.ts +2 -0
  12. package/core/lib/expression-evaluator/index.d.ts +1 -0
  13. package/core/lib/types/interactive.types.d.ts +1 -0
  14. package/domain/README.md +3 -0
  15. package/domain/index.d.ts +2 -0
  16. package/domain/lib/domain.module.d.ts +8 -0
  17. package/domain/lib/provide-entity-crud-commands.d.ts +4 -0
  18. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-common.mjs +2 -202
  20. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-core.mjs +312 -127
  22. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-domain.mjs +71 -0
  24. package/fesm2022/acorex-platform-domain.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-layout-builder.mjs +5 -1
  26. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  27. package/fesm2022/acorex-platform-layout-components.mjs +667 -3
  28. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-layout-entity.mjs +53 -4
  30. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  31. package/fesm2022/acorex-platform-layout-views.mjs +442 -3
  32. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  33. package/fesm2022/acorex-platform-runtime.mjs +448 -0
  34. package/fesm2022/acorex-platform-runtime.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-themes-default-details-view.component-w1GLOu_c.mjs → acorex-platform-themes-default-details-view.component-DXwO-Euo.mjs} +7 -8
  36. package/fesm2022/acorex-platform-themes-default-details-view.component-DXwO-Euo.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-C8rL7vLD.mjs → acorex-platform-themes-default-entity-master-list-view.component-C0aVy6kW.mjs} +15 -13
  38. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-C0aVy6kW.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-qu3j-fxn.mjs → acorex-platform-themes-default-entity-master-single-view.component-WYpSnpSx.mjs} +34 -13
  40. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-WYpSnpSx.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-themes-default.mjs +48 -285
  42. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  43. package/fesm2022/acorex-platform-themes-shared.mjs +8 -415
  44. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  45. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-i8FcuktZ.mjs → acorex-platform-widgets-button-widget-designer.component-BWZ0L--k.mjs} +4 -4
  46. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-BWZ0L--k.mjs.map +1 -0
  47. package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-BQcHI7vG.mjs → acorex-platform-widgets-checkbox-widget-column.component-Bq8dCQJb.mjs} +3 -3
  48. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-Bq8dCQJb.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-widgets.mjs +529 -118
  50. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  51. package/fesm2022/acorex-platform-workflow.mjs +22 -3
  52. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  53. package/layout/builder/lib/builder/widget-base.component.d.ts +1 -0
  54. package/layout/builder/lib/builder/widget-map.d.ts +1 -0
  55. package/layout/components/index.d.ts +3 -0
  56. package/{common/lib/layout/task-badge → layout/components/lib/badge}/index.d.ts +1 -0
  57. package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/index.d.ts +1 -0
  58. package/layout/components/lib/blocks/layout-blocks.component.d.ts +8 -0
  59. package/layout/components/lib/blocks/layout-container.component.d.ts +13 -0
  60. package/{common/lib/layout → layout/components/lib}/component-slot/component-slot-loader.service.d.ts +5 -4
  61. package/{common/lib/layout → layout/components/lib}/component-slot/component-slot.directive.d.ts +5 -5
  62. package/layout/components/lib/component-slot/component-slot.types.d.ts +22 -0
  63. package/layout/entity/lib/entity-master-list.viewmodel.d.ts +4 -2
  64. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-column.component.d.ts +1 -1
  65. package/layout/entity/lib/workflows/modify-entity.workflow.d.ts +6 -0
  66. package/layout/views/index.d.ts +2 -1
  67. package/layout/views/lib/layouts/index.d.ts +2 -0
  68. package/layout/views/lib/layouts/page/index.d.ts +3 -0
  69. package/{themes/default/lib/layouts/base/base-page.component.d.ts → layout/views/lib/layouts/page/page-layout-base.component.d.ts} +6 -4
  70. package/{themes/default/lib/layouts/base/base-page.types.d.ts → layout/views/lib/layouts/page/page-layout.base.d.ts} +1 -1
  71. package/{themes/default/lib/layouts/base/page-layout → layout/views/lib/layouts/page}/page-layout.component.d.ts +4 -2
  72. package/layout/views/lib/layouts/popup/index.d.ts +3 -0
  73. package/layout/views/lib/layouts/popup/popup-layout-base.component.d.ts +98 -0
  74. package/layout/views/lib/layouts/popup/popup-layout.base.d.ts +14 -0
  75. package/layout/views/lib/layouts/popup/popup-layout.component.d.ts +76 -0
  76. package/layout/views/lib/{details-view → views/details-view}/details-view.adapter.d.ts +1 -1
  77. package/layout/views/lib/views/index.d.ts +1 -0
  78. package/package.json +15 -7
  79. package/runtime/README.md +3 -0
  80. package/runtime/index.d.ts +17 -0
  81. package/runtime/lib/commands/command.extension.token.d.ts +7 -0
  82. package/runtime/lib/commands/command.interface.d.ts +3 -0
  83. package/runtime/lib/commands/command.middleware.d.ts +2 -0
  84. package/runtime/lib/commands/command.registry.d.ts +16 -0
  85. package/runtime/lib/commands/provide-command-middleware.d.ts +9 -0
  86. package/runtime/lib/commands/provide-command-setups.d.ts +9 -0
  87. package/runtime/lib/policy/policy-middleware-provider.d.ts +9 -0
  88. package/runtime/lib/policy/policy.directive.d.ts +9 -0
  89. package/runtime/lib/policy/policy.extension.token.d.ts +7 -0
  90. package/runtime/lib/policy/policy.interface.d.ts +17 -0
  91. package/runtime/lib/policy/policy.middleware.d.ts +3 -0
  92. package/runtime/lib/policy/policy.registry.d.ts +19 -0
  93. package/runtime/lib/policy/policy.service.d.ts +8 -0
  94. package/runtime/lib/policy/policy.types.d.ts +7 -0
  95. package/runtime/lib/queries/provide-query-middleware.d.ts +9 -0
  96. package/runtime/lib/queries/provide-query-setups.d.ts +9 -0
  97. package/runtime/lib/queries/query.extension.token.d.ts +7 -0
  98. package/runtime/lib/queries/query.interface.d.ts +3 -0
  99. package/runtime/lib/queries/query.middleware.d.ts +2 -0
  100. package/runtime/lib/queries/query.registry.d.ts +15 -0
  101. package/runtime/lib/runtime.module.d.ts +12 -0
  102. package/themes/default/index.d.ts +0 -1
  103. package/themes/default/lib/layouts/details-view/details-view.component.d.ts +2 -2
  104. package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.d.ts +2 -2
  105. package/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.d.ts +29 -2
  106. package/themes/default/lib/layouts/root-layout/components/horizontal-menu/horizontal-menu.component.d.ts +2 -1
  107. package/themes/default/lib/layouts/root-layout/components/side-menu/side-menu.component.d.ts +2 -1
  108. package/themes/default/lib/layouts/root-layout/root-layout.component.d.ts +1 -0
  109. package/themes/shared/index.d.ts +1 -3
  110. package/themes/shared/lib/shared.module.d.ts +1 -1
  111. package/themes/shared/lib/{components/slots → slots}/theme-slot.component.d.ts +9 -9
  112. package/widgets/lib/widgets/advance/avatar/avatar-widget-column.component.d.ts +1 -1
  113. package/widgets/lib/widgets/advance/cron-job/cron-job-widget-column.component.d.ts +1 -1
  114. package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-column.component.d.ts +6 -0
  115. package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-edit.component.d.ts +33 -0
  116. package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-filter.component.d.ts +6 -0
  117. package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-print.component.d.ts +6 -0
  118. package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget-view.component.d.ts +31 -0
  119. package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget.config.d.ts +7 -0
  120. package/widgets/lib/widgets/advance/file-uploader/file-uploader-widget.service.d.ts +12 -0
  121. package/widgets/lib/widgets/advance/file-uploader/index.d.ts +7 -0
  122. package/widgets/lib/widgets/editors/checkbox/checkbox-widget-column.component.d.ts +1 -1
  123. package/widgets/lib/widgets/editors/color/color-box-widget-column.component.d.ts +1 -1
  124. package/widgets/lib/widgets/editors/contact/contact-widget-column.component.d.ts +1 -1
  125. package/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.d.ts +1 -1
  126. package/widgets/lib/widgets/editors/email/email-box-widget-column.component.d.ts +1 -1
  127. package/widgets/lib/widgets/editors/large-text/large-text-widget-column.component.d.ts +1 -1
  128. package/widgets/lib/widgets/editors/link/link-widget-column.component.d.ts +1 -1
  129. package/widgets/lib/widgets/editors/meta-data/meta-data-widget-column.component.d.ts +1 -1
  130. package/widgets/lib/widgets/editors/number/number-box-widget-column.component.d.ts +1 -1
  131. package/widgets/lib/widgets/editors/number-unit/number-unit-box-widget-column.component.d.ts +1 -1
  132. package/widgets/lib/widgets/editors/password/password-box-widget-column.component.d.ts +1 -1
  133. package/widgets/lib/widgets/editors/phone/phone-box-widget-column.component.d.ts +1 -1
  134. package/widgets/lib/widgets/editors/rich-text/rich-text-widget-column.component.d.ts +1 -1
  135. package/widgets/lib/widgets/editors/select/select-box-widget-column.component.d.ts +1 -1
  136. package/widgets/lib/widgets/editors/selection-list/selection-list-widget-column.component.d.ts +1 -1
  137. package/widgets/lib/widgets/editors/tabular-data/tabular-data-column.component.d.ts +1 -1
  138. package/widgets/lib/widgets/editors/text/text-box-widget-column.component.d.ts +1 -1
  139. package/widgets/lib/widgets/editors/time-duration/time-duration-widget-column.component.d.ts +1 -1
  140. package/widgets/lib/widgets/editors/toggle/toggle-widget-column.component.d.ts +1 -1
  141. package/widgets/lib/widgets/index.d.ts +1 -0
  142. package/workflow/lib/slots/workflow-action-bar/workflow-action-bar.component.d.ts +36 -0
  143. package/workflow/lib/workflow-evaluator-scope.provider.d.ts +4 -0
  144. package/common/lib/layout/beardcrumb.type.d.ts +0 -6
  145. package/common/lib/layout/component-slot/component-slot.types.d.ts +0 -15
  146. package/core/lib/index.d.ts +0 -7
  147. package/fesm2022/acorex-platform-themes-default-details-view.component-w1GLOu_c.mjs.map +0 -1
  148. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-C8rL7vLD.mjs.map +0 -1
  149. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-qu3j-fxn.mjs.map +0 -1
  150. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-i8FcuktZ.mjs.map +0 -1
  151. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-BQcHI7vG.mjs.map +0 -1
  152. package/themes/default/lib/layouts/base/index.d.ts +0 -3
  153. package/themes/default/lib/layouts/base/page-layout/index.d.ts +0 -1
  154. package/themes/shared/lib/components/layout-elements/layout-blocks.component.d.ts +0 -8
  155. /package/{themes/shared/lib/components → layout/components/lib}/badge/badge.directive.d.ts +0 -0
  156. /package/{common/lib/layout/task-badge → layout/components/lib/badge}/task-badge.service.d.ts +0 -0
  157. /package/{common/lib/layout/task-badge → layout/components/lib/badge}/task-badge.type.d.ts +0 -0
  158. /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-actions.component.d.ts +0 -0
  159. /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-footer.component.d.ts +0 -0
  160. /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-header.component.d.ts +0 -0
  161. /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-list.component.d.ts +0 -0
  162. /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-section.component.d.ts +0 -0
  163. /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-side.component.d.ts +0 -0
  164. /package/{themes/shared/lib/components/layout-elements → layout/components/lib/blocks}/layout-tool-bar.component.d.ts +0 -0
  165. /package/{common/lib/layout → layout/components/lib}/component-slot/component-slot-registery.service.d.ts +0 -0
  166. /package/{common/lib/layout → layout/components/lib}/component-slot/component-slot.module.d.ts +0 -0
  167. /package/{common/lib/layout → layout/components/lib}/component-slot/index.d.ts +0 -0
  168. /package/layout/views/lib/{details-view → views/details-view}/details-view-route.resolver.d.ts +0 -0
  169. /package/layout/views/lib/{details-view → views/details-view}/details-view.viewmodel.d.ts +0 -0
  170. /package/layout/views/lib/{details-view → views/details-view}/index.d.ts +0 -0
  171. /package/layout/views/lib/{details-view → views/details-view}/sample.d.ts +0 -0
@@ -1,8 +1,447 @@
1
+ import * as i2 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { inject, viewChild, afterNextRender, effect, ChangeDetectionStrategy, ViewEncapsulation, Component, signal, computed } from '@angular/core';
5
+ import * as i4 from '@acorex/components/breadcrumbs';
6
+ import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
7
+ import * as i6 from '@acorex/components/button';
8
+ import { AXButtonModule } from '@acorex/components/button';
9
+ import { AXCommonModule } from '@acorex/cdk/common';
10
+ import * as i3 from '@acorex/components/decorators';
11
+ import { AXDecoratorModule } from '@acorex/components/decorators';
12
+ import * as i5 from '@acorex/components/dropdown';
13
+ import { AXDropdownModule } from '@acorex/components/dropdown';
14
+ import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
15
+ import * as i8 from '@acorex/platform/layout/components';
16
+ import { AXPComponentSlotModule, AXPThemeLayoutBlockComponent, AXPThemeLayoutActionsComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutContainerComponent } from '@acorex/platform/layout/components';
17
+ import { AXPStickyDirective, AXPHomePageService } from '@acorex/platform/common';
18
+ import * as i1 from '@acorex/cdk/drawer';
19
+ import { AXDrawerDirectiveModule, AXDrawerContainerDirective } from '@acorex/cdk/drawer';
20
+ import { AXDrawerModule } from '@acorex/components/drawer';
21
+ import * as i7 from '@acorex/core/translation';
22
+ import { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';
23
+ import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
24
+ import { AXPWorkflowService } from '@acorex/platform/workflow';
25
+ import { AXPCommandRegistry, AXPPolicyEngineService } from '@acorex/platform/runtime';
26
+ import { AXToastService } from '@acorex/components/toast';
27
+ import { AXFormatService } from '@acorex/core/format';
28
+ import { AXPSessionService } from '@acorex/platform/auth';
29
+ import { isNil, isEmpty, isEqual, cloneDeep } from 'lodash-es';
30
+ import { AXBasePageComponent } from '@acorex/components/page';
1
31
  import { cleanDeep, getSmart, AXPExpressionEvaluatorService } from '@acorex/platform/core';
2
32
  import { AXPPageStatus } from '@acorex/platform/layout/builder';
3
- import { computed, inject } from '@angular/core';
4
33
  import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
5
- import { isEqual, cloneDeep } from 'lodash-es';
34
+
35
+ class AXPPageLayoutBase {
36
+ }
37
+
38
+ class AXPPageLayoutComponent {
39
+ constructor() {
40
+ this.page = inject(AXPPageLayoutBase, { optional: true });
41
+ this.layoutService = inject(AXPLayoutThemeService);
42
+ this.startSideDrawer = viewChild('startSideDrawer');
43
+ this.workflow = inject(AXPWorkflowService);
44
+ this.commandRegistry = inject(AXPCommandRegistry);
45
+ this.#initialize = afterNextRender(async () => {
46
+ this.checkScrollableContent();
47
+ });
48
+ this.#effect = effect(() => {
49
+ this.page?.title();
50
+ this.page?.description();
51
+ this.checkScrollableContent();
52
+ });
53
+ }
54
+ #initialize;
55
+ #effect;
56
+ checkScrollableContent() {
57
+ const content = document.querySelector('axp-page-content');
58
+ if (content && content.scrollHeight >= content.clientHeight) {
59
+ content.classList.add('--scrollable');
60
+ }
61
+ }
62
+ handleActionClick(item) {
63
+ if (item.command && (item.items?.length ?? 0) == 0) {
64
+ this.execute(item.command);
65
+ }
66
+ }
67
+ toggleStartSide() {
68
+ this.startSideDrawer()?.toggle();
69
+ }
70
+ handleSecondaryActionClick(item) {
71
+ if (item.command) {
72
+ this.execute(item.command);
73
+ }
74
+ }
75
+ handleBackdropClick(e) {
76
+ e.nativeEvent.preventDefault();
77
+ e.nativeEvent.stopPropagation();
78
+ e.component.hide();
79
+ return false;
80
+ }
81
+ async execute(command) {
82
+ const reserved = ['navigate'];
83
+ if (reserved.includes(command.name)) {
84
+ await this.workflow.execute(command.name, { options: command.options });
85
+ return;
86
+ }
87
+ if (this.commandRegistry.exists(command.name)) {
88
+ await this.commandRegistry.execute(command.name, command.options ?? {});
89
+ }
90
+ else {
91
+ await this.page?.execute(command);
92
+ }
93
+ }
94
+ handleOnBackdropClick(event) {
95
+ event.stopPropagation();
96
+ this.startSideDrawer()?.hide();
97
+ }
98
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPageLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
99
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AXPPageLayoutComponent, isStandalone: true, selector: "axp-page-layout", providers: [], viewQueries: [{ propertyName: "startSideDrawer", first: true, predicate: ["startSideDrawer"], descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.AXDrawerContainerDirective }], ngImport: i0, template: "<div\n [mode]=\"layoutService.isSmall() ? 'overlay' : 'push'\"\n transition=\"0.25\"\n axDrawerItem\n [backDrop]=\"true\"\n (onBackdropClick)=\"handleBackdropClick($event)\"\n #startSideDrawer=\"axDrawerItem\"\n [backdropClass]=\"'ax-bg-darkest/75'\"\n [initialState]=\"layoutService.isSmall() ? 'hide' : 'show'\"\n drawerLocation=\"left\"\n class=\"ax-z-50 ax-h-full\"\n>\n <ng-content select=\"axp-layout-start-side\"></ng-content>\n</div>\n<axp-layout-container id=\"axp-page-layout\" #container>\n <axp-layout-header\n *translate=\"let t\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'axp-is-sticky'\"\n [stickyOffset]=\"50\"\n [stickyParent]=\"container.hostElement\"\n >\n @if (page?.hasBackButton() && layoutService.isSmall()) {\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm ax-w-fit ax-ms-1\"\n color=\"secondary\"\n (click)=\"page?.onBackButtonClick()\"\n [text]=\"page?.backButton()?.title\"\n >\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 <!-------- Begin Title Bar -------->\n <axp-layout-title-bar>\n <!-------- Begin Title -------->\n <div class=\"ax-flex ax-flex-col ax-transition\">\n <!-- Breadcrumbs -->\n @if (page?.hasBreadcrumbs() && !layoutService.isSmall()) {\n <ax-breadcrumbs class=\"ax-mb-1\">\n @for (item of page?.breadcrumbs(); track $index) {\n <ax-breadcrumbs-item [active]=\"$last\" (click)=\"execute(item.command!)\">\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-slash-forward\"></i>\n </ng-template>\n </ax-breadcrumbs>\n }\n <div class=\"__title-container\">\n <!-- Title -->\n @if (page?.hasTitle()) {\n <axp-layout-title> {{ t(page?.title()) | async }}</axp-layout-title>\n }\n <!-- Title Actions -->\n @if (page?.hasTitleActions()) {\n <ax-button [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\n [text]=\"(t(sub.title) | async)!\"\n [color]=\"sub.color\"\n [disabled]=\"sub.disabled\"\n (onClick)=\"handleActionClick(sub)\"\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 </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n <!-- Description -->\n @if (page?.hasDescription()) {\n <axp-layout-description> {{ t(page?.description()) | async }}</axp-layout-description>\n }\n </div>\n <!-------- Finish Title -------->\n <!--------------------------------------------------------------->\n <!-------- Page Actions -------->\n\n <axp-layout-actions class=\"ax-shrink-0\">\n <axp-component-slot name=\"page-header-actions\"></axp-component-slot>\n <!--Primary Actions -->\n @if (page?.hasPrimaryActions()) {\n <!-- items -->\n @for (item of page?.primaryMenuItems(); track $index) {\n <ng-container *ngIf=\"item.visible != false\">\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n [iconOnly]=\"layoutService.isSmall()\"\n [disabled]=\"item.disabled\"\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 @if (item?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of item?.items; track $index) {\n <ng-container *ngIf=\"sub.visible != false\">\n <ax-button-item\n [text]=\"(t(sub.title) | async)!\"\n [color]=\"sub.color\"\n [disabled]=\"sub.disabled\"\n (onClick)=\"handleActionClick(sub)\"\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 </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n </ng-container>\n }\n }\n <!-- Secondary Actions -->\n @if (page?.hasSecondaryActions()) {\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n [iconOnly]=\"layoutService.isSmall()\"\n [text]=\"t('actions') | async\"\n [look]=\"layoutService.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 (item of page?.secondaryMenuItems(); track $index) {\n <ng-container *ngIf=\"item.visible != false\">\n <ax-button-item\n [text]=\"(t(item.title) | async)!\"\n [color]=\"item.color\"\n [disabled]=\"item.disabled\"\n (onClick)=\"handleSecondaryActionClick(item)\"\n >\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 </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </axp-layout-actions>\n <!-- Finish Page Actions -->\n </axp-layout-title-bar>\n <!----- Finish Title Bar ----->\n <!--------------------------------------------------------------->\n <!-- Begin Navbar -->\n @if (!sticky.isSticky) {}\n <ng-content select=\"axp-page-toolbar\"></ng-content>\n <!-- Finish Navbar -->\n </axp-layout-header>\n <ng-content select=\"axp-page-content\"></ng-content>\n\n <axp-page-footer-container\n [ngStyle]=\"{ display: tt.isEmpty() && prefixSlot.isEmpty() && suffixSlot.isEmpty() ? 'none' : 'block' }\"\n >\n <axp-layout-container #tt>\n <ng-content select=\"axp-page-footer\"></ng-content>\n </axp-layout-container>\n <axp-page-footer>\n <axp-layout-prefix>\n <axp-component-slot name=\"page-footer-prefix\" #prefixSlot=\"slot\"></axp-component-slot>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <axp-component-slot name=\"page-footer-suffix\" #suffixSlot=\"slot\"></axp-component-slot>\n </axp-layout-suffix>\n </axp-page-footer>\n </axp-page-footer-container>\n</axp-layout-container>\n", styles: ["axp-layout-title{display:block;width:100%;font-weight:600}axp-layout-description{display:block;width:100%;font-size:.875rem;line-height:1.25rem;opacity:.65}axp-layout-actions{display:flex;align-items:center;gap:.75rem}axp-layout-actions axp-layout-actions-primary{display:flex;align-items:center;gap:.75rem}axp-layout-footer,axp-layout-toolbar,axp-layout-header,axp-page-header,axp-page-footer,axp-page-toolbar{display:flex;width:100%;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem}axp-layout-footer>axp-layout-prefix,axp-layout-footer>axp-layout-suffix,axp-layout-toolbar>axp-layout-prefix,axp-layout-toolbar>axp-layout-suffix,axp-layout-header>axp-layout-prefix,axp-layout-header>axp-layout-suffix,axp-page-header>axp-layout-prefix,axp-page-header>axp-layout-suffix,axp-page-footer>axp-layout-prefix,axp-page-footer>axp-layout-suffix,axp-page-toolbar>axp-layout-prefix,axp-page-toolbar>axp-layout-suffix{display:flex;flex-direction:row;align-items:center;gap:.5rem}axp-layout-footer>axp-layout-prefix,axp-layout-toolbar>axp-layout-prefix,axp-layout-header>axp-layout-prefix,axp-page-header>axp-layout-prefix,axp-page-footer>axp-layout-prefix,axp-page-toolbar>axp-layout-prefix{order:-9999}axp-layout-footer>axp-layout-suffix,axp-layout-toolbar>axp-layout-suffix,axp-layout-header>axp-layout-suffix,axp-page-header>axp-layout-suffix,axp-page-footer>axp-layout-suffix,axp-page-toolbar>axp-layout-suffix{order:9999;margin-inline-start:auto}axp-layout-list{display:flex;flex-direction:column}axp-layout-list>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse));border-style:dashed}axp-layout-list:focus{outline:none}axp-layout-list-group{display:flex;flex-direction:column;padding-top:.5rem;padding-bottom:.5rem}axp-layout-list-group>axp-layout-title{padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:600}axp-layout-list-group>axp-layout-header{display:flex;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}axp-layout-list-item{margin-top:.25rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem;font-size:.875rem;line-height:1.25rem}axp-layout-list-item:focus{outline:none}axp-layout-list-item.axp-state-focused,axp-layout-list-item:hover{cursor:pointer;border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-light-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}axp-layout-list-item>axp-layout-prefix{margin-inline-end:auto;display:flex;flex-direction:row;gap:.5rem}axp-layout-list-item>axp-layout-content{flex:1 1 0%}axp-layout-list-item>axp-layout-content axp-layout-description{margin-top:.25rem!important;font-size:.75rem!important;line-height:1rem!important}axp-layout-list-item>axp-layout-suffix{margin-inline-start:auto;display:flex;flex-direction:row;gap:.5rem}axp-layout-sections{display:flex;flex-direction:column;gap:1rem}axp-layout-sections axp-layout-section{display:block;border-radius:.375rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-layout-sections axp-layout-section>axp-layout-footer,axp-layout-sections axp-layout-section>axp-layout-header{padding:.5rem 1rem}@media (min-width: 1280px){axp-layout-sections axp-layout-section>axp-layout-footer,axp-layout-sections axp-layout-section>axp-layout-header{padding-top:1rem;padding-bottom:1rem}}axp-layout-sections axp-layout-section>axp-layout-header{display:flex;flex-direction:column;gap:0px;border-top-left-radius:.375rem;border-top-right-radius:.375rem;border-bottom-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-layout-sections axp-layout-section>axp-layout-header axp-layout-title{font-weight:700;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}axp-layout-sections axp-layout-section>axp-layout-header axp-layout-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem}axp-layout-sections axp-layout-section>axp-layout-footer{display:flex;align-items:center;justify-content:space-between;border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem;border-top-width:1px;padding:1rem;opacity:0;animation:fadeInDown .5s ease-out forwards}axp-layout-sections axp-layout-section>axp-layout-footer>axp-layout-suffix{margin-inline-start:auto;display:flex;gap:.5rem}@keyframes fadeInDown{0%{opacity:0}to{opacity:1}}axp-page-layout{display:flex;width:100%;height:100%;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-page-layout axp-layout-start-side,axp-page-layout axp-layout-end-side{display:flex;min-height:100%;min-width:16rem;flex-direction:column;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-page-layout axp-layout-start-side axp-layout-header,axp-page-layout axp-layout-end-side axp-layout-header{display:flex;flex-direction:column;gap:.5rem;padding:1rem}axp-page-layout axp-layout-start-side axp-layout-header>axp-layout-title,axp-page-layout axp-layout-end-side axp-layout-header>axp-layout-title{font-size:1.125rem;line-height:1.75rem;font-weight:500}axp-page-layout axp-layout-start-side>axp-layout-content,axp-page-layout axp-layout-end-side>axp-layout-content{flex:1 1 0%}axp-page-layout>axp-layout-container{position:relative;display:flex;width:100%;height:100%;flex-direction:column;overflow:auto;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-page-layout>axp-layout-container>axp-layout-header{position:-webkit-sticky;position:sticky;top:0;z-index:10;display:flex;flex-direction:column;align-items:flex-start;gap:0px;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding-top:.5rem;padding-bottom:.5rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media (min-width: 768px){axp-page-layout>axp-layout-container>axp-layout-header{padding-top:1rem;padding-bottom:1rem}}axp-page-layout>axp-layout-container>axp-layout-header.axp-is-sticky{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axp-page-layout>axp-layout-container>axp-layout-header ax-breadcrumbs ax-breadcrumbs-item{font-size:.75rem;line-height:1rem}axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar{display:flex;width:100%;align-items:center;justify-content:space-between;padding-left:1rem;padding-right:1rem}@media (min-width: 1280px){axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar{border-width:0px}}axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar ax-layout-nav-button{display:flex;align-items:center;justify-content:space-between}axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar .__title-container{display:flex;align-items:center;gap:.75rem}axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar .__title-container axp-layout-title{width:fit-content;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.25rem;line-height:1.75rem;font-weight:500;line-height:1.625}@media (min-width: 1024px){axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar .__title-container axp-layout-title{font-size:1.5rem;line-height:2rem}}axp-page-layout>axp-layout-container>axp-layout-header axp-page-toolbar{margin-top:.5rem;padding-left:1rem;padding-right:1rem}axp-page-layout>axp-layout-container>axp-page-content{display:flex;width:100%;flex:1 1 0%;flex-direction:column;padding:.75rem 1rem}axp-page-layout>axp-layout-container>axp-page-content.--scrollable{padding-bottom:1rem}axp-page-layout>axp-layout-container>axp-page-footer-container{border-top-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1))}axp-page-layout>axp-layout-container>axp-page-footer-container:is(.ax-dark *){--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-dark-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-dark-surface),var(--tw-bg-opacity, 1))}axp-page-layout>axp-layout-container>axp-page-footer-container{position:-webkit-sticky;position:sticky;bottom:0;padding:.75rem;--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@keyframes ax-fadeInUp{0%{transform:translate3d(0,100%,0);opacity:0}}axp-page-layout>axp-layout-container>axp-page-footer-container.--animated{animation:1s both ax-fadeInUp;transition-duration:.3s;transition-timing-function:cubic-bezier(0,0,.2,1);animation-duration:.3s;animation-timing-function:cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type:
100
+ //
101
+ AXCommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i4.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i4.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i5.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i6.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i6.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i7.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDrawerDirectiveModule }, { kind: "directive", type: i1.AXDrawerItemDirective, selector: "[axDrawerItem]", inputs: ["drawerLocation", "initialState", "backDrop", "mode", "transition", "closeOnBackdropClick", "backdropClass"], outputs: ["onBackdropClick", "onDrawerClosed"], exportAs: ["axDrawerItem"] }, { kind: "ngmodule", type:
102
+ //
103
+ AXPComponentSlotModule }, { kind: "directive", type: i8.AXPComponentSlotDirective, selector: "axp-component-slot", inputs: ["name"], exportAs: ["slot"] }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutActionsComponent, selector: "axp-layout-actions" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }, { kind: "component", type: AXPThemeLayoutContainerComponent, selector: "axp-layout-container" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
104
+ }
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPageLayoutComponent, decorators: [{
106
+ type: Component,
107
+ args: [{ standalone: true, imports: [
108
+ CommonModule,
109
+ //
110
+ AXCommonModule,
111
+ AXDecoratorModule,
112
+ AXBreadcrumbsModule,
113
+ AXDropdownButtonModule,
114
+ AXDropdownModule,
115
+ AXButtonModule,
116
+ AXTranslationModule,
117
+ AXDrawerModule,
118
+ AXDrawerDirectiveModule,
119
+ //
120
+ AXPComponentSlotModule,
121
+ AXPThemeLayoutBlockComponent,
122
+ AXPThemeLayoutActionsComponent,
123
+ AXPThemeLayoutHeaderComponent,
124
+ AXPStickyDirective,
125
+ AXPThemeLayoutContainerComponent
126
+ ], selector: 'axp-page-layout', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [AXDrawerContainerDirective], providers: [], template: "<div\n [mode]=\"layoutService.isSmall() ? 'overlay' : 'push'\"\n transition=\"0.25\"\n axDrawerItem\n [backDrop]=\"true\"\n (onBackdropClick)=\"handleBackdropClick($event)\"\n #startSideDrawer=\"axDrawerItem\"\n [backdropClass]=\"'ax-bg-darkest/75'\"\n [initialState]=\"layoutService.isSmall() ? 'hide' : 'show'\"\n drawerLocation=\"left\"\n class=\"ax-z-50 ax-h-full\"\n>\n <ng-content select=\"axp-layout-start-side\"></ng-content>\n</div>\n<axp-layout-container id=\"axp-page-layout\" #container>\n <axp-layout-header\n *translate=\"let t\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'axp-is-sticky'\"\n [stickyOffset]=\"50\"\n [stickyParent]=\"container.hostElement\"\n >\n @if (page?.hasBackButton() && layoutService.isSmall()) {\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm ax-w-fit ax-ms-1\"\n color=\"secondary\"\n (click)=\"page?.onBackButtonClick()\"\n [text]=\"page?.backButton()?.title\"\n >\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 <!-------- Begin Title Bar -------->\n <axp-layout-title-bar>\n <!-------- Begin Title -------->\n <div class=\"ax-flex ax-flex-col ax-transition\">\n <!-- Breadcrumbs -->\n @if (page?.hasBreadcrumbs() && !layoutService.isSmall()) {\n <ax-breadcrumbs class=\"ax-mb-1\">\n @for (item of page?.breadcrumbs(); track $index) {\n <ax-breadcrumbs-item [active]=\"$last\" (click)=\"execute(item.command!)\">\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-slash-forward\"></i>\n </ng-template>\n </ax-breadcrumbs>\n }\n <div class=\"__title-container\">\n <!-- Title -->\n @if (page?.hasTitle()) {\n <axp-layout-title> {{ t(page?.title()) | async }}</axp-layout-title>\n }\n <!-- Title Actions -->\n @if (page?.hasTitleActions()) {\n <ax-button [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\n [text]=\"(t(sub.title) | async)!\"\n [color]=\"sub.color\"\n [disabled]=\"sub.disabled\"\n (onClick)=\"handleActionClick(sub)\"\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 </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n <!-- Description -->\n @if (page?.hasDescription()) {\n <axp-layout-description> {{ t(page?.description()) | async }}</axp-layout-description>\n }\n </div>\n <!-------- Finish Title -------->\n <!--------------------------------------------------------------->\n <!-------- Page Actions -------->\n\n <axp-layout-actions class=\"ax-shrink-0\">\n <axp-component-slot name=\"page-header-actions\"></axp-component-slot>\n <!--Primary Actions -->\n @if (page?.hasPrimaryActions()) {\n <!-- items -->\n @for (item of page?.primaryMenuItems(); track $index) {\n <ng-container *ngIf=\"item.visible != false\">\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n [iconOnly]=\"layoutService.isSmall()\"\n [disabled]=\"item.disabled\"\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 @if (item?.items) {\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (sub of item?.items; track $index) {\n <ng-container *ngIf=\"sub.visible != false\">\n <ax-button-item\n [text]=\"(t(sub.title) | async)!\"\n [color]=\"sub.color\"\n [disabled]=\"sub.disabled\"\n (onClick)=\"handleActionClick(sub)\"\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 </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n }\n </ax-button>\n </ng-container>\n }\n }\n <!-- Secondary Actions -->\n @if (page?.hasSecondaryActions()) {\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n [iconOnly]=\"layoutService.isSmall()\"\n [text]=\"t('actions') | async\"\n [look]=\"layoutService.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 (item of page?.secondaryMenuItems(); track $index) {\n <ng-container *ngIf=\"item.visible != false\">\n <ax-button-item\n [text]=\"(t(item.title) | async)!\"\n [color]=\"item.color\"\n [disabled]=\"item.disabled\"\n (onClick)=\"handleSecondaryActionClick(item)\"\n >\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 </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </axp-layout-actions>\n <!-- Finish Page Actions -->\n </axp-layout-title-bar>\n <!----- Finish Title Bar ----->\n <!--------------------------------------------------------------->\n <!-- Begin Navbar -->\n @if (!sticky.isSticky) {}\n <ng-content select=\"axp-page-toolbar\"></ng-content>\n <!-- Finish Navbar -->\n </axp-layout-header>\n <ng-content select=\"axp-page-content\"></ng-content>\n\n <axp-page-footer-container\n [ngStyle]=\"{ display: tt.isEmpty() && prefixSlot.isEmpty() && suffixSlot.isEmpty() ? 'none' : 'block' }\"\n >\n <axp-layout-container #tt>\n <ng-content select=\"axp-page-footer\"></ng-content>\n </axp-layout-container>\n <axp-page-footer>\n <axp-layout-prefix>\n <axp-component-slot name=\"page-footer-prefix\" #prefixSlot=\"slot\"></axp-component-slot>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <axp-component-slot name=\"page-footer-suffix\" #suffixSlot=\"slot\"></axp-component-slot>\n </axp-layout-suffix>\n </axp-page-footer>\n </axp-page-footer-container>\n</axp-layout-container>\n", styles: ["axp-layout-title{display:block;width:100%;font-weight:600}axp-layout-description{display:block;width:100%;font-size:.875rem;line-height:1.25rem;opacity:.65}axp-layout-actions{display:flex;align-items:center;gap:.75rem}axp-layout-actions axp-layout-actions-primary{display:flex;align-items:center;gap:.75rem}axp-layout-footer,axp-layout-toolbar,axp-layout-header,axp-page-header,axp-page-footer,axp-page-toolbar{display:flex;width:100%;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem}axp-layout-footer>axp-layout-prefix,axp-layout-footer>axp-layout-suffix,axp-layout-toolbar>axp-layout-prefix,axp-layout-toolbar>axp-layout-suffix,axp-layout-header>axp-layout-prefix,axp-layout-header>axp-layout-suffix,axp-page-header>axp-layout-prefix,axp-page-header>axp-layout-suffix,axp-page-footer>axp-layout-prefix,axp-page-footer>axp-layout-suffix,axp-page-toolbar>axp-layout-prefix,axp-page-toolbar>axp-layout-suffix{display:flex;flex-direction:row;align-items:center;gap:.5rem}axp-layout-footer>axp-layout-prefix,axp-layout-toolbar>axp-layout-prefix,axp-layout-header>axp-layout-prefix,axp-page-header>axp-layout-prefix,axp-page-footer>axp-layout-prefix,axp-page-toolbar>axp-layout-prefix{order:-9999}axp-layout-footer>axp-layout-suffix,axp-layout-toolbar>axp-layout-suffix,axp-layout-header>axp-layout-suffix,axp-page-header>axp-layout-suffix,axp-page-footer>axp-layout-suffix,axp-page-toolbar>axp-layout-suffix{order:9999;margin-inline-start:auto}axp-layout-list{display:flex;flex-direction:column}axp-layout-list>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse));border-style:dashed}axp-layout-list:focus{outline:none}axp-layout-list-group{display:flex;flex-direction:column;padding-top:.5rem;padding-bottom:.5rem}axp-layout-list-group>axp-layout-title{padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:600}axp-layout-list-group>axp-layout-header{display:flex;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}axp-layout-list-item{margin-top:.25rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem;font-size:.875rem;line-height:1.25rem}axp-layout-list-item:focus{outline:none}axp-layout-list-item.axp-state-focused,axp-layout-list-item:hover{cursor:pointer;border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-light-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}axp-layout-list-item>axp-layout-prefix{margin-inline-end:auto;display:flex;flex-direction:row;gap:.5rem}axp-layout-list-item>axp-layout-content{flex:1 1 0%}axp-layout-list-item>axp-layout-content axp-layout-description{margin-top:.25rem!important;font-size:.75rem!important;line-height:1rem!important}axp-layout-list-item>axp-layout-suffix{margin-inline-start:auto;display:flex;flex-direction:row;gap:.5rem}axp-layout-sections{display:flex;flex-direction:column;gap:1rem}axp-layout-sections axp-layout-section{display:block;border-radius:.375rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-layout-sections axp-layout-section>axp-layout-footer,axp-layout-sections axp-layout-section>axp-layout-header{padding:.5rem 1rem}@media (min-width: 1280px){axp-layout-sections axp-layout-section>axp-layout-footer,axp-layout-sections axp-layout-section>axp-layout-header{padding-top:1rem;padding-bottom:1rem}}axp-layout-sections axp-layout-section>axp-layout-header{display:flex;flex-direction:column;gap:0px;border-top-left-radius:.375rem;border-top-right-radius:.375rem;border-bottom-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-layout-sections axp-layout-section>axp-layout-header axp-layout-title{font-weight:700;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}axp-layout-sections axp-layout-section>axp-layout-header axp-layout-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem}axp-layout-sections axp-layout-section>axp-layout-footer{display:flex;align-items:center;justify-content:space-between;border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem;border-top-width:1px;padding:1rem;opacity:0;animation:fadeInDown .5s ease-out forwards}axp-layout-sections axp-layout-section>axp-layout-footer>axp-layout-suffix{margin-inline-start:auto;display:flex;gap:.5rem}@keyframes fadeInDown{0%{opacity:0}to{opacity:1}}axp-page-layout{display:flex;width:100%;height:100%;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-page-layout axp-layout-start-side,axp-page-layout axp-layout-end-side{display:flex;min-height:100%;min-width:16rem;flex-direction:column;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-page-layout axp-layout-start-side axp-layout-header,axp-page-layout axp-layout-end-side axp-layout-header{display:flex;flex-direction:column;gap:.5rem;padding:1rem}axp-page-layout axp-layout-start-side axp-layout-header>axp-layout-title,axp-page-layout axp-layout-end-side axp-layout-header>axp-layout-title{font-size:1.125rem;line-height:1.75rem;font-weight:500}axp-page-layout axp-layout-start-side>axp-layout-content,axp-page-layout axp-layout-end-side>axp-layout-content{flex:1 1 0%}axp-page-layout>axp-layout-container{position:relative;display:flex;width:100%;height:100%;flex-direction:column;overflow:auto;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-page-layout>axp-layout-container>axp-layout-header{position:-webkit-sticky;position:sticky;top:0;z-index:10;display:flex;flex-direction:column;align-items:flex-start;gap:0px;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding-top:.5rem;padding-bottom:.5rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media (min-width: 768px){axp-page-layout>axp-layout-container>axp-layout-header{padding-top:1rem;padding-bottom:1rem}}axp-page-layout>axp-layout-container>axp-layout-header.axp-is-sticky{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axp-page-layout>axp-layout-container>axp-layout-header ax-breadcrumbs ax-breadcrumbs-item{font-size:.75rem;line-height:1rem}axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar{display:flex;width:100%;align-items:center;justify-content:space-between;padding-left:1rem;padding-right:1rem}@media (min-width: 1280px){axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar{border-width:0px}}axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar ax-layout-nav-button{display:flex;align-items:center;justify-content:space-between}axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar .__title-container{display:flex;align-items:center;gap:.75rem}axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar .__title-container axp-layout-title{width:fit-content;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.25rem;line-height:1.75rem;font-weight:500;line-height:1.625}@media (min-width: 1024px){axp-page-layout>axp-layout-container>axp-layout-header axp-layout-title-bar .__title-container axp-layout-title{font-size:1.5rem;line-height:2rem}}axp-page-layout>axp-layout-container>axp-layout-header axp-page-toolbar{margin-top:.5rem;padding-left:1rem;padding-right:1rem}axp-page-layout>axp-layout-container>axp-page-content{display:flex;width:100%;flex:1 1 0%;flex-direction:column;padding:.75rem 1rem}axp-page-layout>axp-layout-container>axp-page-content.--scrollable{padding-bottom:1rem}axp-page-layout>axp-layout-container>axp-page-footer-container{border-top-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1))}axp-page-layout>axp-layout-container>axp-page-footer-container:is(.ax-dark *){--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-dark-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-dark-surface),var(--tw-bg-opacity, 1))}axp-page-layout>axp-layout-container>axp-page-footer-container{position:-webkit-sticky;position:sticky;bottom:0;padding:.75rem;--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@keyframes ax-fadeInUp{0%{transform:translate3d(0,100%,0);opacity:0}}axp-page-layout>axp-layout-container>axp-page-footer-container.--animated{animation:1s both ax-fadeInUp;transition-duration:.3s;transition-timing-function:cubic-bezier(0,0,.2,1);animation-duration:.3s;animation-timing-function:cubic-bezier(0,0,.2,1)}\n"] }]
127
+ }] });
128
+
129
+ class AXPPageLayoutBaseComponent {
130
+ constructor() {
131
+ //#region ---------------- Services ----------------
132
+ this.layoutService = inject(AXPLayoutThemeService);
133
+ this.sessionService = inject(AXPSessionService);
134
+ this.translateService = inject(AXTranslationService);
135
+ this.formatService = inject(AXFormatService);
136
+ this.toastService = inject(AXToastService);
137
+ this.homePageService = inject(AXPHomePageService);
138
+ this.policyService = inject(AXPPolicyEngineService);
139
+ //#endregion
140
+ //#region ---------------- Signal to force recomputation ----------------
141
+ this._updateTrigger = signal(0);
142
+ this.updateTrigger = this._updateTrigger.asReadonly();
143
+ //#endregion
144
+ //#region ---------------- Title ----------------
145
+ this.title = signal('');
146
+ this.#titleEffect = effect(async () => {
147
+ this.updateTrigger();
148
+ this.title.set(await this.getPageTitle());
149
+ });
150
+ this.hasTitle = computed(() => this.title() !== '');
151
+ //#endregion
152
+ //#region ---------------- Description ----------------
153
+ this.description = signal(null);
154
+ this.hasDescription = computed(() => !isNil(this.description()) && !isEmpty(this.description()));
155
+ this.#descriptionEffect = effect(async () => {
156
+ this.updateTrigger();
157
+ this.description.set(await this.getPageDescription());
158
+ });
159
+ //#endregion
160
+ //#region ---------------- Breadcrumbs ----------------
161
+ this.defaultBreadCrumbs = [
162
+ {
163
+ title: 't("home")',
164
+ icon: 'fa-solid fa-home ax-text-xs ax-me-1',
165
+ command: {
166
+ name: 'navigate',
167
+ options: {
168
+ path: this.homePageService.getCurrent().path,
169
+ },
170
+ },
171
+ },
172
+ ];
173
+ this.breadcrumbs = signal(this.defaultBreadCrumbs);
174
+ this.#breadcrumbsEffect = effect(async () => {
175
+ this.updateTrigger();
176
+ const breadCrumbs = await this.getPageBreadcrumbs();
177
+ this.breadcrumbs.set([...this.defaultBreadCrumbs, ...breadCrumbs]);
178
+ });
179
+ this.hasBreadcrumbs = computed(() => this.breadcrumbs().length > 1);
180
+ //#endregion
181
+ //#region ---------------- Layout ----------------
182
+ this.layout = viewChild(AXPPageLayoutComponent);
183
+ //#endregion
184
+ //#region ---------------- Actions ----------------
185
+ this.primaryMenuItems = signal([]);
186
+ this.hasPrimaryActions = computed(() => this.primaryMenuItems().filter(item => item.visible != false).length > 0);
187
+ this.#primaryMenuItemsEffect = effect(async () => {
188
+ this.updateTrigger();
189
+ const items = await this.getPrimaryMenuItems();
190
+ // await Promise.all(items
191
+ // .filter(item => item.policy)
192
+ // .map(async (item) => {
193
+ // await this.optionsService.apply({
194
+ // id: item.name ?? '',
195
+ // sender: item,
196
+ // policies: item.policy ? [item.policy] : undefined
197
+ // });
198
+ // }));
199
+ // await this.optionsService.apply({
200
+ // id: 'page-primary-actions',
201
+ // sender: items,
202
+ // });
203
+ this.primaryMenuItems.set(items);
204
+ });
205
+ this.secondaryMenuItems = signal([]);
206
+ this.hasSecondaryActions = computed(() => this.secondaryMenuItems().filter(item => item.visible != false).length > 0);
207
+ this.#secondaryMenuItemsEffect = effect(async () => {
208
+ this.updateTrigger();
209
+ const items = await this.getSecondaryMenuItems();
210
+ this.secondaryMenuItems.set(items);
211
+ });
212
+ this.hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());
213
+ this.titleActions = signal([]);
214
+ this.hasTitleActions = computed(() => this.titleActions().length > 0);
215
+ this.#titleActionsEffect = effect(async () => {
216
+ this.updateTrigger();
217
+ this.titleActions.set(await this.getTitleActions());
218
+ });
219
+ this.backButton = signal(null);
220
+ this.hasBackButton = computed(() => this.backButton() !== null);
221
+ this.#backButtonEffect = effect(async () => {
222
+ this.updateTrigger();
223
+ this.backButton.set(await this.getBackButton());
224
+ });
225
+ }
226
+ recompute() {
227
+ this._updateTrigger.set(this._updateTrigger() + 1);
228
+ }
229
+ //#endregion
230
+ //#region ---------------- Lifecycle hooks ----------------
231
+ async ngOnInit() {
232
+ this.translateService.langChanges$.subscribe(() => {
233
+ this.recompute();
234
+ });
235
+ }
236
+ #titleEffect;
237
+ getPageTitle() {
238
+ return '';
239
+ }
240
+ #descriptionEffect;
241
+ getPageDescription() {
242
+ return null;
243
+ }
244
+ #breadcrumbsEffect;
245
+ getPageBreadcrumbs() {
246
+ return [];
247
+ }
248
+ //TODO: Remove this after migration to the new layout
249
+ toggleEndSide() {
250
+ //this.layout()?.toggleStartSide()
251
+ }
252
+ //TODO: Remove this after migration to the new layout
253
+ toggleStartSide() {
254
+ this.layout()?.toggleStartSide();
255
+ }
256
+ #primaryMenuItemsEffect;
257
+ getPrimaryMenuItems() {
258
+ return [];
259
+ }
260
+ #secondaryMenuItemsEffect;
261
+ getSecondaryMenuItems() {
262
+ return [];
263
+ }
264
+ #titleActionsEffect;
265
+ getTitleActions() {
266
+ return [];
267
+ }
268
+ getBackButton() {
269
+ return null;
270
+ }
271
+ #backButtonEffect;
272
+ //#endregion
273
+ //#region ---------------- Handle Commands ----------------
274
+ execute(command) { }
275
+ startSideToggle() {
276
+ this.layout();
277
+ }
278
+ onBackButtonClick() { }
279
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPageLayoutBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
280
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.10", type: AXPPageLayoutBaseComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "layout", first: true, predicate: AXPPageLayoutComponent, descendants: true, isSignal: true }], ngImport: i0, template: '', isInline: true }); }
281
+ }
282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPageLayoutBaseComponent, decorators: [{
283
+ type: Component,
284
+ args: [{
285
+ standalone: true,
286
+ template: '',
287
+ }]
288
+ }] });
289
+
290
+ class AXPPopupLayoutBase {
291
+ }
292
+
293
+ class AXPPopupLayoutComponent {
294
+ constructor() {
295
+ this.popup = inject(AXPPopupLayoutBase);
296
+ this.layoutService = inject(AXPLayoutThemeService);
297
+ this.workflow = inject(AXPWorkflowService);
298
+ this.#initialize = afterNextRender(async () => {
299
+ this.checkScrollableContent();
300
+ });
301
+ this.#effect = effect(() => {
302
+ this.popup?.title();
303
+ this.checkScrollableContent();
304
+ });
305
+ }
306
+ #initialize;
307
+ #effect;
308
+ checkScrollableContent() {
309
+ const content = document.querySelector('axp-popup-content');
310
+ if (content && content.scrollHeight >= content.clientHeight) {
311
+ content.classList.add('--scrollable');
312
+ }
313
+ }
314
+ handleActionClick(item) {
315
+ if (item.command && (item.items?.length ?? 0) == 0) {
316
+ this.popup?.execute(item.command);
317
+ }
318
+ }
319
+ handleSecondaryActionClick(item) {
320
+ if (item.command) {
321
+ this.popup?.execute(item.command);
322
+ }
323
+ }
324
+ handleBackdropClick(e) {
325
+ e.nativeEvent.preventDefault();
326
+ e.nativeEvent.stopPropagation();
327
+ e.component.hide();
328
+ return false;
329
+ }
330
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPopupLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
331
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AXPPopupLayoutComponent, isStandalone: true, selector: "axp-popup-layout", ngImport: i0, template: "<axp-layout-container id=\"axp-popup-layout\" #container>\n <ng-content select=\"axp-page-content\"></ng-content>\n <axp-page-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 [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", styles: ["axp-layout-title{display:block;width:100%;font-weight:600}axp-layout-description{display:block;width:100%;font-size:.875rem;line-height:1.25rem;opacity:.65}axp-layout-actions{display:flex;align-items:center;gap:.75rem}axp-layout-actions axp-layout-actions-primary{display:flex;align-items:center;gap:.75rem}axp-layout-footer,axp-layout-toolbar,axp-layout-header,axp-page-header,axp-page-footer,axp-page-toolbar{display:flex;width:100%;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem}axp-layout-footer>axp-layout-prefix,axp-layout-footer>axp-layout-suffix,axp-layout-toolbar>axp-layout-prefix,axp-layout-toolbar>axp-layout-suffix,axp-layout-header>axp-layout-prefix,axp-layout-header>axp-layout-suffix,axp-page-header>axp-layout-prefix,axp-page-header>axp-layout-suffix,axp-page-footer>axp-layout-prefix,axp-page-footer>axp-layout-suffix,axp-page-toolbar>axp-layout-prefix,axp-page-toolbar>axp-layout-suffix{display:flex;flex-direction:row;align-items:center;gap:.5rem}axp-layout-footer>axp-layout-prefix,axp-layout-toolbar>axp-layout-prefix,axp-layout-header>axp-layout-prefix,axp-page-header>axp-layout-prefix,axp-page-footer>axp-layout-prefix,axp-page-toolbar>axp-layout-prefix{order:-9999}axp-layout-footer>axp-layout-suffix,axp-layout-toolbar>axp-layout-suffix,axp-layout-header>axp-layout-suffix,axp-page-header>axp-layout-suffix,axp-page-footer>axp-layout-suffix,axp-page-toolbar>axp-layout-suffix{order:9999;margin-inline-start:auto}axp-layout-list{display:flex;flex-direction:column}axp-layout-list>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse));border-style:dashed}axp-layout-list:focus{outline:none}axp-layout-list-group{display:flex;flex-direction:column;padding-top:.5rem;padding-bottom:.5rem}axp-layout-list-group>axp-layout-title{padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:600}axp-layout-list-group>axp-layout-header{display:flex;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}axp-layout-list-item{margin-top:.25rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem;font-size:.875rem;line-height:1.25rem}axp-layout-list-item:focus{outline:none}axp-layout-list-item.axp-state-focused,axp-layout-list-item:hover{cursor:pointer;border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-light-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}axp-layout-list-item>axp-layout-prefix{margin-inline-end:auto;display:flex;flex-direction:row;gap:.5rem}axp-layout-list-item>axp-layout-content{flex:1 1 0%}axp-layout-list-item>axp-layout-content axp-layout-description{margin-top:.25rem!important;font-size:.75rem!important;line-height:1rem!important}axp-layout-list-item>axp-layout-suffix{margin-inline-start:auto;display:flex;flex-direction:row;gap:.5rem}axp-layout-sections{display:flex;flex-direction:column;gap:1rem}axp-layout-sections axp-layout-section{display:block;border-radius:.375rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-layout-sections axp-layout-section>axp-layout-footer,axp-layout-sections axp-layout-section>axp-layout-header{padding:.5rem 1rem}@media (min-width: 1280px){axp-layout-sections axp-layout-section>axp-layout-footer,axp-layout-sections axp-layout-section>axp-layout-header{padding-top:1rem;padding-bottom:1rem}}axp-layout-sections axp-layout-section>axp-layout-header{display:flex;flex-direction:column;gap:0px;border-top-left-radius:.375rem;border-top-right-radius:.375rem;border-bottom-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-layout-sections axp-layout-section>axp-layout-header axp-layout-title{font-weight:700;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}axp-layout-sections axp-layout-section>axp-layout-header axp-layout-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem}axp-layout-sections axp-layout-section>axp-layout-footer{display:flex;align-items:center;justify-content:space-between;border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem;border-top-width:1px;padding:1rem;opacity:0;animation:fadeInDown .5s ease-out forwards}axp-layout-sections axp-layout-section>axp-layout-footer>axp-layout-suffix{margin-inline-start:auto;display:flex;gap:.5rem}@keyframes fadeInDown{0%{opacity:0}to{opacity:1}}axp-popup-layout{display:flex;width:100%;height:100%;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-popup-layout>axp-layout-container{position:relative;display:flex;width:100%;height:100%;flex-direction:column;overflow:auto;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-popup-layout>axp-layout-container>axp-layout-header{position:-webkit-sticky;position:sticky;top:0;z-index:10;display:flex;flex-direction:column;align-items:flex-start;gap:0px;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding-top:.5rem;padding-bottom:.5rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media (min-width: 768px){axp-popup-layout>axp-layout-container>axp-layout-header{padding-top:1rem;padding-bottom:1rem}}axp-popup-layout>axp-layout-container>axp-page-content{display:flex;width:100%;flex:1 1 0%;flex-direction:column}axp-popup-layout>axp-layout-container>axp-page-footer{border-top-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1))}axp-popup-layout>axp-layout-container>axp-page-footer:is(.ax-dark *){--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-dark-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-dark-surface),var(--tw-bg-opacity, 1))}axp-popup-layout>axp-layout-container>axp-page-footer{position:-webkit-sticky;position:sticky;bottom:0;padding:.75rem;--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@keyframes ax-fadeInUp{0%{transform:translate3d(0,100%,0);opacity:0}}axp-popup-layout>axp-layout-container>axp-page-footer.--animated{animation:1s both ax-fadeInUp;transition-duration:.3s;transition-timing-function:cubic-bezier(0,0,.2,1);animation-duration:.3s;animation-timing-function:cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type:
332
+ //
333
+ AXCommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i7.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDrawerDirectiveModule }, { kind: "component", type:
334
+ //
335
+ AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutContainerComponent, selector: "axp-layout-container" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
336
+ }
337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPopupLayoutComponent, decorators: [{
338
+ type: Component,
339
+ args: [{ standalone: true, imports: [
340
+ CommonModule,
341
+ //
342
+ AXCommonModule,
343
+ AXDecoratorModule,
344
+ AXBreadcrumbsModule,
345
+ AXDropdownButtonModule,
346
+ AXDropdownModule,
347
+ AXButtonModule,
348
+ AXTranslationModule,
349
+ AXDrawerModule,
350
+ AXDrawerDirectiveModule,
351
+ //
352
+ AXPThemeLayoutBlockComponent,
353
+ AXPThemeLayoutContainerComponent,
354
+ ], selector: 'axp-popup-layout', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<axp-layout-container id=\"axp-popup-layout\" #container>\n <ng-content select=\"axp-page-content\"></ng-content>\n <axp-page-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 [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", styles: ["axp-layout-title{display:block;width:100%;font-weight:600}axp-layout-description{display:block;width:100%;font-size:.875rem;line-height:1.25rem;opacity:.65}axp-layout-actions{display:flex;align-items:center;gap:.75rem}axp-layout-actions axp-layout-actions-primary{display:flex;align-items:center;gap:.75rem}axp-layout-footer,axp-layout-toolbar,axp-layout-header,axp-page-header,axp-page-footer,axp-page-toolbar{display:flex;width:100%;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem}axp-layout-footer>axp-layout-prefix,axp-layout-footer>axp-layout-suffix,axp-layout-toolbar>axp-layout-prefix,axp-layout-toolbar>axp-layout-suffix,axp-layout-header>axp-layout-prefix,axp-layout-header>axp-layout-suffix,axp-page-header>axp-layout-prefix,axp-page-header>axp-layout-suffix,axp-page-footer>axp-layout-prefix,axp-page-footer>axp-layout-suffix,axp-page-toolbar>axp-layout-prefix,axp-page-toolbar>axp-layout-suffix{display:flex;flex-direction:row;align-items:center;gap:.5rem}axp-layout-footer>axp-layout-prefix,axp-layout-toolbar>axp-layout-prefix,axp-layout-header>axp-layout-prefix,axp-page-header>axp-layout-prefix,axp-page-footer>axp-layout-prefix,axp-page-toolbar>axp-layout-prefix{order:-9999}axp-layout-footer>axp-layout-suffix,axp-layout-toolbar>axp-layout-suffix,axp-layout-header>axp-layout-suffix,axp-page-header>axp-layout-suffix,axp-page-footer>axp-layout-suffix,axp-page-toolbar>axp-layout-suffix{order:9999;margin-inline-start:auto}axp-layout-list{display:flex;flex-direction:column}axp-layout-list>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse));border-style:dashed}axp-layout-list:focus{outline:none}axp-layout-list-group{display:flex;flex-direction:column;padding-top:.5rem;padding-bottom:.5rem}axp-layout-list-group>axp-layout-title{padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:600}axp-layout-list-group>axp-layout-header{display:flex;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}axp-layout-list-item{margin-top:.25rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem;font-size:.875rem;line-height:1.25rem}axp-layout-list-item:focus{outline:none}axp-layout-list-item.axp-state-focused,axp-layout-list-item:hover{cursor:pointer;border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-light-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}axp-layout-list-item>axp-layout-prefix{margin-inline-end:auto;display:flex;flex-direction:row;gap:.5rem}axp-layout-list-item>axp-layout-content{flex:1 1 0%}axp-layout-list-item>axp-layout-content axp-layout-description{margin-top:.25rem!important;font-size:.75rem!important;line-height:1rem!important}axp-layout-list-item>axp-layout-suffix{margin-inline-start:auto;display:flex;flex-direction:row;gap:.5rem}axp-layout-sections{display:flex;flex-direction:column;gap:1rem}axp-layout-sections axp-layout-section{display:block;border-radius:.375rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-layout-sections axp-layout-section>axp-layout-footer,axp-layout-sections axp-layout-section>axp-layout-header{padding:.5rem 1rem}@media (min-width: 1280px){axp-layout-sections axp-layout-section>axp-layout-footer,axp-layout-sections axp-layout-section>axp-layout-header{padding-top:1rem;padding-bottom:1rem}}axp-layout-sections axp-layout-section>axp-layout-header{display:flex;flex-direction:column;gap:0px;border-top-left-radius:.375rem;border-top-right-radius:.375rem;border-bottom-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-layout-sections axp-layout-section>axp-layout-header axp-layout-title{font-weight:700;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1))}axp-layout-sections axp-layout-section>axp-layout-header axp-layout-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem}axp-layout-sections axp-layout-section>axp-layout-footer{display:flex;align-items:center;justify-content:space-between;border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem;border-top-width:1px;padding:1rem;opacity:0;animation:fadeInDown .5s ease-out forwards}axp-layout-sections axp-layout-section>axp-layout-footer>axp-layout-suffix{margin-inline-start:auto;display:flex;gap:.5rem}@keyframes fadeInDown{0%{opacity:0}to{opacity:1}}axp-popup-layout{display:flex;width:100%;height:100%;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-popup-layout>axp-layout-container{position:relative;display:flex;width:100%;height:100%;flex-direction:column;overflow:auto;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-popup-layout>axp-layout-container>axp-layout-header{position:-webkit-sticky;position:sticky;top:0;z-index:10;display:flex;flex-direction:column;align-items:flex-start;gap:0px;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding-top:.5rem;padding-bottom:.5rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@media (min-width: 768px){axp-popup-layout>axp-layout-container>axp-layout-header{padding-top:1rem;padding-bottom:1rem}}axp-popup-layout>axp-layout-container>axp-page-content{display:flex;width:100%;flex:1 1 0%;flex-direction:column}axp-popup-layout>axp-layout-container>axp-page-footer{border-top-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1))}axp-popup-layout>axp-layout-container>axp-page-footer:is(.ax-dark *){--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-dark-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-dark-surface),var(--tw-bg-opacity, 1))}axp-popup-layout>axp-layout-container>axp-page-footer{position:-webkit-sticky;position:sticky;bottom:0;padding:.75rem;--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@keyframes ax-fadeInUp{0%{transform:translate3d(0,100%,0);opacity:0}}axp-popup-layout>axp-layout-container>axp-page-footer.--animated{animation:1s both ax-fadeInUp;transition-duration:.3s;transition-timing-function:cubic-bezier(0,0,.2,1);animation-duration:.3s;animation-timing-function:cubic-bezier(0,0,.2,1)}\n"] }]
355
+ }] });
356
+
357
+ class AXPPopupLayoutBaseComponent extends AXBasePageComponent {
358
+ constructor() {
359
+ super(...arguments);
360
+ //#region ---------------- Services ----------------
361
+ this.layoutService = inject(AXPLayoutThemeService);
362
+ this.sessionService = inject(AXPSessionService);
363
+ this.translateService = inject(AXTranslationService);
364
+ this.formatService = inject(AXFormatService);
365
+ this.toastService = inject(AXToastService);
366
+ this.homePageService = inject(AXPHomePageService);
367
+ //#endregion
368
+ //#region ---------------- Signal to force recomputation ----------------
369
+ this._updateTrigger = signal(0);
370
+ this.updateTrigger = this._updateTrigger.asReadonly();
371
+ //#endregion
372
+ //#region ---------------- Title ----------------
373
+ this.title = signal('');
374
+ this.#titleEffect = effect(async () => {
375
+ this.updateTrigger();
376
+ this.title.set(await this.getPopupTitle());
377
+ });
378
+ this.hasTitle = computed(() => this.title() !== '');
379
+ //#endregion
380
+ //#region ---------------- Layout ----------------
381
+ // Placeholder for popup layout reference if needed
382
+ this.layout = viewChild(AXPPopupLayoutComponent);
383
+ //#endregion
384
+ //#region ---------------- Actions ----------------
385
+ this.primaryMenuItems = signal([]);
386
+ this.hasPrimaryActions = computed(() => this.primaryMenuItems().length > 0);
387
+ this.#primaryMenuItemsEffect = effect(async () => {
388
+ this.updateTrigger();
389
+ this.primaryMenuItems.set(await this.getPrimaryMenuItems());
390
+ });
391
+ this.secondaryMenuItems = signal([]);
392
+ this.hasSecondaryActions = computed(() => this.secondaryMenuItems().length > 0);
393
+ this.#secondaryMenuItemsEffect = effect(async () => {
394
+ this.updateTrigger();
395
+ this.secondaryMenuItems.set(await this.getSecondaryMenuItems());
396
+ });
397
+ this.hasActions = computed(() => this.hasPrimaryActions() || this.hasSecondaryActions());
398
+ this.titleActions = signal([]);
399
+ this.hasTitleActions = computed(() => this.titleActions().length > 0);
400
+ this.#titleActionsEffect = effect(async () => {
401
+ this.updateTrigger();
402
+ this.titleActions.set(await this.getTitleActions());
403
+ });
404
+ }
405
+ recompute() {
406
+ this._updateTrigger.set(this._updateTrigger() + 1);
407
+ }
408
+ //#endregion
409
+ //#region ---------------- Lifecycle hooks ----------------
410
+ async ngOnInit() {
411
+ super.ngOnInit();
412
+ this.translateService.langChanges$.subscribe(() => {
413
+ this.recompute();
414
+ });
415
+ }
416
+ #titleEffect;
417
+ getPopupTitle() {
418
+ return '';
419
+ }
420
+ #primaryMenuItemsEffect;
421
+ getPrimaryMenuItems() {
422
+ return [];
423
+ }
424
+ #secondaryMenuItemsEffect;
425
+ getSecondaryMenuItems() {
426
+ return [];
427
+ }
428
+ #titleActionsEffect;
429
+ getTitleActions() {
430
+ return [];
431
+ }
432
+ //#endregion
433
+ //#region ---------------- Handle Commands ----------------
434
+ execute(command) { }
435
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPopupLayoutBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.10", type: AXPPopupLayoutBaseComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "layout", first: true, predicate: AXPPopupLayoutComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
437
+ }
438
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AXPPopupLayoutBaseComponent, decorators: [{
439
+ type: Component,
440
+ args: [{
441
+ standalone: true,
442
+ template: '',
443
+ }]
444
+ }] });
6
445
 
7
446
  const blockContent1 = [
8
447
  {
@@ -283,5 +722,5 @@ const AXPLayoutDetailsViewViewModel = signalStore(withState(() => {
283
722
  * Generated bundle index. Do not edit.
284
723
  */
285
724
 
286
- export { AXPLayoutDetailsViewRouteResolver, AXPLayoutDetailsViewViewModel };
725
+ export { AXPLayoutDetailsViewRouteResolver, AXPLayoutDetailsViewViewModel, AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPopupLayoutBase, AXPPopupLayoutBaseComponent, AXPPopupLayoutComponent };
287
726
  //# sourceMappingURL=acorex-platform-layout-views.mjs.map