@acorex-platform/framework-client 0.0.28 → 0.0.32
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.
- package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs → acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs} +23 -2
- package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-common.mjs +678 -112
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-core.mjs +85 -9
- package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +3 -6
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs +469 -73
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Bu8LLCVa.mjs} +3324 -2169
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Bu8LLCVa.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-EU1dgVH_.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-EU1dgVH_.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-DNBhGkO8.mjs} +43 -15
- package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-DNBhGkO8.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-B3__csKW.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs.map → acorex-platform-framework-client-layout-entity-file-list-popup.component-B3__csKW.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-DtNSVjeF.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-DtNSVjeF.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs +37 -6
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +148 -130
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-D3pnOGmB.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-D3pnOGmB.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1127 -717
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-realtime.mjs +70 -5
- package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-runtime.mjs +121 -6
- package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-DCpl6AXq.mjs} +51 -12
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-DCpl6AXq.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs +770 -679
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-shared-settings.provider-D2XPkc71.mjs → acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs} +76 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +320 -32
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
- package/package.json +7 -7
- package/types/acorex-platform-framework-client-common.d.ts +137 -9
- package/types/acorex-platform-framework-client-core.d.ts +4 -1
- package/types/acorex-platform-framework-client-layout-components.d.ts +139 -20
- package/types/acorex-platform-framework-client-layout-entity.d.ts +518 -256
- package/types/acorex-platform-framework-client-layout-views.d.ts +48 -0
- package/types/acorex-platform-framework-client-layout-widget-core.d.ts +2 -2
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +130 -80
- package/types/acorex-platform-framework-client-realtime.d.ts +39 -2
- package/types/acorex-platform-framework-client-runtime.d.ts +56 -5
- package/types/acorex-platform-framework-client-themes-default.d.ts +144 -14
- package/types/acorex-platform-framework-client-themes-shared.d.ts +36 -3
- package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-D2XPkc71.mjs.map +0 -1
|
@@ -1,51 +1,53 @@
|
|
|
1
|
-
import * as i1 from '@acorex/components/action-sheet';
|
|
1
|
+
import * as i1$1 from '@acorex/components/action-sheet';
|
|
2
2
|
import { AXActionSheetModule } from '@acorex/components/action-sheet';
|
|
3
|
-
import * as
|
|
3
|
+
import * as i4 from '@acorex/components/badge';
|
|
4
4
|
import { AXBadgeModule } from '@acorex/components/badge';
|
|
5
5
|
import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
|
|
6
|
-
import * as i3 from '@acorex/components/button';
|
|
6
|
+
import * as i3$1 from '@acorex/components/button';
|
|
7
7
|
import { AXButtonModule } from '@acorex/components/button';
|
|
8
|
-
import * as
|
|
9
|
-
import { AXDataTableModule } from '@acorex/components/data-table';
|
|
8
|
+
import * as i8 from '@acorex/components/data-table';
|
|
9
|
+
import { AXDataTableModule, AX_DATA_TABLE_ROW_COLOR_TYPES } from '@acorex/components/data-table';
|
|
10
10
|
import * as i2$1 from '@acorex/components/decorators';
|
|
11
11
|
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
12
12
|
import { AXDialogModule } from '@acorex/components/dialog';
|
|
13
|
-
import * as i3$
|
|
13
|
+
import * as i3$2 from '@acorex/components/drawer';
|
|
14
14
|
import { AXDrawerModule } from '@acorex/components/drawer';
|
|
15
15
|
import * as i5 from '@acorex/components/dropdown';
|
|
16
16
|
import { AXDropdownModule } from '@acorex/components/dropdown';
|
|
17
17
|
import { AXFormModule } from '@acorex/components/form';
|
|
18
18
|
import { AXLoadingModule } from '@acorex/components/loading';
|
|
19
|
-
import * as
|
|
19
|
+
import * as i6 from '@acorex/components/popover';
|
|
20
20
|
import { AXPopoverModule } from '@acorex/components/popover';
|
|
21
|
-
import * as
|
|
21
|
+
import * as i7 from '@acorex/components/search-box';
|
|
22
22
|
import { AXSearchBoxModule } from '@acorex/components/search-box';
|
|
23
23
|
import { AXTabsModule } from '@acorex/components/tabs';
|
|
24
24
|
import * as i2$3 from '@acorex/components/tooltip';
|
|
25
25
|
import { AXTooltipModule } from '@acorex/components/tooltip';
|
|
26
|
-
import * as i3
|
|
26
|
+
import * as i3 from '@acorex/core/translation';
|
|
27
27
|
import { AXTranslationModule, AXTranslationService, translateSync } from '@acorex/core/translation';
|
|
28
28
|
import * as i2 from '@acorex/core/utils';
|
|
29
29
|
import { AXUnsubscriber } from '@acorex/core/utils';
|
|
30
30
|
import { AXPAuthModule, AXPSessionService, AXPSessionStatus } from '@acorex-platform/framework-client/auth';
|
|
31
|
-
import * as i1$
|
|
32
|
-
import { AXPEntityBroadcastService, AXPDeviceService, AXHighlightService,
|
|
33
|
-
import { AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY, AXPEntityDefinitionRegistryService, AXPCategoryTreeService, traceEntityMasterList, buildDataSourceTraceSnapshot, AXPEntityListViewColumnViewModel,
|
|
31
|
+
import * as i1$3 from '@acorex-platform/framework-client/core';
|
|
32
|
+
import { AXPEntityBroadcastService, AXPDeviceService, AXHighlightService, AXPComponentSlotModule, AXPKeyboardShortcutRegistry, AXPLogoComponent, AXPBroadcastEventService, AXPContextStore } from '@acorex-platform/framework-client/core';
|
|
33
|
+
import { getDataSourcePageIndex, applyDataSourcePagingWithoutLoad, AXPEntityCardComponent, AXPEntityCardSkeletonComponent, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY, AXPEntityDefinitionRegistryService, AXPCategoryTreeService, traceEntityMasterList, buildDataSourceTraceSnapshot, AXPEntityListViewColumnViewModel, restoreEntityListExpandedRows, AXP_ENTITY_CONFIG_TOKEN } from '@acorex-platform/framework-client/layout/entity';
|
|
34
|
+
import { mergeInfiniteScrollPage, AXPInfiniteScrollDirective, AXPStateMessageComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutToolbarComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPQueryColumnsComponent, AXPThemeLayoutStartSideComponent, AXPTaskBadgeService, AXPMenuBadgeHelper, AXPTaskBadgeDirective, provideFileChooserHooks } from '@acorex-platform/framework-client/layout/components';
|
|
35
|
+
import { resolveEntityCardAvatarPath } from '@acorex-platform/framework-shared/entity';
|
|
36
|
+
import * as i1 from '@angular/common';
|
|
37
|
+
import { CommonModule, AsyncPipe } from '@angular/common';
|
|
38
|
+
import * as i0 from '@angular/core';
|
|
39
|
+
import { input, signal, computed, viewChild, effect, untracked, afterRenderEffect, ChangeDetectionStrategy, Component, inject, ViewChild, Input, ViewEncapsulation, afterNextRender, Injector, output, ElementRef, DestroyRef, NgModule } from '@angular/core';
|
|
40
|
+
import { get, isEqual, sortBy } from 'lodash-es';
|
|
34
41
|
import * as i7$1 from '@acorex-platform/framework-client/layout/widget-core';
|
|
35
|
-
import { AXPWidgetCoreModule
|
|
42
|
+
import { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';
|
|
36
43
|
import { AXPWidgetsModule } from '@acorex-platform/framework-client/layout/widgets';
|
|
37
44
|
import { AXPLayoutThemeService, AXPThemeLayoutSetting, AXPMenuVerticalMode, AXPThemesSharedModule } from '@acorex-platform/framework-client/themes/shared';
|
|
38
|
-
import * as i1$1 from '@angular/common';
|
|
39
|
-
import { CommonModule, AsyncPipe } from '@angular/common';
|
|
40
|
-
import * as i0 from '@angular/core';
|
|
41
|
-
import { inject, signal, computed, effect, ViewChild, Input, ChangeDetectionStrategy, ViewEncapsulation, Component, input, viewChild, afterNextRender, Injector, output, untracked, ElementRef, DestroyRef, NgModule } from '@angular/core';
|
|
42
45
|
import { FormsModule } from '@angular/forms';
|
|
43
|
-
import * as i1$
|
|
46
|
+
import * as i1$4 from '@angular/router';
|
|
44
47
|
import { RouterModule, Router, ActivatedRoute, NavigationStart, NavigationEnd, RouteReuseStrategy, ROUTES } from '@angular/router';
|
|
45
48
|
import { Subject, takeUntil, filter, combineLatest, firstValueFrom } from 'rxjs';
|
|
46
|
-
import * as i1$
|
|
49
|
+
import * as i1$2 from '@acorex/core/platform';
|
|
47
50
|
import { AXPSettingsService, AXPCommonSettings, axpIsEntityListRoute, axpReplaceEntityListRouteQueryParams, axpIsEntityListPath, AXPTabNavigationService, AXPTabPreviewService, AXP_HOME_TAB_KEY, axpResolveTabTitleParts, AXPMenuService, AXPMenuVisibilityService, axpMenuPathsMatch, AXPPlatformBrandingService, AXPTabRouteCacheRegistry, axpResolveTabKeyFromSnapshot, axpHasTabScope, axpPathFromSnapshot, axpIsTabEligibleUrl, axpResolveTabKeyFromRouteConfig, AXP_PROTECTED_ROUTE_GUARDS, AXPCommonModule } from '@acorex-platform/framework-client/common';
|
|
48
|
-
import { AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutToolbarComponent, AXPStateMessageComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPQueryColumnsComponent, AXPThemeLayoutStartSideComponent, AXPTaskBadgeService, AXPMenuBadgeHelper, AXPTaskBadgeDirective, provideFileChooserHooks } from '@acorex-platform/framework-client/layout/components';
|
|
49
51
|
import { DragDropModule, CdkDropList, CdkDrag, CdkDragHandle, CdkDragPreview } from '@angular/cdk/drag-drop';
|
|
50
52
|
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
|
51
53
|
import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex-platform/framework-client/layout/views';
|
|
@@ -53,14 +55,9 @@ import * as i2$2 from '@acorex/components/skeleton';
|
|
|
53
55
|
import { AXSkeletonModule } from '@acorex/components/skeleton';
|
|
54
56
|
import { AXTreeViewModule, AXTreeViewComponent } from '@acorex/components/tree-view';
|
|
55
57
|
import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
|
|
56
|
-
import { runtimeCommandPayloadData, AXPKeyboardShortcutPriority } from '@acorex-platform/framework-shared/core';
|
|
58
|
+
import { runtimeCommandPayloadData, AXP_THEME_SURFACE_STYLES, AXPKeyboardShortcutPriority } from '@acorex-platform/framework-shared/core';
|
|
57
59
|
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
58
|
-
import
|
|
59
|
-
import * as i1$3 from '@acorex/components/data-pager';
|
|
60
|
-
import { AXDataPagerModule } from '@acorex/components/data-pager';
|
|
61
|
-
import * as i3$3 from '@acorex/components/check-box';
|
|
62
|
-
import { AXCheckBoxModule } from '@acorex/components/check-box';
|
|
63
|
-
import * as i4 from '@acorex/components/menu';
|
|
60
|
+
import * as i4$1 from '@acorex/components/menu';
|
|
64
61
|
import { AXContextMenuComponent, AXMenuModule } from '@acorex/components/menu';
|
|
65
62
|
import * as i2$4 from '@acorex/components/side-menu';
|
|
66
63
|
import { AXSideMenuModule } from '@acorex/components/side-menu';
|
|
@@ -71,6 +68,427 @@ import sortBy$1 from 'lodash-es/sortBy';
|
|
|
71
68
|
import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
|
|
72
69
|
import { AXResizableDirective } from '@acorex/cdk/resizable';
|
|
73
70
|
|
|
71
|
+
//#endregion
|
|
72
|
+
//#region ----- Constants -----
|
|
73
|
+
const LOAD_MORE_SKELETON_COUNT = 3;
|
|
74
|
+
//#endregion
|
|
75
|
+
class AXPEntityMasterListCardListComponent {
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region ----- Lifecycle -----
|
|
78
|
+
constructor() {
|
|
79
|
+
//#region ----- Inputs & Outputs -----
|
|
80
|
+
this.vm = input.required(/* @ts-ignore */
|
|
81
|
+
...(ngDevMode ? [{ debugName: "vm" }] : /* istanbul ignore next */ []));
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region ----- State -----
|
|
84
|
+
this.items = signal([], /* @ts-ignore */
|
|
85
|
+
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
86
|
+
this.loading = signal(false, /* @ts-ignore */
|
|
87
|
+
...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
88
|
+
this.loadingMore = signal(false, /* @ts-ignore */
|
|
89
|
+
...(ngDevMode ? [{ debugName: "loadingMore" }] : /* istanbul ignore next */ []));
|
|
90
|
+
this.hasMore = signal(false, /* @ts-ignore */
|
|
91
|
+
...(ngDevMode ? [{ debugName: "hasMore" }] : /* istanbul ignore next */ []));
|
|
92
|
+
this.totalCount = signal(0, /* @ts-ignore */
|
|
93
|
+
...(ngDevMode ? [{ debugName: "totalCount" }] : /* istanbul ignore next */ []));
|
|
94
|
+
this.highlightedRowId = signal(null, /* @ts-ignore */
|
|
95
|
+
...(ngDevMode ? [{ debugName: "highlightedRowId" }] : /* istanbul ignore next */ []));
|
|
96
|
+
this.pageSize = signal(10, /* @ts-ignore */
|
|
97
|
+
...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
|
|
98
|
+
this.showSelection = computed(() => this.vm().selectedItems().length > 0, /* @ts-ignore */
|
|
99
|
+
...(ngDevMode ? [{ debugName: "showSelection" }] : /* istanbul ignore next */ []));
|
|
100
|
+
this.rowKey = computed(() => this.vm().dataSource.config?.key ?? 'id', /* @ts-ignore */
|
|
101
|
+
...(ngDevMode ? [{ debugName: "rowKey" }] : /* istanbul ignore next */ []));
|
|
102
|
+
this.isRowLayout = computed(() => this.vm().activeListLayout() === 'row', /* @ts-ignore */
|
|
103
|
+
...(ngDevMode ? [{ debugName: "isRowLayout" }] : /* istanbul ignore next */ []));
|
|
104
|
+
this.canLoadMore = computed(() => this.hasMore() && !this.loading() && !this.loadingMore() && this.items().length > 0, /* @ts-ignore */
|
|
105
|
+
...(ngDevMode ? [{ debugName: "canLoadMore" }] : /* istanbul ignore next */ []));
|
|
106
|
+
this.loadedCount = computed(() => this.items().length, /* @ts-ignore */
|
|
107
|
+
...(ngDevMode ? [{ debugName: "loadedCount" }] : /* istanbul ignore next */ []));
|
|
108
|
+
this.showListStatus = computed(() => this.loadedCount() > 0 && this.totalCount() > 0, /* @ts-ignore */
|
|
109
|
+
...(ngDevMode ? [{ debugName: "showListStatus" }] : /* istanbul ignore next */ []));
|
|
110
|
+
this.skeletonCount = computed(() => Math.max(this.pageSize(), 1), /* @ts-ignore */
|
|
111
|
+
...(ngDevMode ? [{ debugName: "skeletonCount" }] : /* istanbul ignore next */ []));
|
|
112
|
+
this.loadMoreSkeletonPlaceholders = Array.from({ length: LOAD_MORE_SKELETON_COUNT }, (_, index) => index);
|
|
113
|
+
this.showSkeletonAvatar = computed(() => {
|
|
114
|
+
if (this.vm().cardLayout()?.header?.avatar) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
return !!resolveEntityCardAvatarPath(this.vm().entityDef, this.vm().entityDef.columns);
|
|
118
|
+
}, /* @ts-ignore */
|
|
119
|
+
...(ngDevMode ? [{ debugName: "showSkeletonAvatar" }] : /* istanbul ignore next */ []));
|
|
120
|
+
this.skeletonFieldCount = computed(() => {
|
|
121
|
+
const bodyCount = this.vm()
|
|
122
|
+
.cardFields()
|
|
123
|
+
.filter((field) => field.visible !== false && !field.isBadgeDisplay && field.display !== 'more').length;
|
|
124
|
+
return bodyCount > 0 ? Math.min(bodyCount, 3) : 3;
|
|
125
|
+
}, /* @ts-ignore */
|
|
126
|
+
...(ngDevMode ? [{ debugName: "skeletonFieldCount" }] : /* istanbul ignore next */ []));
|
|
127
|
+
this.skeletonBadgeCount = computed(() => {
|
|
128
|
+
const count = this.vm()
|
|
129
|
+
.cardFields()
|
|
130
|
+
.filter((field) => field.visible !== false && field.isBadgeDisplay).length;
|
|
131
|
+
return count > 0 ? count : 1;
|
|
132
|
+
}, /* @ts-ignore */
|
|
133
|
+
...(ngDevMode ? [{ debugName: "skeletonBadgeCount" }] : /* istanbul ignore next */ []));
|
|
134
|
+
this.skeletonShowFooter = computed(() => !this.isRowLayout() && this.vm().primaryRowActions().length > 0, /* @ts-ignore */
|
|
135
|
+
...(ngDevMode ? [{ debugName: "skeletonShowFooter" }] : /* istanbul ignore next */ []));
|
|
136
|
+
this.skeletonPlaceholders = computed(() => Array.from({ length: this.skeletonCount() }, (_, index) => index), /* @ts-ignore */
|
|
137
|
+
...(ngDevMode ? [{ debugName: "skeletonPlaceholders" }] : /* istanbul ignore next */ []));
|
|
138
|
+
this.loadSecondaryActions = (row) => {
|
|
139
|
+
return this.vm().cardSecondaryRowActions(row);
|
|
140
|
+
};
|
|
141
|
+
/** True while load-more is fetching the next chunk; ignore replace-on-changed. */
|
|
142
|
+
this.appending = false;
|
|
143
|
+
this.cardGrid = viewChild('cardGrid', /* @ts-ignore */
|
|
144
|
+
...(ngDevMode ? [{ debugName: "cardGrid" }] : /* istanbul ignore next */ []));
|
|
145
|
+
this.expandedRowIds = signal(new Set(), /* @ts-ignore */
|
|
146
|
+
...(ngDevMode ? [{ debugName: "expandedRowIds" }] : /* istanbul ignore next */ []));
|
|
147
|
+
this.columnCount = signal(1, /* @ts-ignore */
|
|
148
|
+
...(ngDevMode ? [{ debugName: "columnCount" }] : /* istanbul ignore next */ []));
|
|
149
|
+
effect((onCleanup) => {
|
|
150
|
+
const dataSource = this.vm().dataSource;
|
|
151
|
+
untracked(() => {
|
|
152
|
+
this.pageSize.set(this.resolvePageSize(this.vm()));
|
|
153
|
+
});
|
|
154
|
+
const changedSub = dataSource.onChanged.subscribe(() => {
|
|
155
|
+
if (this.appending) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
this.applyPageFromDataSource(true);
|
|
159
|
+
});
|
|
160
|
+
onCleanup(() => changedSub.unsubscribe());
|
|
161
|
+
});
|
|
162
|
+
afterRenderEffect((onCleanup) => {
|
|
163
|
+
const grid = this.cardGrid()?.nativeElement;
|
|
164
|
+
if (!grid) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const updateColumns = () => {
|
|
168
|
+
this.columnCount.set(countGridColumns(grid));
|
|
169
|
+
};
|
|
170
|
+
updateColumns();
|
|
171
|
+
const observer = new ResizeObserver(updateColumns);
|
|
172
|
+
observer.observe(grid);
|
|
173
|
+
onCleanup(() => observer.disconnect());
|
|
174
|
+
});
|
|
175
|
+
effect(() => {
|
|
176
|
+
const columns = this.columnCount();
|
|
177
|
+
const items = this.items();
|
|
178
|
+
const expanded = this.expandedRowIds();
|
|
179
|
+
if (expanded.size === 0 || items.length === 0) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
untracked(() => this.realignExpandedRows(columns, items, expanded));
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
//#endregion
|
|
186
|
+
//#region ----- Public API -----
|
|
187
|
+
async reload(_resetPagination = false) {
|
|
188
|
+
await this.loadPage(true);
|
|
189
|
+
}
|
|
190
|
+
/** Marks a card with the same post-create highlight used by the data table. */
|
|
191
|
+
highlightCardById(rowId) {
|
|
192
|
+
const key = this.rowKey();
|
|
193
|
+
const found = this.items().some((row) => String(get(row, key)) === String(rowId));
|
|
194
|
+
if (found) {
|
|
195
|
+
this.highlightedRowId.set(rowId);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
clearCardHighlight() {
|
|
199
|
+
this.highlightedRowId.set(null);
|
|
200
|
+
}
|
|
201
|
+
isRowHighlighted(row) {
|
|
202
|
+
const highlightedId = this.highlightedRowId();
|
|
203
|
+
if (highlightedId == null) {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
return String(get(row, this.rowKey())) === String(highlightedId);
|
|
207
|
+
}
|
|
208
|
+
/** Replaces the accumulated list with the current data-source page (no fetch). */
|
|
209
|
+
syncFromDataSource() {
|
|
210
|
+
this.applyPageFromDataSource(true);
|
|
211
|
+
}
|
|
212
|
+
/** Lightweight snapshot for entity list layout diagnostics. */
|
|
213
|
+
getTraceSnapshot() {
|
|
214
|
+
return {
|
|
215
|
+
itemCount: this.items().length,
|
|
216
|
+
loading: this.loading(),
|
|
217
|
+
loadingMore: this.loadingMore(),
|
|
218
|
+
hasMore: this.hasMore(),
|
|
219
|
+
pageIndex: getDataSourcePageIndex(this.vm().dataSource),
|
|
220
|
+
pageSize: this.pageSize(),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//#endregion
|
|
224
|
+
//#region ----- Card extra fields -----
|
|
225
|
+
isCardExpanded(row) {
|
|
226
|
+
const id = this.rowId(row);
|
|
227
|
+
return id != null && this.expandedRowIds().has(id);
|
|
228
|
+
}
|
|
229
|
+
onCardExtraExpanded(index, expanded) {
|
|
230
|
+
const indexes = this.visualRowIndexes(index);
|
|
231
|
+
this.expandedRowIds.update((current) => {
|
|
232
|
+
const next = new Set(current);
|
|
233
|
+
for (const rowIndex of indexes) {
|
|
234
|
+
const row = this.items()[rowIndex];
|
|
235
|
+
if (!row) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const id = this.rowId(row);
|
|
239
|
+
if (!id) {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (expanded) {
|
|
243
|
+
next.add(id);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
next.delete(id);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return next;
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
rowId(row) {
|
|
253
|
+
const id = get(row, this.rowKey());
|
|
254
|
+
return id == null ? null : String(id);
|
|
255
|
+
}
|
|
256
|
+
visualRowIndexes(index) {
|
|
257
|
+
const cards = this.cardHosts();
|
|
258
|
+
const target = cards[index];
|
|
259
|
+
if (target) {
|
|
260
|
+
const top = target.offsetTop;
|
|
261
|
+
const sameRow = cards
|
|
262
|
+
.map((element, cardIndex) => (Math.abs(element.offsetTop - top) <= 1 ? cardIndex : -1))
|
|
263
|
+
.filter((cardIndex) => cardIndex >= 0);
|
|
264
|
+
if (sameRow.length > 0) {
|
|
265
|
+
return sameRow;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
const columns = this.columnCount();
|
|
269
|
+
const start = Math.floor(index / columns) * columns;
|
|
270
|
+
const end = Math.min(start + columns, this.items().length);
|
|
271
|
+
return Array.from({ length: end - start }, (_, offset) => start + offset);
|
|
272
|
+
}
|
|
273
|
+
cardHosts() {
|
|
274
|
+
const grid = this.cardGrid()?.nativeElement;
|
|
275
|
+
return grid ? listCardSlots(grid) : [];
|
|
276
|
+
}
|
|
277
|
+
realignExpandedRows(columns, items, expanded) {
|
|
278
|
+
const next = new Set(expanded);
|
|
279
|
+
let changed = false;
|
|
280
|
+
for (let index = 0; index < items.length; index += columns) {
|
|
281
|
+
const ids = items
|
|
282
|
+
.slice(index, index + columns)
|
|
283
|
+
.map((row) => this.rowId(row))
|
|
284
|
+
.filter((id) => id != null);
|
|
285
|
+
if (!ids.some((id) => next.has(id))) {
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
for (const id of ids) {
|
|
289
|
+
if (!next.has(id)) {
|
|
290
|
+
next.add(id);
|
|
291
|
+
changed = true;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (changed) {
|
|
296
|
+
this.expandedRowIds.set(next);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
//#endregion
|
|
300
|
+
//#region ----- Selection -----
|
|
301
|
+
trackRow(index, row) {
|
|
302
|
+
if (!isRowRecord(row)) {
|
|
303
|
+
return `row-${index}`;
|
|
304
|
+
}
|
|
305
|
+
const id = get(row, this.rowKey());
|
|
306
|
+
return id != null ? String(id) : `row-${index}`;
|
|
307
|
+
}
|
|
308
|
+
isRowSelected(row) {
|
|
309
|
+
const key = this.rowKey();
|
|
310
|
+
const rowId = get(row, key);
|
|
311
|
+
return this.vm()
|
|
312
|
+
.selectedItems()
|
|
313
|
+
.some((item) => getRowId(item, key) === rowId);
|
|
314
|
+
}
|
|
315
|
+
onRowSelectionChange(row, selected) {
|
|
316
|
+
const key = this.rowKey();
|
|
317
|
+
const rowId = getRowId(row, key);
|
|
318
|
+
const current = this.vm().selectedItems();
|
|
319
|
+
if (selected) {
|
|
320
|
+
if (!current.some((item) => getRowId(item, key) === rowId)) {
|
|
321
|
+
this.vm().selectedItems.set([...current, row]);
|
|
322
|
+
}
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
this.vm().selectedItems.set(current.filter((item) => getRowId(item, key) !== rowId));
|
|
326
|
+
}
|
|
327
|
+
//#endregion
|
|
328
|
+
//#region ----- Commands & Paging -----
|
|
329
|
+
async onCommandClick(name, row) {
|
|
330
|
+
await this.vm().executeCommand(name, row);
|
|
331
|
+
}
|
|
332
|
+
onInfiniteScrollReached() {
|
|
333
|
+
void this.loadMore();
|
|
334
|
+
}
|
|
335
|
+
//#endregion
|
|
336
|
+
//#region ----- Data Loading -----
|
|
337
|
+
async loadMore() {
|
|
338
|
+
if (!this.canLoadMore()) {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
await this.loadPage(false);
|
|
342
|
+
}
|
|
343
|
+
async loadPage(reset) {
|
|
344
|
+
const vm = this.vm();
|
|
345
|
+
const take = this.resolvePageSize(vm);
|
|
346
|
+
this.pageSize.set(take);
|
|
347
|
+
const skip = reset ? 0 : this.items().length;
|
|
348
|
+
this.appending = !reset;
|
|
349
|
+
if (reset) {
|
|
350
|
+
this.items.set([]);
|
|
351
|
+
this.hasMore.set(false);
|
|
352
|
+
this.loading.set(true);
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
this.loadingMore.set(true);
|
|
356
|
+
}
|
|
357
|
+
applyDataSourcePagingWithoutLoad(vm.dataSource, { take, skip });
|
|
358
|
+
invalidateDataSourceFetchedPages(vm.dataSource);
|
|
359
|
+
try {
|
|
360
|
+
const dataReady = this.waitForDataSourceLoad(vm.dataSource);
|
|
361
|
+
vm.dataSource.refresh({ reset });
|
|
362
|
+
await dataReady;
|
|
363
|
+
this.applyPageFromDataSource(reset);
|
|
364
|
+
}
|
|
365
|
+
finally {
|
|
366
|
+
this.appending = false;
|
|
367
|
+
this.loading.set(false);
|
|
368
|
+
this.loadingMore.set(false);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
applyPageFromDataSource(reset) {
|
|
372
|
+
const ds = this.vm().dataSource;
|
|
373
|
+
const pageItems = [...ds.items].filter(isRowRecord);
|
|
374
|
+
const merged = mergeInfiniteScrollPage(this.items(), { items: pageItems, total: ds.totalCount }, { reset, skip: this.items().length });
|
|
375
|
+
this.items.set(dedupeRows(merged.items, this.rowKey()));
|
|
376
|
+
if (reset) {
|
|
377
|
+
this.expandedRowIds.set(new Set());
|
|
378
|
+
}
|
|
379
|
+
this.hasMore.set(merged.hasMore);
|
|
380
|
+
this.totalCount.set(ds.totalCount ?? merged.items.length);
|
|
381
|
+
this.pageSize.set(this.resolvePageSize(this.vm()));
|
|
382
|
+
}
|
|
383
|
+
resolvePageSize(vm) {
|
|
384
|
+
return vm.getResolvedListPaging().take || vm.dataSource.config.pageSize || 10;
|
|
385
|
+
}
|
|
386
|
+
waitForDataSourceLoad(dataSource) {
|
|
387
|
+
return new Promise((resolve) => {
|
|
388
|
+
let settled = false;
|
|
389
|
+
const finish = () => {
|
|
390
|
+
if (settled) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
settled = true;
|
|
394
|
+
clearTimeout(timeoutId);
|
|
395
|
+
loadingSub.unsubscribe();
|
|
396
|
+
changedSub.unsubscribe();
|
|
397
|
+
resolve();
|
|
398
|
+
};
|
|
399
|
+
const changedSub = dataSource.onChanged.subscribe(() => {
|
|
400
|
+
if (!dataSource.isLoading) {
|
|
401
|
+
queueMicrotask(finish);
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
const loadingSub = dataSource.onLoadingChanged.subscribe((isLoading) => {
|
|
405
|
+
if (!isLoading) {
|
|
406
|
+
queueMicrotask(finish);
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
const timeoutId = setTimeout(finish, 10_000);
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListCardListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
413
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityMasterListCardListComponent, isStandalone: true, selector: "axp-entity-master-list-card-list", inputs: { vm: { classPropertyName: "vm", publicName: "vm", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "cardGrid", first: true, predicate: ["cardGrid"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"axp-entity-card-list\" [class.axp-entity-card-list--rows]=\"isRowLayout()\">\n @if (loading() && !items().length) {\n <!-- ----- Skeleton cards while the first page is fetched ----- -->\n <div class=\"axp-entity-card-list__grid\" aria-busy=\"true\" aria-live=\"polite\">\n @for (index of skeletonPlaceholders(); track index) {\n <div class=\"axp-entity-card-list__cell\">\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"skeletonShowFooter()\"\n [rowLayout]=\"isRowLayout()\"\n [showAvatar]=\"showSkeletonAvatar()\"\n [fillHost]=\"true\"\n />\n </div>\n }\n </div>\n } @else if (!items().length) {\n <!-- ----- Empty state when the list has no rows ----- -->\n <div class=\"axp-entity-card-list__empty\">\n <axp-state-message\n icon=\"fa-light fa-clipboard-list\"\n [title]=\"'@general:empty-states.no-records-found.title'\"\n [description]=\"'@general:empty-states.no-records-found.description'\"\n ></axp-state-message>\n </div>\n } @else {\n <!-- ----- Accumulated card grid with infinite scroll ----- -->\n <div #cardGrid class=\"axp-entity-card-list__grid\">\n @for (row of items(); track trackRow($index, row)) {\n <!--->\n <!-- ----- Render a card when the row record is present ----- -->\n @if (row) {\n <div class=\"axp-entity-card-list__cell\">\n <axp-entity-card\n [entity]=\"vm().entityDef\"\n [layout]=\"vm().cardLayout()\"\n [row]=\"row\"\n [fields]=\"vm().cardFields()\"\n [variant]=\"isRowLayout() ? 'row' : 'card'\"\n [interactive]=\"true\"\n [fillHost]=\"true\"\n [extraExpanded]=\"isCardExpanded(row)\"\n [showSelection]=\"showSelection()\"\n [selected]=\"isRowSelected(row)\"\n [showNewBadge]=\"isRowHighlighted(row)\"\n [primaryActions]=\"vm().primaryRowActions()\"\n [secondaryActionLoader]=\"loadSecondaryActions\"\n (extraExpandedChange)=\"onCardExtraExpanded($index, $event)\"\n (selectionChange)=\"onRowSelectionChange(row, $event)\"\n (commandClick)=\"onCommandClick($event, row)\"\n />\n </div>\n }\n }\n <!--->\n <!-- ----- Skeleton cards while the next chunk is fetched ----- -->\n @if (loadingMore()) {\n @for (index of loadMoreSkeletonPlaceholders; track index) {\n <div class=\"axp-entity-card-list__cell\">\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"skeletonShowFooter()\"\n [rowLayout]=\"isRowLayout()\"\n [showAvatar]=\"showSkeletonAvatar()\"\n [fillHost]=\"true\"\n />\n </div>\n }\n }\n <div\n axpInfiniteScroll\n class=\"axp-entity-card-list__sentinel\"\n [axpInfiniteScrollEnabled]=\"canLoadMore()\"\n (axpInfiniteScrollReached)=\"onInfiniteScrollReached()\"\n ></div>\n </div>\n <!--------------------------------------------------------------->\n <!-- ----- Compact loaded count, pinned under the scrolling grid ----- -->\n @if (showListStatus()) {\n <div class=\"axp-entity-card-list__status\" aria-live=\"polite\">\n {{\n '@general:terms.interface.list-range'\n | translate: { params: { loaded: loadedCount(), total: totalCount() } }\n | async\n }}\n </div>\n }\n }\n</div>\n", styles: ["@layer properties;:host.axp-entity-list-host{display:flex;height:100%;min-height:0px;flex-direction:column;overflow:hidden}.axp-entity-card-list{display:flex;min-height:0px;flex:1;flex-direction:column;gap:var(--spacing, .25rem)}.axp-entity-card-list .axp-entity-card-list__empty{display:flex;min-height:0px;flex:1;align-items:center;justify-content:center;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:1px;--tw-border-style: dashed;border-style:dashed;border-color:rgba(var(--ax-sys-color-lightest-surface))}.axp-entity-card-list .axp-entity-card-list__grid{display:grid;min-height:0px;flex:1;grid-template-columns:repeat(1,minmax(0,1fr));align-items:stretch;gap:calc(var(--spacing, .25rem) * 2);overflow:auto;padding-inline-end:calc(var(--spacing, .25rem) * 3);align-content:start;grid-auto-rows:auto}@media(width>=48rem){.axp-entity-card-list .axp-entity-card-list__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(width>=80rem){.axp-entity-card-list .axp-entity-card-list__grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.axp-entity-card-list .axp-entity-card-list__cell{display:flex;min-width:0;flex-direction:column}.axp-entity-card-list .axp-entity-card-list__cell>axp-entity-card,.axp-entity-card-list .axp-entity-card-list__cell>axp-entity-card-skeleton{display:flex;width:100%;min-width:0;flex:1 1 auto;flex-direction:column}.axp-entity-card-list.axp-entity-card-list--rows .axp-entity-card-list__grid{grid-template-columns:repeat(1,minmax(0,1fr));gap:calc(var(--spacing, .25rem) * 2)}@media(width>=48rem){.axp-entity-card-list.axp-entity-card-list--rows .axp-entity-card-list__grid{grid-template-columns:repeat(1,minmax(0,1fr))}}@media(width>=80rem){.axp-entity-card-list.axp-entity-card-list--rows .axp-entity-card-list__grid{grid-template-columns:repeat(1,minmax(0,1fr))}}.axp-entity-card-list .axp-entity-card-list__sentinel{grid-column:1 / -1;height:1px;width:100%}.axp-entity-card-list .axp-entity-card-list__status{display:flex;flex-shrink:0;align-items:center;justify-content:flex-end;padding-top:calc(var(--spacing, .25rem) * .5);padding-bottom:var(--spacing, .25rem);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:rgba(var(--ax-sys-color-text-default))}@supports (color: color-mix(in lab,red,red)){.axp-entity-card-list .axp-entity-card-list__status{color:color-mix(in oklab,rgba(var(--ax-sys-color-text-default)) 80%,transparent)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AXPEntityCardComponent, selector: "axp-entity-card", inputs: ["entity", "layout", "row", "fields", "variant", "interactive", "embedded", "elevated", "disableLookupPopover", "fillHost", "extraExpanded", "selected", "showNewBadge", "showSelection", "showClose", "primaryActions", "primaryActionLook", "secondaryActionLoader"], outputs: ["extraExpandedChange", "selectionChange", "commandClick", "closeClick"] }, { kind: "component", type: AXPEntityCardSkeletonComponent, selector: "axp-entity-card-skeleton", inputs: ["fieldCount", "badgeCount", "showFooter", "showHeaderMenu", "showContent", "rowLayout", "showAvatar", "fillHost", "embedded", "elevated"] }, { kind: "directive", type: AXPInfiniteScrollDirective, selector: "[axpInfiniteScroll]", inputs: ["axpInfiniteScrollEnabled", "axpInfiniteScrollRoot", "axpInfiniteScrollRootMargin", "axpInfiniteScrollThreshold"], outputs: ["axpInfiniteScrollReached"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
414
|
+
}
|
|
415
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListCardListComponent, decorators: [{
|
|
416
|
+
type: Component,
|
|
417
|
+
args: [{ selector: 'axp-entity-master-list-card-list', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
418
|
+
CommonModule,
|
|
419
|
+
AXPEntityCardComponent,
|
|
420
|
+
AXPEntityCardSkeletonComponent,
|
|
421
|
+
AXPInfiniteScrollDirective,
|
|
422
|
+
AXPStateMessageComponent,
|
|
423
|
+
AXTranslationModule,
|
|
424
|
+
], template: "<div class=\"axp-entity-card-list\" [class.axp-entity-card-list--rows]=\"isRowLayout()\">\n @if (loading() && !items().length) {\n <!-- ----- Skeleton cards while the first page is fetched ----- -->\n <div class=\"axp-entity-card-list__grid\" aria-busy=\"true\" aria-live=\"polite\">\n @for (index of skeletonPlaceholders(); track index) {\n <div class=\"axp-entity-card-list__cell\">\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"skeletonShowFooter()\"\n [rowLayout]=\"isRowLayout()\"\n [showAvatar]=\"showSkeletonAvatar()\"\n [fillHost]=\"true\"\n />\n </div>\n }\n </div>\n } @else if (!items().length) {\n <!-- ----- Empty state when the list has no rows ----- -->\n <div class=\"axp-entity-card-list__empty\">\n <axp-state-message\n icon=\"fa-light fa-clipboard-list\"\n [title]=\"'@general:empty-states.no-records-found.title'\"\n [description]=\"'@general:empty-states.no-records-found.description'\"\n ></axp-state-message>\n </div>\n } @else {\n <!-- ----- Accumulated card grid with infinite scroll ----- -->\n <div #cardGrid class=\"axp-entity-card-list__grid\">\n @for (row of items(); track trackRow($index, row)) {\n <!--->\n <!-- ----- Render a card when the row record is present ----- -->\n @if (row) {\n <div class=\"axp-entity-card-list__cell\">\n <axp-entity-card\n [entity]=\"vm().entityDef\"\n [layout]=\"vm().cardLayout()\"\n [row]=\"row\"\n [fields]=\"vm().cardFields()\"\n [variant]=\"isRowLayout() ? 'row' : 'card'\"\n [interactive]=\"true\"\n [fillHost]=\"true\"\n [extraExpanded]=\"isCardExpanded(row)\"\n [showSelection]=\"showSelection()\"\n [selected]=\"isRowSelected(row)\"\n [showNewBadge]=\"isRowHighlighted(row)\"\n [primaryActions]=\"vm().primaryRowActions()\"\n [secondaryActionLoader]=\"loadSecondaryActions\"\n (extraExpandedChange)=\"onCardExtraExpanded($index, $event)\"\n (selectionChange)=\"onRowSelectionChange(row, $event)\"\n (commandClick)=\"onCommandClick($event, row)\"\n />\n </div>\n }\n }\n <!--->\n <!-- ----- Skeleton cards while the next chunk is fetched ----- -->\n @if (loadingMore()) {\n @for (index of loadMoreSkeletonPlaceholders; track index) {\n <div class=\"axp-entity-card-list__cell\">\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"skeletonShowFooter()\"\n [rowLayout]=\"isRowLayout()\"\n [showAvatar]=\"showSkeletonAvatar()\"\n [fillHost]=\"true\"\n />\n </div>\n }\n }\n <div\n axpInfiniteScroll\n class=\"axp-entity-card-list__sentinel\"\n [axpInfiniteScrollEnabled]=\"canLoadMore()\"\n (axpInfiniteScrollReached)=\"onInfiniteScrollReached()\"\n ></div>\n </div>\n <!--------------------------------------------------------------->\n <!-- ----- Compact loaded count, pinned under the scrolling grid ----- -->\n @if (showListStatus()) {\n <div class=\"axp-entity-card-list__status\" aria-live=\"polite\">\n {{\n '@general:terms.interface.list-range'\n | translate: { params: { loaded: loadedCount(), total: totalCount() } }\n | async\n }}\n </div>\n }\n }\n</div>\n", styles: ["@layer properties;:host.axp-entity-list-host{display:flex;height:100%;min-height:0px;flex-direction:column;overflow:hidden}.axp-entity-card-list{display:flex;min-height:0px;flex:1;flex-direction:column;gap:var(--spacing, .25rem)}.axp-entity-card-list .axp-entity-card-list__empty{display:flex;min-height:0px;flex:1;align-items:center;justify-content:center;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:1px;--tw-border-style: dashed;border-style:dashed;border-color:rgba(var(--ax-sys-color-lightest-surface))}.axp-entity-card-list .axp-entity-card-list__grid{display:grid;min-height:0px;flex:1;grid-template-columns:repeat(1,minmax(0,1fr));align-items:stretch;gap:calc(var(--spacing, .25rem) * 2);overflow:auto;padding-inline-end:calc(var(--spacing, .25rem) * 3);align-content:start;grid-auto-rows:auto}@media(width>=48rem){.axp-entity-card-list .axp-entity-card-list__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(width>=80rem){.axp-entity-card-list .axp-entity-card-list__grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.axp-entity-card-list .axp-entity-card-list__cell{display:flex;min-width:0;flex-direction:column}.axp-entity-card-list .axp-entity-card-list__cell>axp-entity-card,.axp-entity-card-list .axp-entity-card-list__cell>axp-entity-card-skeleton{display:flex;width:100%;min-width:0;flex:1 1 auto;flex-direction:column}.axp-entity-card-list.axp-entity-card-list--rows .axp-entity-card-list__grid{grid-template-columns:repeat(1,minmax(0,1fr));gap:calc(var(--spacing, .25rem) * 2)}@media(width>=48rem){.axp-entity-card-list.axp-entity-card-list--rows .axp-entity-card-list__grid{grid-template-columns:repeat(1,minmax(0,1fr))}}@media(width>=80rem){.axp-entity-card-list.axp-entity-card-list--rows .axp-entity-card-list__grid{grid-template-columns:repeat(1,minmax(0,1fr))}}.axp-entity-card-list .axp-entity-card-list__sentinel{grid-column:1 / -1;height:1px;width:100%}.axp-entity-card-list .axp-entity-card-list__status{display:flex;flex-shrink:0;align-items:center;justify-content:flex-end;padding-top:calc(var(--spacing, .25rem) * .5);padding-bottom:var(--spacing, .25rem);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:rgba(var(--ax-sys-color-text-default))}@supports (color: color-mix(in lab,red,red)){.axp-entity-card-list .axp-entity-card-list__status{color:color-mix(in oklab,rgba(var(--ax-sys-color-text-default)) 80%,transparent)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
425
|
+
}], ctorParameters: () => [], propDecorators: { vm: [{ type: i0.Input, args: [{ isSignal: true, alias: "vm", required: true }] }], cardGrid: [{ type: i0.ViewChild, args: ['cardGrid', { isSignal: true }] }] } });
|
|
426
|
+
//#region ----- Helpers -----
|
|
427
|
+
function getRowId(row, key) {
|
|
428
|
+
if (isRowRecord(row)) {
|
|
429
|
+
return get(row, key);
|
|
430
|
+
}
|
|
431
|
+
return undefined;
|
|
432
|
+
}
|
|
433
|
+
function isRowRecord(row) {
|
|
434
|
+
return row != null && typeof row === 'object' && !Array.isArray(row);
|
|
435
|
+
}
|
|
436
|
+
function dedupeRows(rows, key) {
|
|
437
|
+
const seen = new Set();
|
|
438
|
+
const unique = [];
|
|
439
|
+
for (const row of rows) {
|
|
440
|
+
const id = get(row, key);
|
|
441
|
+
const token = id == null ? '' : String(id);
|
|
442
|
+
if (token && seen.has(token)) {
|
|
443
|
+
continue;
|
|
444
|
+
}
|
|
445
|
+
if (token) {
|
|
446
|
+
seen.add(token);
|
|
447
|
+
}
|
|
448
|
+
unique.push(row);
|
|
449
|
+
}
|
|
450
|
+
return unique;
|
|
451
|
+
}
|
|
452
|
+
function countGridColumns(grid) {
|
|
453
|
+
const fromRow = countColumnsFromFirstRow(grid);
|
|
454
|
+
if (fromRow > 0) {
|
|
455
|
+
return fromRow;
|
|
456
|
+
}
|
|
457
|
+
const raw = getComputedStyle(grid).gridTemplateColumns.trim();
|
|
458
|
+
if (!raw || raw === 'none') {
|
|
459
|
+
return 1;
|
|
460
|
+
}
|
|
461
|
+
const repeatMatch = raw.match(/^repeat\(\s*(\d+)\s*,/i);
|
|
462
|
+
if (repeatMatch) {
|
|
463
|
+
return Math.max(1, Number(repeatMatch[1]));
|
|
464
|
+
}
|
|
465
|
+
const tracks = raw.match(/minmax\([^)]+\)|[^\s]+/g);
|
|
466
|
+
return Math.max(1, tracks?.length ?? 1);
|
|
467
|
+
}
|
|
468
|
+
function listCardSlots(grid) {
|
|
469
|
+
const cells = Array.from(grid.children).filter((element) => element.classList.contains('axp-entity-card-list__cell'));
|
|
470
|
+
if (cells.length > 0) {
|
|
471
|
+
return cells;
|
|
472
|
+
}
|
|
473
|
+
return Array.from(grid.children).filter((element) => isCardHost(element));
|
|
474
|
+
}
|
|
475
|
+
function isCardHost(element) {
|
|
476
|
+
const tag = element.tagName.toLowerCase();
|
|
477
|
+
return tag === 'axp-entity-card' || tag === 'axp-entity-card-skeleton';
|
|
478
|
+
}
|
|
479
|
+
function countColumnsFromFirstRow(grid) {
|
|
480
|
+
const slots = listCardSlots(grid);
|
|
481
|
+
if (slots.length === 0) {
|
|
482
|
+
return 0;
|
|
483
|
+
}
|
|
484
|
+
const firstTop = slots[0].offsetTop;
|
|
485
|
+
return slots.filter((slot) => Math.abs(slot.offsetTop - firstTop) <= 1).length;
|
|
486
|
+
}
|
|
487
|
+
function invalidateDataSourceFetchedPages(dataSource) {
|
|
488
|
+
const internals = dataSource;
|
|
489
|
+
internals.fetchedPages?.clear();
|
|
490
|
+
}
|
|
491
|
+
|
|
74
492
|
class AXPEntityDetailListViewComponent {
|
|
75
493
|
constructor(actionSheetService, unsubscriber) {
|
|
76
494
|
this.actionSheetService = actionSheetService;
|
|
@@ -82,6 +500,29 @@ class AXPEntityDetailListViewComponent {
|
|
|
82
500
|
...(ngDevMode ? [{ debugName: "toolbarPrimaryActions" }] : /* istanbul ignore next */ []));
|
|
83
501
|
this.toolbarSecondaryActions = signal([], /* @ts-ignore */
|
|
84
502
|
...(ngDevMode ? [{ debugName: "toolbarSecondaryActions" }] : /* istanbul ignore next */ []));
|
|
503
|
+
this.listDisplayModePopover = viewChild('listDisplayModePopover', /* @ts-ignore */
|
|
504
|
+
...(ngDevMode ? [{ debugName: "listDisplayModePopover" }] : /* istanbul ignore next */ []));
|
|
505
|
+
this.showListDisplayModeControl = computed(() => (this.vm?.enabledListLayouts().length ?? 0) > 1, /* @ts-ignore */
|
|
506
|
+
...(ngDevMode ? [{ debugName: "showListDisplayModeControl" }] : /* istanbul ignore next */ []));
|
|
507
|
+
this.listDisplayMode = computed(() => this.vm?.listDisplayMode(), /* @ts-ignore */
|
|
508
|
+
...(ngDevMode ? [{ debugName: "listDisplayMode" }] : /* istanbul ignore next */ []));
|
|
509
|
+
this.hasTableListDisplayOption = computed(() => this.vm?.enabledListLayouts().includes('table') ?? false, /* @ts-ignore */
|
|
510
|
+
...(ngDevMode ? [{ debugName: "hasTableListDisplayOption" }] : /* istanbul ignore next */ []));
|
|
511
|
+
this.hasCardListDisplayOption = computed(() => this.vm?.enabledListLayouts().includes('card') ?? false, /* @ts-ignore */
|
|
512
|
+
...(ngDevMode ? [{ debugName: "hasCardListDisplayOption" }] : /* istanbul ignore next */ []));
|
|
513
|
+
this.hasRowListDisplayOption = computed(() => this.vm?.enabledListLayouts().includes('row') ?? false, /* @ts-ignore */
|
|
514
|
+
...(ngDevMode ? [{ debugName: "hasRowListDisplayOption" }] : /* istanbul ignore next */ []));
|
|
515
|
+
this.listDisplayModeButtonIcon = computed(() => {
|
|
516
|
+
switch (this.listDisplayMode()) {
|
|
517
|
+
case 'table':
|
|
518
|
+
return 'fa-light fa-table';
|
|
519
|
+
case 'row':
|
|
520
|
+
return 'fa-light fa-grip-lines';
|
|
521
|
+
case 'card':
|
|
522
|
+
return 'fa-light fa-grid-2';
|
|
523
|
+
}
|
|
524
|
+
}, /* @ts-ignore */
|
|
525
|
+
...(ngDevMode ? [{ debugName: "listDisplayModeButtonIcon" }] : /* istanbul ignore next */ []));
|
|
85
526
|
this.destroyed = new Subject();
|
|
86
527
|
this.dropdownRowItems = computed(() => {
|
|
87
528
|
return this.vm.secondaryRowActions().map((c) => ({
|
|
@@ -110,8 +551,9 @@ class AXPEntityDetailListViewComponent {
|
|
|
110
551
|
return Promise.resolve(this.dropdownRowItems());
|
|
111
552
|
};
|
|
112
553
|
effect(() => {
|
|
113
|
-
this.grid
|
|
114
|
-
|
|
554
|
+
if (this.grid) {
|
|
555
|
+
this.grid.selectedRows = this.vm.selectedItems();
|
|
556
|
+
}
|
|
115
557
|
this.refreshToolbarActions();
|
|
116
558
|
});
|
|
117
559
|
this.subscribeActionEvents();
|
|
@@ -126,7 +568,7 @@ class AXPEntityDetailListViewComponent {
|
|
|
126
568
|
.listenLayoutRefresh()
|
|
127
569
|
.pipe(takeUntil(this.destroyed))
|
|
128
570
|
.subscribe(() => {
|
|
129
|
-
this.grid
|
|
571
|
+
this.grid?.refresh({
|
|
130
572
|
reset: false,
|
|
131
573
|
});
|
|
132
574
|
this.refreshToolbarActions();
|
|
@@ -156,6 +598,10 @@ class AXPEntityDetailListViewComponent {
|
|
|
156
598
|
async handleRowCommandClick(e) {
|
|
157
599
|
this.vm.executeCommand(e.name, e.data);
|
|
158
600
|
}
|
|
601
|
+
setListDisplayMode(mode) {
|
|
602
|
+
this.vm.setListDisplayMode(mode);
|
|
603
|
+
this.listDisplayModePopover()?.close();
|
|
604
|
+
}
|
|
159
605
|
async refreshToolbarActions() {
|
|
160
606
|
const [primary, secondary] = await Promise.all([this.vm.getPrimaryActions(), this.vm.getSecondaryActions()]);
|
|
161
607
|
this.toolbarPrimaryActions.set(primary);
|
|
@@ -169,10 +615,10 @@ class AXPEntityDetailListViewComponent {
|
|
|
169
615
|
this.vm?.destroy();
|
|
170
616
|
this.destroy();
|
|
171
617
|
}
|
|
172
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailListViewComponent, deps: [{ token: i1.AXActionSheetService }, { token: i2.AXUnsubscriber }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
173
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityDetailListViewComponent, isStandalone: true, selector: "axp-entity-detail-list-view", inputs: { vm: ["viewModel", "vm"] }, providers: [AXUnsubscriber], viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"flex p-2\">\n <div class=\"flex flex-col items-end gap-3 flex-1 overflow-auto min-h-72\">\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-between items-center\">\n <div class=\"flex justify-start items-center gap-4\">\n @if (vm.hasSelectedItems()) {\n <div class=\"flex gap-3 items-center h-10\">\n <span class=\"text-xl font-bold\">\n {{ vm.selectedItems().length }}\n {{ '@general:terms.items-selected' | translate | async }}\n </span>\n <span\n (click)=\"vm.clearSelection()\"\n class=\"text-sm text-primary-500 underline cursor-pointer\"\n >{{ '@general:actions.unselect.title' | translate | async }}</span\n >\n </div>\n } @else {\n @if (vm.hasInlineFilters() && !deviceService.isSmall()) {\n <div class=\"w-72\">\n <ax-search-box\n [placeholder]=\"\n ('@general:widgets.lookup.search' | translate | async) + vm.inlineFiltersPlaceholders().join(', ')\n \"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </div>\n }\n }\n </div>\n </div>\n <div class=\"flex items-center gap-3\">\n @for (tr of toolbarPrimaryActions(); track $index) {\n <ax-button\n [text]=\"(tr.title | translate | async)!\"\n [color]=\"tr.color\"\n [disabled]=\"tr.disabled\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button>\n }\n @if (toolbarSecondaryActions().length) {\n <ax-button\n [text]=\"deviceService.isSmall() ? null : ('@general:terms.interface.actions' | translate | async)\"\n [color]=\"'default'\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (tr of toolbarSecondaryActions(); track $index) {\n <ng-container>\n @if (tr.separated && !$first) {\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [text]=\"(tr.title | translate | async)!\"\n class=\"font-semibold text-{{ tr.color }}\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n </div>\n\n <div class=\"flex flex-1 pt-0 overflow-auto max-w-full\">\n <ax-data-table\n #grid\n [showFooter]=\"false\"\n class=\"flex-1\"\n [paging]=\"true\"\n [fetchDataMode]=\"'manual'\"\n [parentField]=\"vm.parentKey()\"\n [loading]=\"{ enabled: true, animation: true }\"\n [dataSource]=\"vm.dataSource\"\n (selectedRowsChange)=\"handleSelectedRowsChange($event)\"\n (onRowDbClick)=\"handleRowDbClick($event)\"\n >\n @if (vm.showIndexColumn()) {\n <ax-index-column\n [caption]=\"('@general:terms.common.row-number' | translate | async)!\"\n fixed=\"start\"\n [width]=\"'80px'\"\n [padZero]=\"false\"\n ></ax-index-column>\n }\n @if (vm.selectedScopeActionsCount()) {\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n }\n @for (col of vm.columns(); track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer\n [expandHandler]=\"$index === 0 && vm.parentKey() ? true : false\"\n [caption]=\"(col.title | translate | async)!\"\n [node]=\"col.node()\"\n ></axp-widget-column-renderer>\n }\n }\n @if (getCommandRowItems().length) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"getCommandRowItems().length * 60 + 'px'\"\n [items]=\"getCommandRowItems()\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n }\n @if (dropdownRowItems().length) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-dropdown-command-column>\n }\n </ax-data-table>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i2$1.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: AXBadgeModule }, { 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: AXPopoverModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXActionSheetModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDialogModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i7.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i7.AXRowIndexColumnComponent, selector: "ax-index-column", inputs: ["width", "caption", "fixed", "footerTemplate", "padZero"] }, { kind: "component", type: i7.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i7.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i7.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "emptyStateTemplate", "emptyStateText", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type:
|
|
618
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailListViewComponent, deps: [{ token: i1$1.AXActionSheetService }, { token: i2.AXUnsubscriber }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
619
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityDetailListViewComponent, isStandalone: true, selector: "axp-entity-detail-list-view", inputs: { vm: ["viewModel", "vm"] }, providers: [AXUnsubscriber], viewQueries: [{ propertyName: "listDisplayModePopover", first: true, predicate: ["listDisplayModePopover"], descendants: true, isSignal: true }, { propertyName: "grid", first: true, predicate: ["grid"], descendants: true }], ngImport: i0, template: "<div class=\"flex p-2\">\n <div class=\"flex flex-col items-stretch gap-3 flex-1 overflow-auto min-h-72\">\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-between items-center\">\n <div class=\"flex justify-start items-center gap-4\">\n @if (vm.hasSelectedItems()) {\n <div class=\"flex gap-3 items-center h-10\">\n <span class=\"text-xl font-bold\">\n {{ vm.selectedItems().length }}\n {{ '@general:terms.items-selected' | translate | async }}\n </span>\n <span\n (click)=\"vm.clearSelection()\"\n class=\"text-sm text-primary-500 underline cursor-pointer\"\n >{{ '@general:actions.unselect.title' | translate | async }}</span\n >\n </div>\n } @else {\n @if (vm.hasInlineFilters() && !deviceService.isSmall()) {\n <div class=\"w-72\">\n <ax-search-box\n [placeholder]=\"\n ('@general:widgets.lookup.search' | translate | async) + vm.inlineFiltersPlaceholders().join(', ')\n \"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </div>\n }\n }\n </div>\n </div>\n <div class=\"flex items-center gap-3\">\n @if (showListDisplayModeControl()) {\n <div>\n <ax-button [iconOnly]=\"true\" #listDisplayButton [color]=\"'default'\">\n <i [class]=\"listDisplayModeButtonIcon()\"></i>\n </ax-button>\n <ax-popover\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"listDisplayButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #listDisplayModePopover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.interface.list-display' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-2\">\n <ax-button-item-list>\n @if (hasTableListDisplayOption()) {\n <ax-button-item\n [text]=\"('@general:terms.interface.table-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'table'\"\n (onClick)=\"setListDisplayMode('table')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-table\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n @if (hasTableListDisplayOption() && (hasCardListDisplayOption() || hasRowListDisplayOption())) {\n <ax-divider />\n }\n @if (hasCardListDisplayOption()) {\n <!-- ----- Card grid presentation ----- -->\n <ax-button-item\n [text]=\"('@general:terms.interface.card-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'card'\"\n (onClick)=\"setListDisplayMode('card')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grid-2\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n @if (hasRowListDisplayOption()) {\n <!-- ----- Horizontal row-list presentation ----- -->\n <ax-button-item\n [text]=\"('@general:terms.interface.row-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'row'\"\n (onClick)=\"setListDisplayMode('row')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grip-lines\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n @for (tr of toolbarPrimaryActions(); track $index) {\n <ax-button\n [text]=\"(tr.title | translate | async)!\"\n [color]=\"tr.color\"\n [disabled]=\"tr.disabled\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button>\n }\n @if (toolbarSecondaryActions().length) {\n <ax-button\n [text]=\"deviceService.isSmall() ? null : ('@general:terms.interface.actions' | translate | async)\"\n [color]=\"'default'\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (tr of toolbarSecondaryActions(); track $index) {\n <ng-container>\n @if (tr.separated && !$first) {\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [text]=\"(tr.title | translate | async)!\"\n class=\"font-semibold text-{{ tr.color }}\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n </div>\n\n @if (vm.enabledListLayouts().includes('table')) {\n <div class=\"flex flex-1 pt-0 overflow-auto max-w-full w-full\" [class.hidden]=\"vm.activeListLayout() !== 'table'\">\n <ax-data-table\n #grid\n [showFooter]=\"false\"\n class=\"flex-1\"\n [paging]=\"true\"\n [fetchDataMode]=\"'manual'\"\n [parentField]=\"vm.parentKey()\"\n [loading]=\"{ enabled: true, animation: true }\"\n [dataSource]=\"vm.dataSource\"\n (selectedRowsChange)=\"handleSelectedRowsChange($event)\"\n (onRowDbClick)=\"handleRowDbClick($event)\"\n >\n @if (vm.showIndexColumn()) {\n <ax-index-column\n [caption]=\"('@general:terms.common.row-number' | translate | async)!\"\n fixed=\"start\"\n [width]=\"'80px'\"\n [padZero]=\"false\"\n ></ax-index-column>\n }\n @if (vm.selectedScopeActionsCount()) {\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n }\n @for (col of vm.columns(); track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer\n [expandHandler]=\"$index === 0 && vm.parentKey() ? true : false\"\n [caption]=\"(col.title | translate | async)!\"\n [node]=\"col.node()\"\n ></axp-widget-column-renderer>\n }\n }\n @if (getCommandRowItems().length) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"getCommandRowItems().length * 60 + 'px'\"\n [items]=\"getCommandRowItems()\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n }\n @if (dropdownRowItems().length) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-dropdown-command-column>\n }\n </ax-data-table>\n </div>\n }\n @if (vm.enabledListLayouts().includes('card') || vm.enabledListLayouts().includes('row')) {\n <axp-entity-master-list-card-list\n class=\"axp-entity-list-host w-full min-h-0 flex-1\"\n [class.hidden]=\"!vm.isCardHostLayout()\"\n [vm]=\"vm\"\n ></axp-entity-master-list-card-list>\n }\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$1.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: i3$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i2$1.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: AXBadgeModule }, { 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: AXPopoverModule }, { kind: "component", type: i6.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXActionSheetModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDialogModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i7.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i8.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i8.AXRowIndexColumnComponent, selector: "ax-index-column", inputs: ["width", "caption", "fixed", "footerTemplate", "padZero"] }, { kind: "component", type: i8.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i8.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i8.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "emptyStateTemplate", "emptyStateText", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type:
|
|
174
620
|
//
|
|
175
|
-
AXPWidgetCoreModule }, { kind: "component", type: i7$1.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "sortEnabled", "headerSortDirection", "headerSortPriority", "columnFixed", "cellTemplate", "headerTemplate"], outputs: ["sortToggle"] }, { kind: "ngmodule", type: AXPWidgetsModule }, { kind: "ngmodule", type: AXPAuthModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1
|
|
621
|
+
AXPWidgetCoreModule }, { kind: "component", type: i7$1.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "sortEnabled", "headerSortDirection", "headerSortPriority", "columnFixed", "cellTemplate", "headerTemplate"], outputs: ["sortToggle"] }, { kind: "ngmodule", type: AXPWidgetsModule }, { kind: "ngmodule", type: AXPAuthModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPEntityMasterListCardListComponent, selector: "axp-entity-master-list-card-list", inputs: ["vm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
176
622
|
}
|
|
177
623
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailListViewComponent, decorators: [{
|
|
178
624
|
type: Component,
|
|
@@ -200,14 +646,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
200
646
|
AXPWidgetsModule,
|
|
201
647
|
AXPAuthModule,
|
|
202
648
|
AXTranslationModule,
|
|
203
|
-
|
|
204
|
-
}],
|
|
649
|
+
AXPEntityMasterListCardListComponent,
|
|
650
|
+
], template: "<div class=\"flex p-2\">\n <div class=\"flex flex-col items-stretch gap-3 flex-1 overflow-auto min-h-72\">\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-between items-center\">\n <div class=\"flex justify-start items-center gap-4\">\n @if (vm.hasSelectedItems()) {\n <div class=\"flex gap-3 items-center h-10\">\n <span class=\"text-xl font-bold\">\n {{ vm.selectedItems().length }}\n {{ '@general:terms.items-selected' | translate | async }}\n </span>\n <span\n (click)=\"vm.clearSelection()\"\n class=\"text-sm text-primary-500 underline cursor-pointer\"\n >{{ '@general:actions.unselect.title' | translate | async }}</span\n >\n </div>\n } @else {\n @if (vm.hasInlineFilters() && !deviceService.isSmall()) {\n <div class=\"w-72\">\n <ax-search-box\n [placeholder]=\"\n ('@general:widgets.lookup.search' | translate | async) + vm.inlineFiltersPlaceholders().join(', ')\n \"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </div>\n }\n }\n </div>\n </div>\n <div class=\"flex items-center gap-3\">\n @if (showListDisplayModeControl()) {\n <div>\n <ax-button [iconOnly]=\"true\" #listDisplayButton [color]=\"'default'\">\n <i [class]=\"listDisplayModeButtonIcon()\"></i>\n </ax-button>\n <ax-popover\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"listDisplayButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #listDisplayModePopover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.interface.list-display' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-2\">\n <ax-button-item-list>\n @if (hasTableListDisplayOption()) {\n <ax-button-item\n [text]=\"('@general:terms.interface.table-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'table'\"\n (onClick)=\"setListDisplayMode('table')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-table\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n @if (hasTableListDisplayOption() && (hasCardListDisplayOption() || hasRowListDisplayOption())) {\n <ax-divider />\n }\n @if (hasCardListDisplayOption()) {\n <!-- ----- Card grid presentation ----- -->\n <ax-button-item\n [text]=\"('@general:terms.interface.card-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'card'\"\n (onClick)=\"setListDisplayMode('card')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grid-2\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n @if (hasRowListDisplayOption()) {\n <!-- ----- Horizontal row-list presentation ----- -->\n <ax-button-item\n [text]=\"('@general:terms.interface.row-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'row'\"\n (onClick)=\"setListDisplayMode('row')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grip-lines\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n @for (tr of toolbarPrimaryActions(); track $index) {\n <ax-button\n [text]=\"(tr.title | translate | async)!\"\n [color]=\"tr.color\"\n [disabled]=\"tr.disabled\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button>\n }\n @if (toolbarSecondaryActions().length) {\n <ax-button\n [text]=\"deviceService.isSmall() ? null : ('@general:terms.interface.actions' | translate | async)\"\n [color]=\"'default'\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (tr of toolbarSecondaryActions(); track $index) {\n <ng-container>\n @if (tr.separated && !$first) {\n <ax-divider></ax-divider>\n }\n <ax-button-item\n [text]=\"(tr.title | translate | async)!\"\n class=\"font-semibold text-{{ tr.color }}\"\n (onClick)=\"vm.executeCommand(tr.name)\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"tr.icon\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ng-container>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n </div>\n\n @if (vm.enabledListLayouts().includes('table')) {\n <div class=\"flex flex-1 pt-0 overflow-auto max-w-full w-full\" [class.hidden]=\"vm.activeListLayout() !== 'table'\">\n <ax-data-table\n #grid\n [showFooter]=\"false\"\n class=\"flex-1\"\n [paging]=\"true\"\n [fetchDataMode]=\"'manual'\"\n [parentField]=\"vm.parentKey()\"\n [loading]=\"{ enabled: true, animation: true }\"\n [dataSource]=\"vm.dataSource\"\n (selectedRowsChange)=\"handleSelectedRowsChange($event)\"\n (onRowDbClick)=\"handleRowDbClick($event)\"\n >\n @if (vm.showIndexColumn()) {\n <ax-index-column\n [caption]=\"('@general:terms.common.row-number' | translate | async)!\"\n fixed=\"start\"\n [width]=\"'80px'\"\n [padZero]=\"false\"\n ></ax-index-column>\n }\n @if (vm.selectedScopeActionsCount()) {\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n }\n @for (col of vm.columns(); track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer\n [expandHandler]=\"$index === 0 && vm.parentKey() ? true : false\"\n [caption]=\"(col.title | translate | async)!\"\n [node]=\"col.node()\"\n ></axp-widget-column-renderer>\n }\n }\n @if (getCommandRowItems().length) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"getCommandRowItems().length * 60 + 'px'\"\n [items]=\"getCommandRowItems()\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n }\n @if (dropdownRowItems().length) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-dropdown-command-column>\n }\n </ax-data-table>\n </div>\n }\n @if (vm.enabledListLayouts().includes('card') || vm.enabledListLayouts().includes('row')) {\n <axp-entity-master-list-card-list\n class=\"axp-entity-list-host w-full min-h-0 flex-1\"\n [class.hidden]=\"!vm.isCardHostLayout()\"\n [vm]=\"vm\"\n ></axp-entity-master-list-card-list>\n }\n </div>\n</div>\n" }]
|
|
651
|
+
}], ctorParameters: () => [{ type: i1$1.AXActionSheetService }, { type: i2.AXUnsubscriber }], propDecorators: { vm: [{
|
|
205
652
|
type: Input,
|
|
206
653
|
args: ['viewModel']
|
|
207
654
|
}], grid: [{
|
|
208
655
|
type: ViewChild,
|
|
209
|
-
args: ['grid'
|
|
210
|
-
}] } });
|
|
656
|
+
args: ['grid']
|
|
657
|
+
}], listDisplayModePopover: [{ type: i0.ViewChild, args: ['listDisplayModePopover', { isSignal: true }] }] } });
|
|
211
658
|
|
|
212
659
|
//#region ---- Constants ----
|
|
213
660
|
const ROOT_NODE_ID = 'all';
|
|
@@ -784,7 +1231,7 @@ class AXPEntityCategoryComponent {
|
|
|
784
1231
|
filters: [...viewFilters, ...categoryFilters],
|
|
785
1232
|
logic: 'and',
|
|
786
1233
|
});
|
|
787
|
-
this.vm().
|
|
1234
|
+
this.vm().events$.next({ action: 'refresh', meta: { resetPagination: true } });
|
|
788
1235
|
}
|
|
789
1236
|
/**
|
|
790
1237
|
* Handles node toggle events (expansion/collapse)
|
|
@@ -1264,7 +1711,7 @@ class AXPEntityCategoryComponent {
|
|
|
1264
1711
|
this.isLoading.set(false);
|
|
1265
1712
|
}
|
|
1266
1713
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1267
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityCategoryComponent, isStandalone: true, selector: "axp-entity-category", inputs: { vm: { classPropertyName: "vm", publicName: "vm", isSignal: true, isRequired: true, transformFunction: null }, searchValue: { classPropertyName: "searchValue", publicName: "searchValue", isSignal: true, isRequired: false, transformFunction: null }, selectMode: { classPropertyName: "selectMode", publicName: "selectMode", isSignal: true, isRequired: false, transformFunction: null }, selectionBehavior: { classPropertyName: "selectionBehavior", publicName: "selectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, dragArea: { classPropertyName: "dragArea", publicName: "dragArea", isSignal: true, isRequired: false, transformFunction: null }, dragBehavior: { classPropertyName: "dragBehavior", publicName: "dragBehavior", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: "showIcons", publicName: "showIcons", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: "showChildrenBadge", publicName: "showChildrenBadge", isSignal: true, isRequired: false, transformFunction: null }, expandedIcon: { classPropertyName: "expandedIcon", publicName: "expandedIcon", isSignal: true, isRequired: false, transformFunction: null }, collapsedIcon: { classPropertyName: "collapsedIcon", publicName: "collapsedIcon", isSignal: true, isRequired: false, transformFunction: null }, indentSize: { classPropertyName: "indentSize", publicName: "indentSize", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, searchWithChildren: { classPropertyName: "searchWithChildren", publicName: "searchWithChildren", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, isSignal: true }], ngImport: i0, template: "<axp-layout-header>\n <axp-layout-title>{{\n vm().entityDef.category?.title || '@general:terms.classification.category'\n | translate\n | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <div class=\"flex flex-col gap-1 w-full\">\n <ax-search-box\n (onValueChanged)=\"handleCategorySearchChange($event)\"\n [delayTime]=\"300\"\n [placeholder]=\"\n '@general:terms.interface.category.search.placeholder'\n | translate\n | async\n \"\n >\n </ax-search-box>\n @if (isSearching() && currentSearchValue().trim()) {\n <div class=\"text-xs text-muted flex items-center gap-1\">\n <span>{{\n '@general:terms.interface.category.search.searching'\n | translate\n | async\n }}</span>\n </div>\n } @else if (currentSearchValue().trim() && !isSearching()) {\n <div class=\"text-xs text-muted flex items-center gap-1\">\n @if (searchResultCount() > 0) {\n <span>{{ resultsFoundText() }}</span>\n }\n </div>\n }\n </div>\n </axp-layout-toolbar>\n</axp-layout-header>\n<axp-layout-content>\n @if (isLoading()) {\n <div class=\"p-4 flex flex-col gap-3\">\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n </div>\n } @else if (showNoSearchResults()) {\n <div class=\"__empty-state\">\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n '@general:terms.interface.category.search.no-results-found.title'\n \"\n [description]=\"\n '@general:terms.interface.category.search.no-results-found.description'\n \"\n >\n </axp-state-message>\n </div>\n } @else if (treeData) {\n <div class=\"px-4 max-h-[calc(100vh-250px)] overflow-auto\">\n <ax-tree-view\n [datasource]=\"datasource\"\n [selectMode]=\"selectMode()\"\n [selectionBehavior]=\"selectionBehavior()\"\n [dragArea]=\"dragArea()\"\n [dragBehavior]=\"dragBehavior()\"\n [showIcons]=\"showIcons()\"\n [showChildrenBadge]=\"showChildrenBadge()\"\n [expandedIcon]=\"expandedIcon()\"\n [collapsedIcon]=\"collapsedIcon()\"\n [indentSize]=\"indentSize()\"\n [look]=\"look()\"\n [titleField]=\"textField()\"\n [idField]=\"valueField()\"\n [expandOnDoubleClick]=\"true\"\n [nodeTemplate]=\"itemTemplate\"\n (onNodeToggle)=\"onNodeToggle($event)\"\n (onNodeClick)=\"handleNodeClick($event.node)\"\n #tree\n >\n </ax-tree-view>\n </div>\n } @else {\n <div class=\"__empty-state\">\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@general:terms.interface.category.search.no-records.title'\"\n [description]=\"\n '@general:terms.interface.category.search.no-records.description'\n \"\n >\n @if (!categoryReadonly()) {\n <ax-button\n slot=\"actions\"\n (onClick)=\"handleCreateRootClick($event)\"\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.add-new.title' | translate | async\"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button>\n }\n </axp-state-message>\n </div>\n }\n\n <ng-template #itemTemplate let-node=\"node\" let-level=\"level\">\n @let item = node.data || node;\n @let textField = vm().entityDef.category?.textField || 'title';\n @let valueField = vm().entityDef.category?.valueField || 'id';\n @let itemId = item[valueField] || node.id;\n @let rawLabel = item[textField] || node.title;\n @let itemTitle = rawLabel | translate | async;\n <div class=\"flex items-center justify-between w-full gap-1 overflow-hidden\">\n <div class=\"flex items-center gap-2 min-w-0\">\n <ax-icon\n class=\"fas fa-folder\"\n [style.color]=\"\n item.color ?? 'rgba(var(--ax-sys-color-warning-500), 1)'\n \"\n ></ax-icon>\n <span class=\"truncate\">\n @if (itemId === 'all') {\n {{ categoryTreeRootTitleI18nKey | translate | async }}\n } @else {\n {{ itemTitle }}\n }\n </span>\n </div>\n @if (itemId && itemId !== 'all' && !categoryReadonly()) {\n <div class=\"flex items-center gap-1 me-2\">\n <ax-button\n class=\"ax-xs\"\n color=\"default\"\n look=\"none\"\n (onClick)=\"$event.nativeEvent.stopPropagation()\"\n >\n <ax-icon class=\"fas fa-ellipsis-v\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"handleCreateChildClick(node, $event)\"\n look=\"blank\"\n color=\"default\"\n [text]=\"\n ('@general:actions.add-new-child.title'\n | translate\n | async)!\n \"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button-item>\n <ax-button-item\n (onClick)=\"handleEditNodeClick(node, $event)\"\n look=\"blank\"\n [text]=\"('@general:actions.edit.title' | translate | async)!\"\n >\n <ax-icon class=\"fas fa-pen\"></ax-icon>\n </ax-button-item>\n <ax-button-item\n (onClick)=\"handleDeleteNodeClick(node, $event)\"\n color=\"danger\"\n look=\"blank\"\n [text]=\"\n ('@general:actions.delete.title' | translate | async)!\n \"\n >\n <ax-icon class=\"fas fa-trash\"></ax-icon>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n } @else if (itemId === 'all' && !categoryReadonly()) {\n <div class=\"flex items-center gap-1 me-2\">\n <ax-button\n class=\"ax-xs\"\n (onClick)=\"handleCreateRootClick($event)\"\n look=\"none\"\n color=\"default\"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </ng-template>\n</axp-layout-content>\n", styles: ["/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTreeViewModule }, { kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "nodeTemplate", "idField", "titleField", "tooltipField", "iconField", "expandedField", "selectedField", "indeterminateField", "disabledField", "hiddenField", "childrenField", "childrenCountField", "dataField", "inheritDisabled", "expandOnDoubleClick", "doubleClickDuration", "tooltipDelay", "controlledSelection", "selectedIds"], outputs: ["datasourceChange", "selectedIdsChange", "onBeforeDrop", "onNodeToggle", "onNodeSelect", "onNodeDoubleClick", "onNodeClick", "onSelectionChange", "onOrderChange", "onMoveChange", "onItemsChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i2$2.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { 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: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutToolbarComponent, selector: "axp-layout-toolbar" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { 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: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1714
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityCategoryComponent, isStandalone: true, selector: "axp-entity-category", inputs: { vm: { classPropertyName: "vm", publicName: "vm", isSignal: true, isRequired: true, transformFunction: null }, searchValue: { classPropertyName: "searchValue", publicName: "searchValue", isSignal: true, isRequired: false, transformFunction: null }, selectMode: { classPropertyName: "selectMode", publicName: "selectMode", isSignal: true, isRequired: false, transformFunction: null }, selectionBehavior: { classPropertyName: "selectionBehavior", publicName: "selectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, dragArea: { classPropertyName: "dragArea", publicName: "dragArea", isSignal: true, isRequired: false, transformFunction: null }, dragBehavior: { classPropertyName: "dragBehavior", publicName: "dragBehavior", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: "showIcons", publicName: "showIcons", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: "showChildrenBadge", publicName: "showChildrenBadge", isSignal: true, isRequired: false, transformFunction: null }, expandedIcon: { classPropertyName: "expandedIcon", publicName: "expandedIcon", isSignal: true, isRequired: false, transformFunction: null }, collapsedIcon: { classPropertyName: "collapsedIcon", publicName: "collapsedIcon", isSignal: true, isRequired: false, transformFunction: null }, indentSize: { classPropertyName: "indentSize", publicName: "indentSize", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, searchWithChildren: { classPropertyName: "searchWithChildren", publicName: "searchWithChildren", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, isSignal: true }], ngImport: i0, template: "<axp-layout-header>\n <axp-layout-title>{{\n vm().entityDef.category?.title || '@general:terms.classification.category'\n | translate\n | async\n }}</axp-layout-title>\n <axp-layout-toolbar>\n <div class=\"flex flex-col gap-1 w-full\">\n <ax-search-box\n (onValueChanged)=\"handleCategorySearchChange($event)\"\n [delayTime]=\"300\"\n [placeholder]=\"\n '@general:terms.interface.category.search.placeholder'\n | translate\n | async\n \"\n >\n </ax-search-box>\n @if (isSearching() && currentSearchValue().trim()) {\n <div class=\"text-xs text-muted flex items-center gap-1\">\n <span>{{\n '@general:terms.interface.category.search.searching'\n | translate\n | async\n }}</span>\n </div>\n } @else if (currentSearchValue().trim() && !isSearching()) {\n <div class=\"text-xs text-muted flex items-center gap-1\">\n @if (searchResultCount() > 0) {\n <span>{{ resultsFoundText() }}</span>\n }\n </div>\n }\n </div>\n </axp-layout-toolbar>\n</axp-layout-header>\n<axp-layout-content>\n @if (isLoading()) {\n <div class=\"p-4 flex flex-col gap-3\">\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"w-full h-6 rounded-md\"></ax-skeleton>\n </div>\n } @else if (showNoSearchResults()) {\n <div class=\"__empty-state\">\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n '@general:terms.interface.category.search.no-results-found.title'\n \"\n [description]=\"\n '@general:terms.interface.category.search.no-results-found.description'\n \"\n >\n </axp-state-message>\n </div>\n } @else if (treeData) {\n <div class=\"px-4 max-h-[calc(100vh-250px)] overflow-auto\">\n <ax-tree-view\n [datasource]=\"datasource\"\n [selectMode]=\"selectMode()\"\n [selectionBehavior]=\"selectionBehavior()\"\n [dragArea]=\"dragArea()\"\n [dragBehavior]=\"dragBehavior()\"\n [showIcons]=\"showIcons()\"\n [showChildrenBadge]=\"showChildrenBadge()\"\n [expandedIcon]=\"expandedIcon()\"\n [collapsedIcon]=\"collapsedIcon()\"\n [indentSize]=\"indentSize()\"\n [look]=\"look()\"\n [titleField]=\"textField()\"\n [idField]=\"valueField()\"\n [expandOnDoubleClick]=\"true\"\n [nodeTemplate]=\"itemTemplate\"\n (onNodeToggle)=\"onNodeToggle($event)\"\n (onNodeClick)=\"handleNodeClick($event.node)\"\n #tree\n >\n </ax-tree-view>\n </div>\n } @else {\n <div class=\"__empty-state\">\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@general:terms.interface.category.search.no-records.title'\"\n [description]=\"\n '@general:terms.interface.category.search.no-records.description'\n \"\n >\n @if (!categoryReadonly()) {\n <ax-button\n slot=\"actions\"\n (onClick)=\"handleCreateRootClick($event)\"\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.add-new.title' | translate | async\"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button>\n }\n </axp-state-message>\n </div>\n }\n\n <ng-template #itemTemplate let-node=\"node\" let-level=\"level\">\n @let item = node.data || node;\n @let textField = vm().entityDef.category?.textField || 'title';\n @let valueField = vm().entityDef.category?.valueField || 'id';\n @let itemId = item[valueField] || node.id;\n @let rawLabel = item[textField] || node.title;\n @let itemTitle = rawLabel | translate | async;\n <div class=\"flex items-center justify-between w-full gap-1 overflow-hidden\">\n <div class=\"flex items-center gap-2 min-w-0\">\n <ax-icon\n class=\"fas fa-folder\"\n [style.color]=\"\n item.color ?? 'rgba(var(--ax-sys-color-warning-500), 1)'\n \"\n ></ax-icon>\n <span class=\"truncate\">\n @if (itemId === 'all') {\n {{ categoryTreeRootTitleI18nKey | translate | async }}\n } @else {\n {{ itemTitle }}\n }\n </span>\n </div>\n @if (itemId && itemId !== 'all' && !categoryReadonly()) {\n <div class=\"flex items-center gap-1 me-2\">\n <ax-button\n class=\"ax-xs\"\n color=\"default\"\n look=\"none\"\n (onClick)=\"$event.nativeEvent.stopPropagation()\"\n >\n <ax-icon class=\"fas fa-ellipsis-v\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"handleCreateChildClick(node, $event)\"\n look=\"blank\"\n color=\"default\"\n [text]=\"\n ('@general:actions.add-new-child.title'\n | translate\n | async)!\n \"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button-item>\n <ax-button-item\n (onClick)=\"handleEditNodeClick(node, $event)\"\n look=\"blank\"\n [text]=\"('@general:actions.edit.title' | translate | async)!\"\n >\n <ax-icon class=\"fas fa-pen\"></ax-icon>\n </ax-button-item>\n <ax-button-item\n (onClick)=\"handleDeleteNodeClick(node, $event)\"\n color=\"danger\"\n look=\"blank\"\n [text]=\"\n ('@general:actions.delete.title' | translate | async)!\n \"\n >\n <ax-icon class=\"fas fa-trash\"></ax-icon>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n } @else if (itemId === 'all' && !categoryReadonly()) {\n <div class=\"flex items-center gap-1 me-2\">\n <ax-button\n class=\"ax-xs\"\n (onClick)=\"handleCreateRootClick($event)\"\n look=\"none\"\n color=\"default\"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </ng-template>\n</axp-layout-content>\n", styles: ["/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTreeViewModule }, { kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "alternate", "nodeTemplate", "idField", "titleField", "tooltipField", "iconField", "expandedField", "selectedField", "indeterminateField", "disabledField", "hiddenField", "childrenField", "childrenCountField", "dataField", "inheritDisabled", "expandOnDoubleClick", "doubleClickDuration", "tooltipDelay", "controlledSelection", "selectedIds"], outputs: ["datasourceChange", "selectedIdsChange", "onBeforeDrop", "onNodeToggle", "onNodeSelect", "onNodeDoubleClick", "onNodeClick", "onSelectionChange", "onOrderChange", "onMoveChange", "onItemsChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i2$2.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { 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: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i7.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutToolbarComponent, selector: "axp-layout-toolbar" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$1.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: i3$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { 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: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1268
1715
|
}
|
|
1269
1716
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityCategoryComponent, decorators: [{
|
|
1270
1717
|
type: Component,
|
|
@@ -1334,19 +1781,23 @@ class AXPEntityMasterToolbarViewComponent {
|
|
|
1334
1781
|
...(ngDevMode ? [{ debugName: "selectedViewQuery" }] : /* istanbul ignore next */ []));
|
|
1335
1782
|
this.isFiltersDirty = computed(() => !isEqual(this.vm.filterQueries(), this.previousFilterQueries()), /* @ts-ignore */
|
|
1336
1783
|
...(ngDevMode ? [{ debugName: "isFiltersDirty" }] : /* istanbul ignore next */ []));
|
|
1337
|
-
this.showListDisplayModeControl = computed(() => this.vm.enabledListLayouts().
|
|
1784
|
+
this.showListDisplayModeControl = computed(() => this.vm.enabledListLayouts().length > 1, /* @ts-ignore */
|
|
1338
1785
|
...(ngDevMode ? [{ debugName: "showListDisplayModeControl" }] : /* istanbul ignore next */ []));
|
|
1339
1786
|
this.listDisplayMode = computed(() => this.vm.listDisplayMode(), /* @ts-ignore */
|
|
1340
1787
|
...(ngDevMode ? [{ debugName: "listDisplayMode" }] : /* istanbul ignore next */ []));
|
|
1341
1788
|
this.hasTableListDisplayOption = computed(() => this.vm.enabledListLayouts().includes('table'), /* @ts-ignore */
|
|
1342
1789
|
...(ngDevMode ? [{ debugName: "hasTableListDisplayOption" }] : /* istanbul ignore next */ []));
|
|
1790
|
+
this.hasCardListDisplayOption = computed(() => this.vm.enabledListLayouts().includes('card'), /* @ts-ignore */
|
|
1791
|
+
...(ngDevMode ? [{ debugName: "hasCardListDisplayOption" }] : /* istanbul ignore next */ []));
|
|
1792
|
+
this.hasRowListDisplayOption = computed(() => this.vm.enabledListLayouts().includes('row'), /* @ts-ignore */
|
|
1793
|
+
...(ngDevMode ? [{ debugName: "hasRowListDisplayOption" }] : /* istanbul ignore next */ []));
|
|
1343
1794
|
this.listDisplayModeButtonIcon = computed(() => {
|
|
1344
1795
|
switch (this.listDisplayMode()) {
|
|
1345
1796
|
case 'table':
|
|
1346
1797
|
return 'fa-light fa-table';
|
|
1347
|
-
case '
|
|
1798
|
+
case 'row':
|
|
1348
1799
|
return 'fa-light fa-grip-lines';
|
|
1349
|
-
case 'card
|
|
1800
|
+
case 'card':
|
|
1350
1801
|
return 'fa-light fa-grid-2';
|
|
1351
1802
|
}
|
|
1352
1803
|
}, /* @ts-ignore */
|
|
@@ -1432,630 +1883,170 @@ class AXPEntityMasterToolbarViewComponent {
|
|
|
1432
1883
|
waitForQueryFiltersSync() {
|
|
1433
1884
|
return new Promise((resolve) => {
|
|
1434
1885
|
afterNextRender(() => {
|
|
1435
|
-
queueMicrotask(() => resolve());
|
|
1436
|
-
}, { injector: this.injector });
|
|
1437
|
-
});
|
|
1438
|
-
}
|
|
1439
|
-
async loadSettings() {
|
|
1440
|
-
const filterTriggerMode = await this.settingsService.get(AXPCommonSettings.EntityFilterApplyMode);
|
|
1441
|
-
this.filterTriggerMode = (filterTriggerMode?.value ?? 'auto');
|
|
1442
|
-
}
|
|
1443
|
-
setListDisplayMode(mode) {
|
|
1444
|
-
traceEntityMasterList('toolbar', 'setListDisplayMode clicked', () => ({
|
|
1445
|
-
mode,
|
|
1446
|
-
viewName: this.vm.view().name,
|
|
1447
|
-
previousLayout: this.vm.activeListLayout(),
|
|
1448
|
-
previousDisplayMode: this.vm.listDisplayMode(),
|
|
1449
|
-
}));
|
|
1450
|
-
this.vm.setListDisplayMode(mode);
|
|
1451
|
-
this.listDisplayModePopover()?.close();
|
|
1452
|
-
}
|
|
1453
|
-
scheduleApply() {
|
|
1454
|
-
clearTimeout(this.applyTimer);
|
|
1455
|
-
this.applyTimer = setTimeout(() => {
|
|
1456
|
-
this.vm.applyFilterAndSort();
|
|
1457
|
-
}, 50);
|
|
1458
|
-
}
|
|
1459
|
-
async onViewChanged(view) {
|
|
1460
|
-
traceEntityMasterList('toolbar', 'view tab changed', () => ({
|
|
1461
|
-
previousViewName: this.vm.view().name,
|
|
1462
|
-
nextViewName: view.name,
|
|
1463
|
-
activeListLayout: this.vm.activeListLayout(),
|
|
1464
|
-
dataSource: buildDataSourceTraceSnapshot(this.vm.dataSource),
|
|
1465
|
-
}));
|
|
1466
|
-
await this.vm.setView(view.name);
|
|
1467
|
-
if (axpIsEntityListRoute(this.router)) {
|
|
1468
|
-
axpReplaceEntityListRouteQueryParams(this.router, { view: view.name });
|
|
1469
|
-
// Prevent queryParamSub from re-applying the same view change while initial load runs.
|
|
1470
|
-
this.vm.markRouteQueryContextSynced(this.activeRoute.snapshot.queryParamMap, {
|
|
1471
|
-
view: view.name,
|
|
1472
|
-
});
|
|
1473
|
-
}
|
|
1474
|
-
await this.runInitialListLoad();
|
|
1475
|
-
traceEntityMasterList('toolbar', 'view tab change handled', () => ({
|
|
1476
|
-
viewName: this.vm.view().name,
|
|
1477
|
-
activeListLayout: this.vm.activeListLayout(),
|
|
1478
|
-
filterCount: this.vm.filterQueries().length,
|
|
1479
|
-
dataSource: buildDataSourceTraceSnapshot(this.vm.dataSource),
|
|
1480
|
-
}));
|
|
1481
|
-
}
|
|
1482
|
-
#effect;
|
|
1483
|
-
setInitialFiltersFromSettingsOrView() {
|
|
1484
|
-
const saved = this.vm.filterQueries();
|
|
1485
|
-
this.previousFilterQueries.set(saved);
|
|
1486
|
-
const viewConditions = this.vm.view().conditions.map((c) => c.name);
|
|
1487
|
-
if (saved && saved.length) {
|
|
1488
|
-
this.initialFilters.set(saved.map((s) => ({ ...s, hidden: viewConditions.includes(s.field) })));
|
|
1489
|
-
return;
|
|
1490
|
-
}
|
|
1491
|
-
this.initialFilters.set(this.vm.view().conditions.map((c) => ({
|
|
1492
|
-
field: c.name,
|
|
1493
|
-
operator: c.operator,
|
|
1494
|
-
value: c.value,
|
|
1495
|
-
hidden: true,
|
|
1496
|
-
})));
|
|
1497
|
-
}
|
|
1498
|
-
onFiltersChanged(filters) {
|
|
1499
|
-
if (this.isInitializing) {
|
|
1500
|
-
this.vm.filterQueries.set(filters);
|
|
1501
|
-
this.previousFilterQueries.set(filters);
|
|
1502
|
-
return;
|
|
1503
|
-
}
|
|
1504
|
-
if (!this.filtersReady()) {
|
|
1505
|
-
return;
|
|
1506
|
-
}
|
|
1507
|
-
this.vm.filterQueries.set(filters);
|
|
1508
|
-
if (this.filterTriggerMode === 'auto') {
|
|
1509
|
-
void this.applyFilters();
|
|
1510
|
-
}
|
|
1511
|
-
}
|
|
1512
|
-
async applyFilters() {
|
|
1513
|
-
const persistableFilters = this.vm.getPersistableFilterQueries();
|
|
1514
|
-
this.previousFilterQueries.set(this.vm.filterQueries());
|
|
1515
|
-
await this.vm.saveSettings('filters', persistableFilters);
|
|
1516
|
-
this.stripFiltersFromRouteQueryParam();
|
|
1517
|
-
await this.vm.applyFilterAndSort();
|
|
1518
|
-
}
|
|
1519
|
-
/** Removes `filters` from the entity list URL; filter state is persisted in user settings only. */
|
|
1520
|
-
stripFiltersFromRouteQueryParam() {
|
|
1521
|
-
if (!axpIsEntityListRoute(this.router)) {
|
|
1522
|
-
return;
|
|
1523
|
-
}
|
|
1524
|
-
const url = this.router.url;
|
|
1525
|
-
if (!url.includes('filters=')) {
|
|
1526
|
-
return;
|
|
1527
|
-
}
|
|
1528
|
-
// Mark the post-strip key first so queryParamMap emission does not trigger an extra list reload.
|
|
1529
|
-
this.vm.markRouteQueryContextSynced(this.activeRoute.snapshot.queryParamMap, { filters: null });
|
|
1530
|
-
axpReplaceEntityListRouteQueryParams(this.router, { filters: null });
|
|
1531
|
-
}
|
|
1532
|
-
onSortQueriesChange(e) {
|
|
1533
|
-
if (this.isInitializing || this.pendingInitialSorts) {
|
|
1534
|
-
this.pendingInitialSorts = false;
|
|
1535
|
-
return;
|
|
1536
|
-
}
|
|
1537
|
-
const sortableByName = new Map(this.vm.sortableFields().map((f) => [f.name, f]));
|
|
1538
|
-
const nextSortedFields = e
|
|
1539
|
-
.filter((s) => s.dir && sortableByName.has(s.name))
|
|
1540
|
-
.map((s) => ({
|
|
1541
|
-
name: s.name,
|
|
1542
|
-
title: sortableByName.get(s.name).title,
|
|
1543
|
-
dir: s.dir,
|
|
1544
|
-
}));
|
|
1545
|
-
const sortSignature = (fields) => fields.map((s) => `${s.name}:${s.dir ?? ''}`).join('|');
|
|
1546
|
-
if (sortSignature(nextSortedFields) === sortSignature(this.vm.sortedFields())) {
|
|
1547
|
-
return;
|
|
1548
|
-
}
|
|
1549
|
-
this.vm.sortedFields.set(nextSortedFields);
|
|
1550
|
-
this.vm.saveSettings('sorts', e);
|
|
1551
|
-
this.scheduleApply();
|
|
1552
|
-
}
|
|
1553
|
-
onColumnsChange(columns) {
|
|
1554
|
-
const keyOf = (c) => c.column?.options?.dataPath ?? c.name;
|
|
1555
|
-
this.vm.columns.update((prev) => {
|
|
1556
|
-
const byKey = new Map(prev.map((c) => [keyOf(c), c]));
|
|
1557
|
-
return columns
|
|
1558
|
-
.map((newColumn) => {
|
|
1559
|
-
const existing = byKey.get(keyOf(newColumn));
|
|
1560
|
-
if (!existing) {
|
|
1561
|
-
return null;
|
|
1562
|
-
}
|
|
1563
|
-
return new AXPEntityListViewColumnViewModel(existing.property, {
|
|
1564
|
-
...existing.column,
|
|
1565
|
-
options: {
|
|
1566
|
-
...existing.column.options,
|
|
1567
|
-
visible: newColumn.visible,
|
|
1568
|
-
},
|
|
1569
|
-
});
|
|
1570
|
-
})
|
|
1571
|
-
.filter((c) => c != null);
|
|
1572
|
-
});
|
|
1573
|
-
// Persist column order/visibility (client-only; do not re-query on visibility toggle)
|
|
1574
|
-
this.vm.onColumnsChanged(this.vm.columns());
|
|
1575
|
-
}
|
|
1576
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1577
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityMasterToolbarViewComponent, isStandalone: true, selector: "axp-entity-master-toolbar-view", inputs: { vm: ["viewModel", "vm"] }, host: { classAttribute: "w-full" }, viewQueries: [{ propertyName: "listDisplayModePopover", first: true, predicate: ["listDisplayModePopover"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- <axp-entity-view-toolbar [viewModel]=\"vm\"></axp-entity-view-toolbar> -->\n<axp-query-views\n id=\"axp-toolbar-view-selector\"\n [views]=\"viewQueries()\"\n [selectedView]=\"selectedViewQuery()\"\n (selectedViewChange)=\"onViewChanged($event)\"\n></axp-query-views>\n<div class=\"flex items-center gap-2 border-b border-light w-full\">\n <!-- <axp-entity-filter-toolbar [viewModel]=\"vm\"></axp-entity-filter-toolbar> -->\n @if (filtersReady()) {\n <axp-query-filters\n id=\"axp-toolbar-filters\"\n [filtersDefinitions]=\"filtersDefinitions()\"\n [initialFilters]=\"initialFilters()\"\n [quickSearch]=\"true\"\n (onFiltersChanged)=\"onFiltersChanged($event)\"\n ></axp-query-filters>\n }\n\n <div class=\"flex items-center gap-2 md:gap-2\">\n @if (filterTriggerMode === 'manual' && isFiltersDirty()) {\n <ax-button\n id=\"axp-toolbar-btn-filter\"\n [title]=\"'@general:actions.apply.title'\"\n [iconOnly]=\"true\"\n #filterButton\n [color]=\"'primary'\"\n (onClick)=\"applyFilters()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-search\"></i>\n </ax-prefix>\n </ax-button>\n }\n @if (vm.activeListLayout() === 'table') {\n <div>\n <ax-button id=\"axp-toolbar-btn-columns\" [iconOnly]=\"true\" #columnButton [color]=\"'default'\">\n <i class=\"fa-light fa-table-columns\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-columns\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"columnButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #columnsPopover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.common.columns' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-4\">\n <axp-query-columns [columns]=\"vm.columns()\" (columnsChange)=\"onColumnsChange($event)\"></axp-query-columns>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n\n @if (vm.canSort()) {\n <div>\n <ax-button id=\"axp-toolbar-btn-sort\" [iconOnly]=\"true\" [text]=\"'Sorts'\" #sortButton [color]=\"'default'\">\n <i class=\"fa-light fa-sort-amount-up\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-sort\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"sortButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #popover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.common.sorts' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-4\">\n <!-- <axp-list-view-option-sorting [viewModel]=\"vm\"></axp-list-view-option-sorting> -->\n <axp-query-sorts\n [sortDefinitions]=\"sortDefinitions()\"\n (sortQueriesChange)=\"onSortQueriesChange($event)\"\n [initialSortQueries]=\"sortQueries()\"\n ></axp-query-sorts>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n @if (deviceService.isSmall()) {\n <ax-button\n id=\"axp-toolbar-btn-category\"\n (onClick)=\"parent.toggleCategoryDrawer()\"\n [iconOnly]=\"true\"\n [color]=\"'default'\"\n >\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n\n @if (showListDisplayModeControl()) {\n <div>\n <ax-button id=\"axp-toolbar-btn-list-display\" [iconOnly]=\"true\" #listDisplayButton [color]=\"'default'\">\n <i [class]=\"listDisplayModeButtonIcon()\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-list-display\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"listDisplayButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #listDisplayModePopover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.interface.list-display' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-2\">\n <ax-button-item-list>\n @if (hasTableListDisplayOption()) {\n <ax-button-item\n [text]=\"('@general:terms.interface.table-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'table'\"\n (onClick)=\"setListDisplayMode('table')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-table\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n @if (hasTableListDisplayOption()) {\n <ax-divider />\n }\n <ax-button-item\n [text]=\"('@general:terms.interface.card-compact-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'card-compact'\"\n (onClick)=\"setListDisplayMode('card-compact')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grip-lines\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"('@general:terms.interface.card-expanded-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'card-expanded'\"\n (onClick)=\"setListDisplayMode('card-expanded')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grid-2\"></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.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: AXDropdownModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPQueryFiltersComponent, selector: "axp-query-filters", inputs: ["filtersDefinitions", "initialFilters", "quickSearch"], outputs: ["onFiltersChanged"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i3$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXPQuerySortsComponent, selector: "axp-query-sorts", inputs: ["sortDefinitions", "initialSortQueries"], outputs: ["sortDefinitionsChange", "sortQueriesChange"] }, { kind: "component", type: AXPQueryViewsComponent, selector: "axp-query-views", inputs: ["views", "selectedView"], outputs: ["viewsChange", "selectedViewChange"] }, { kind: "component", type: AXPQueryColumnsComponent, selector: "axp-query-columns", inputs: ["columns"], outputs: ["columnsChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1578
|
-
}
|
|
1579
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, decorators: [{
|
|
1580
|
-
type: Component,
|
|
1581
|
-
args: [{ selector: 'axp-entity-master-toolbar-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
1582
|
-
AsyncPipe,
|
|
1583
|
-
AXButtonModule,
|
|
1584
|
-
AXDecoratorModule,
|
|
1585
|
-
AXDropdownModule,
|
|
1586
|
-
AXTranslationModule,
|
|
1587
|
-
AXPQueryFiltersComponent,
|
|
1588
|
-
AXPopoverModule,
|
|
1589
|
-
AXPQuerySortsComponent,
|
|
1590
|
-
AXPQueryViewsComponent,
|
|
1591
|
-
AXPQueryColumnsComponent,
|
|
1592
|
-
], host: {
|
|
1593
|
-
class: 'w-full',
|
|
1594
|
-
}, template: "<!-- <axp-entity-view-toolbar [viewModel]=\"vm\"></axp-entity-view-toolbar> -->\n<axp-query-views\n id=\"axp-toolbar-view-selector\"\n [views]=\"viewQueries()\"\n [selectedView]=\"selectedViewQuery()\"\n (selectedViewChange)=\"onViewChanged($event)\"\n></axp-query-views>\n<div class=\"flex items-center gap-2 border-b border-light w-full\">\n <!-- <axp-entity-filter-toolbar [viewModel]=\"vm\"></axp-entity-filter-toolbar> -->\n @if (filtersReady()) {\n <axp-query-filters\n id=\"axp-toolbar-filters\"\n [filtersDefinitions]=\"filtersDefinitions()\"\n [initialFilters]=\"initialFilters()\"\n [quickSearch]=\"true\"\n (onFiltersChanged)=\"onFiltersChanged($event)\"\n ></axp-query-filters>\n }\n\n <div class=\"flex items-center gap-2 md:gap-2\">\n @if (filterTriggerMode === 'manual' && isFiltersDirty()) {\n <ax-button\n id=\"axp-toolbar-btn-filter\"\n [title]=\"'@general:actions.apply.title'\"\n [iconOnly]=\"true\"\n #filterButton\n [color]=\"'primary'\"\n (onClick)=\"applyFilters()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-search\"></i>\n </ax-prefix>\n </ax-button>\n }\n @if (vm.activeListLayout() === 'table') {\n <div>\n <ax-button id=\"axp-toolbar-btn-columns\" [iconOnly]=\"true\" #columnButton [color]=\"'default'\">\n <i class=\"fa-light fa-table-columns\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-columns\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"columnButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #columnsPopover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.common.columns' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-4\">\n <axp-query-columns [columns]=\"vm.columns()\" (columnsChange)=\"onColumnsChange($event)\"></axp-query-columns>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n\n @if (vm.canSort()) {\n <div>\n <ax-button id=\"axp-toolbar-btn-sort\" [iconOnly]=\"true\" [text]=\"'Sorts'\" #sortButton [color]=\"'default'\">\n <i class=\"fa-light fa-sort-amount-up\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-sort\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"sortButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #popover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.common.sorts' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-4\">\n <!-- <axp-list-view-option-sorting [viewModel]=\"vm\"></axp-list-view-option-sorting> -->\n <axp-query-sorts\n [sortDefinitions]=\"sortDefinitions()\"\n (sortQueriesChange)=\"onSortQueriesChange($event)\"\n [initialSortQueries]=\"sortQueries()\"\n ></axp-query-sorts>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n @if (deviceService.isSmall()) {\n <ax-button\n id=\"axp-toolbar-btn-category\"\n (onClick)=\"parent.toggleCategoryDrawer()\"\n [iconOnly]=\"true\"\n [color]=\"'default'\"\n >\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n\n @if (showListDisplayModeControl()) {\n <div>\n <ax-button id=\"axp-toolbar-btn-list-display\" [iconOnly]=\"true\" #listDisplayButton [color]=\"'default'\">\n <i [class]=\"listDisplayModeButtonIcon()\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-list-display\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"listDisplayButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #listDisplayModePopover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.interface.list-display' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-2\">\n <ax-button-item-list>\n @if (hasTableListDisplayOption()) {\n <ax-button-item\n [text]=\"('@general:terms.interface.table-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'table'\"\n (onClick)=\"setListDisplayMode('table')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-table\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n @if (hasTableListDisplayOption()) {\n <ax-divider />\n }\n <ax-button-item\n [text]=\"('@general:terms.interface.card-compact-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'card-compact'\"\n (onClick)=\"setListDisplayMode('card-compact')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grip-lines\"></i>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"('@general:terms.interface.card-expanded-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'card-expanded'\"\n (onClick)=\"setListDisplayMode('card-expanded')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grid-2\"></i>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n </div>\n</div>\n" }]
|
|
1595
|
-
}], propDecorators: { vm: [{
|
|
1596
|
-
type: Input,
|
|
1597
|
-
args: ['viewModel']
|
|
1598
|
-
}], listDisplayModePopover: [{ type: i0.ViewChild, args: ['listDisplayModePopover', { isSignal: true }] }] } });
|
|
1599
|
-
|
|
1600
|
-
class AXPEntityMasterListCardItemSkeletonComponent {
|
|
1601
|
-
constructor() {
|
|
1602
|
-
//#region ---- Inputs ----
|
|
1603
|
-
this.fieldCount = input(4, /* @ts-ignore */
|
|
1604
|
-
...(ngDevMode ? [{ debugName: "fieldCount" }] : /* istanbul ignore next */ []));
|
|
1605
|
-
this.badgeCount = input(1, /* @ts-ignore */
|
|
1606
|
-
...(ngDevMode ? [{ debugName: "badgeCount" }] : /* istanbul ignore next */ []));
|
|
1607
|
-
this.showFooter = input(true, /* @ts-ignore */
|
|
1608
|
-
...(ngDevMode ? [{ debugName: "showFooter" }] : /* istanbul ignore next */ []));
|
|
1609
|
-
this.showHeaderMenu = input(false, /* @ts-ignore */
|
|
1610
|
-
...(ngDevMode ? [{ debugName: "showHeaderMenu" }] : /* istanbul ignore next */ []));
|
|
1611
|
-
this.showContent = input(true, /* @ts-ignore */
|
|
1612
|
-
...(ngDevMode ? [{ debugName: "showContent" }] : /* istanbul ignore next */ []));
|
|
1613
|
-
//#endregion
|
|
1614
|
-
//#region ---- Computed ----
|
|
1615
|
-
this.fieldPlaceholders = computed(() => Array.from({ length: Math.max(this.fieldCount(), 0) }, (_, index) => index), /* @ts-ignore */
|
|
1616
|
-
...(ngDevMode ? [{ debugName: "fieldPlaceholders" }] : /* istanbul ignore next */ []));
|
|
1617
|
-
this.badgePlaceholders = computed(() => Array.from({ length: Math.max(this.badgeCount(), 0) }, (_, index) => index), /* @ts-ignore */
|
|
1618
|
-
...(ngDevMode ? [{ debugName: "badgePlaceholders" }] : /* istanbul ignore next */ []));
|
|
1619
|
-
}
|
|
1620
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListCardItemSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1621
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityMasterListCardItemSkeletonComponent, isStandalone: true, selector: "axp-entity-master-list-card-item-skeleton", inputs: { fieldCount: { classPropertyName: "fieldCount", publicName: "fieldCount", isSignal: true, isRequired: false, transformFunction: null }, badgeCount: { classPropertyName: "badgeCount", publicName: "badgeCount", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, showHeaderMenu: { classPropertyName: "showHeaderMenu", publicName: "showHeaderMenu", isSignal: true, isRequired: false, transformFunction: null }, showContent: { classPropertyName: "showContent", publicName: "showContent", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<article class=\"axp-entity-card-skeleton\" aria-hidden=\"true\">\n <div class=\"axp-entity-card-skeleton__header\">\n <div class=\"axp-entity-card-skeleton__header-main\">\n <div class=\"axp-entity-card-skeleton__header-text\">\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__title\"></ax-skeleton>\n @if (showContent()) {\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__description\"></ax-skeleton>\n }\n </div>\n @for (index of badgePlaceholders(); track index) {\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__badge\"></ax-skeleton>\n }\n </div>\n @if (showHeaderMenu()) {\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__menu\"></ax-skeleton>\n }\n </div>\n\n @if (showContent()) {\n @if (fieldPlaceholders().length) {\n <div class=\"axp-entity-card-skeleton__fields\">\n @for (index of fieldPlaceholders(); track index) {\n <div class=\"axp-entity-card-skeleton__field-row\">\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__field-label\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__field-value\"></ax-skeleton>\n </div>\n }\n </div>\n }\n }\n\n @if (showFooter()) {\n <footer class=\"axp-entity-card-skeleton__footer\">\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__primary-action\"></ax-skeleton>\n </footer>\n }\n</article>\n", styles: ["@layer properties;:host{display:block;height:auto;width:100%}.axp-entity-card-skeleton{display:flex;height:auto;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * 4);border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * 4)}.axp-entity-card-skeleton .axp-entity-card-skeleton__header{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card-skeleton .axp-entity-card-skeleton__header-main{display:flex;min-width:0px;flex:1;flex-wrap:wrap;align-items:flex-start;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card-skeleton .axp-entity-card-skeleton__header-text{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}.axp-entity-card-skeleton .axp-entity-card-skeleton__title{height:calc(var(--spacing, .25rem) * 5);width:calc(var(--spacing, .25rem) * 40);max-width:100%;border-radius:.25rem}.axp-entity-card-skeleton .axp-entity-card-skeleton__badge{height:calc(var(--spacing, .25rem) * 5);width:calc(var(--spacing, .25rem) * 14);flex-shrink:0;border-radius:calc(infinity * 1px)}.axp-entity-card-skeleton .axp-entity-card-skeleton__menu{height:calc(var(--spacing, .25rem) * 8);width:calc(var(--spacing, .25rem) * 8);flex-shrink:0;border-radius:.25rem}.axp-entity-card-skeleton .axp-entity-card-skeleton__description{height:calc(var(--spacing, .25rem) * 3.5);width:calc(var(--spacing, .25rem) * 32);max-width:100%;border-radius:.25rem;color:var(--color-gray-400, oklch(70.7% .022 261.325))}.axp-entity-card-skeleton .axp-entity-card-skeleton__fields{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));padding-top:calc(var(--spacing, .25rem) * 4)}.axp-entity-card-skeleton .axp-entity-card-skeleton__field-row{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3)}.axp-entity-card-skeleton .axp-entity-card-skeleton__field-label{height:calc(var(--spacing, .25rem) * 4);width:calc(var(--spacing, .25rem) * 24);border-radius:.25rem}.axp-entity-card-skeleton .axp-entity-card-skeleton__field-value{height:calc(var(--spacing, .25rem) * 4);width:calc(var(--spacing, .25rem) * 28);border-radius:.25rem}.axp-entity-card-skeleton .axp-entity-card-skeleton__footer{margin-inline:calc(var(--spacing, .25rem) * -4);margin-top:auto;margin-bottom:calc(var(--spacing, .25rem) * -4);border-bottom-right-radius:var(--radius-xl, .75rem);border-bottom-left-radius:var(--radius-xl, .75rem);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lighter-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);padding-top:calc(var(--spacing, .25rem) * 3)}.axp-entity-card-skeleton .axp-entity-card-skeleton__primary-action{height:calc(var(--spacing, .25rem) * 10);width:100%;border-radius:var(--radius-lg, .5rem)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i2$2.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1622
|
-
}
|
|
1623
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListCardItemSkeletonComponent, decorators: [{
|
|
1624
|
-
type: Component,
|
|
1625
|
-
args: [{ selector: 'axp-entity-master-list-card-item-skeleton', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXSkeletonModule], template: "<article class=\"axp-entity-card-skeleton\" aria-hidden=\"true\">\n <div class=\"axp-entity-card-skeleton__header\">\n <div class=\"axp-entity-card-skeleton__header-main\">\n <div class=\"axp-entity-card-skeleton__header-text\">\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__title\"></ax-skeleton>\n @if (showContent()) {\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__description\"></ax-skeleton>\n }\n </div>\n @for (index of badgePlaceholders(); track index) {\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__badge\"></ax-skeleton>\n }\n </div>\n @if (showHeaderMenu()) {\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__menu\"></ax-skeleton>\n }\n </div>\n\n @if (showContent()) {\n @if (fieldPlaceholders().length) {\n <div class=\"axp-entity-card-skeleton__fields\">\n @for (index of fieldPlaceholders(); track index) {\n <div class=\"axp-entity-card-skeleton__field-row\">\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__field-label\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__field-value\"></ax-skeleton>\n </div>\n }\n </div>\n }\n }\n\n @if (showFooter()) {\n <footer class=\"axp-entity-card-skeleton__footer\">\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__primary-action\"></ax-skeleton>\n </footer>\n }\n</article>\n", styles: ["@layer properties;:host{display:block;height:auto;width:100%}.axp-entity-card-skeleton{display:flex;height:auto;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * 4);border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * 4)}.axp-entity-card-skeleton .axp-entity-card-skeleton__header{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card-skeleton .axp-entity-card-skeleton__header-main{display:flex;min-width:0px;flex:1;flex-wrap:wrap;align-items:flex-start;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card-skeleton .axp-entity-card-skeleton__header-text{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}.axp-entity-card-skeleton .axp-entity-card-skeleton__title{height:calc(var(--spacing, .25rem) * 5);width:calc(var(--spacing, .25rem) * 40);max-width:100%;border-radius:.25rem}.axp-entity-card-skeleton .axp-entity-card-skeleton__badge{height:calc(var(--spacing, .25rem) * 5);width:calc(var(--spacing, .25rem) * 14);flex-shrink:0;border-radius:calc(infinity * 1px)}.axp-entity-card-skeleton .axp-entity-card-skeleton__menu{height:calc(var(--spacing, .25rem) * 8);width:calc(var(--spacing, .25rem) * 8);flex-shrink:0;border-radius:.25rem}.axp-entity-card-skeleton .axp-entity-card-skeleton__description{height:calc(var(--spacing, .25rem) * 3.5);width:calc(var(--spacing, .25rem) * 32);max-width:100%;border-radius:.25rem;color:var(--color-gray-400, oklch(70.7% .022 261.325))}.axp-entity-card-skeleton .axp-entity-card-skeleton__fields{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));padding-top:calc(var(--spacing, .25rem) * 4)}.axp-entity-card-skeleton .axp-entity-card-skeleton__field-row{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3)}.axp-entity-card-skeleton .axp-entity-card-skeleton__field-label{height:calc(var(--spacing, .25rem) * 4);width:calc(var(--spacing, .25rem) * 24);border-radius:.25rem}.axp-entity-card-skeleton .axp-entity-card-skeleton__field-value{height:calc(var(--spacing, .25rem) * 4);width:calc(var(--spacing, .25rem) * 28);border-radius:.25rem}.axp-entity-card-skeleton .axp-entity-card-skeleton__footer{margin-inline:calc(var(--spacing, .25rem) * -4);margin-top:auto;margin-bottom:calc(var(--spacing, .25rem) * -4);border-bottom-right-radius:var(--radius-xl, .75rem);border-bottom-left-radius:var(--radius-xl, .75rem);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lighter-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);padding-top:calc(var(--spacing, .25rem) * 3)}.axp-entity-card-skeleton .axp-entity-card-skeleton__primary-action{height:calc(var(--spacing, .25rem) * 10);width:100%;border-radius:var(--radius-lg, .5rem)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
1626
|
-
}], propDecorators: { fieldCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldCount", required: false }] }], badgeCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeCount", required: false }] }], showFooter: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFooter", required: false }] }], showHeaderMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHeaderMenu", required: false }] }], showContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "showContent", required: false }] }] } });
|
|
1627
|
-
|
|
1628
|
-
class AXPEntityMasterListCardItemComponent {
|
|
1629
|
-
//#endregion
|
|
1630
|
-
//#region ---- Lifecycle ----
|
|
1631
|
-
constructor() {
|
|
1632
|
-
this.translation = inject(AXTranslationService);
|
|
1633
|
-
//#region ---- Inputs & Outputs ----
|
|
1634
|
-
this.vm = input.required(/* @ts-ignore */
|
|
1635
|
-
...(ngDevMode ? [{ debugName: "vm" }] : /* istanbul ignore next */ []));
|
|
1636
|
-
this.row = input.required(/* @ts-ignore */
|
|
1637
|
-
...(ngDevMode ? [{ debugName: "row" }] : /* istanbul ignore next */ []));
|
|
1638
|
-
this.selected = input(false, /* @ts-ignore */
|
|
1639
|
-
...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
1640
|
-
this.showNewBadge = input(false, /* @ts-ignore */
|
|
1641
|
-
...(ngDevMode ? [{ debugName: "showNewBadge" }] : /* istanbul ignore next */ []));
|
|
1642
|
-
this.showSelection = input(false, /* @ts-ignore */
|
|
1643
|
-
...(ngDevMode ? [{ debugName: "showSelection" }] : /* istanbul ignore next */ []));
|
|
1644
|
-
this.selectionChange = output();
|
|
1645
|
-
this.commandClick = output();
|
|
1646
|
-
//#endregion
|
|
1647
|
-
//#region ---- Computed ----
|
|
1648
|
-
this.header = computed(() => this.vm().cardLayout()?.header, /* @ts-ignore */
|
|
1649
|
-
...(ngDevMode ? [{ debugName: "header" }] : /* istanbul ignore next */ []));
|
|
1650
|
-
this.showCardContent = computed(() => this.vm().cardContentExpanded(), /* @ts-ignore */
|
|
1651
|
-
...(ngDevMode ? [{ debugName: "showCardContent" }] : /* istanbul ignore next */ []));
|
|
1652
|
-
this.headerBadgeFields = computed(() => this.vm()
|
|
1653
|
-
.cardFields()
|
|
1654
|
-
.filter((field) => field.visible !== false && field.isBadgeDisplay), /* @ts-ignore */
|
|
1655
|
-
...(ngDevMode ? [{ debugName: "headerBadgeFields" }] : /* istanbul ignore next */ []));
|
|
1656
|
-
/** Column name to omit from body when `header.title` is a simple property path (not an expression). */
|
|
1657
|
-
this.headerTitleColumnName = computed(() => {
|
|
1658
|
-
const title = this.header()?.title;
|
|
1659
|
-
if (!title || title.includes('{{')) {
|
|
1660
|
-
return undefined;
|
|
1661
|
-
}
|
|
1662
|
-
return title;
|
|
1663
|
-
}, /* @ts-ignore */
|
|
1664
|
-
...(ngDevMode ? [{ debugName: "headerTitleColumnName" }] : /* istanbul ignore next */ []));
|
|
1665
|
-
this.bodyFields = computed(() => {
|
|
1666
|
-
const titleColumn = this.headerTitleColumnName();
|
|
1667
|
-
return this.vm()
|
|
1668
|
-
.cardFields()
|
|
1669
|
-
.filter((field) => field.visible !== false && !field.isBadgeDisplay && field.name !== titleColumn);
|
|
1670
|
-
}, /* @ts-ignore */
|
|
1671
|
-
...(ngDevMode ? [{ debugName: "bodyFields" }] : /* istanbul ignore next */ []));
|
|
1672
|
-
this.badgeColorByField = signal({}, /* @ts-ignore */
|
|
1673
|
-
...(ngDevMode ? [{ debugName: "badgeColorByField" }] : /* istanbul ignore next */ []));
|
|
1674
|
-
this.titleText = signal('', /* @ts-ignore */
|
|
1675
|
-
...(ngDevMode ? [{ debugName: "titleText" }] : /* istanbul ignore next */ []));
|
|
1676
|
-
this.descriptionText = signal('', /* @ts-ignore */
|
|
1677
|
-
...(ngDevMode ? [{ debugName: "descriptionText" }] : /* istanbul ignore next */ []));
|
|
1678
|
-
this.iconClass = signal(null, /* @ts-ignore */
|
|
1679
|
-
...(ngDevMode ? [{ debugName: "iconClass" }] : /* istanbul ignore next */ []));
|
|
1680
|
-
this.primaryActions = computed(() => this.vm().primaryRowActions(), /* @ts-ignore */
|
|
1681
|
-
...(ngDevMode ? [{ debugName: "primaryActions" }] : /* istanbul ignore next */ []));
|
|
1682
|
-
this.primaryActionsIconOnly = computed(() => !this.vm().cardContentExpanded(), /* @ts-ignore */
|
|
1683
|
-
...(ngDevMode ? [{ debugName: "primaryActionsIconOnly" }] : /* istanbul ignore next */ []));
|
|
1684
|
-
this.secondaryActions = signal([], /* @ts-ignore */
|
|
1685
|
-
...(ngDevMode ? [{ debugName: "secondaryActions" }] : /* istanbul ignore next */ []));
|
|
1686
|
-
effect(() => {
|
|
1687
|
-
const row = this.row();
|
|
1688
|
-
const header = this.header();
|
|
1689
|
-
const badgeFields = this.headerBadgeFields().filter((field) => !this.isStatusBadgeField(field));
|
|
1690
|
-
untracked(() => {
|
|
1691
|
-
void this.loadSecondaryActions(row);
|
|
1692
|
-
void this.resolveHeaderFields(row, header);
|
|
1693
|
-
void this.resolveBadgeColors(row, badgeFields);
|
|
1694
|
-
});
|
|
1695
|
-
});
|
|
1696
|
-
}
|
|
1697
|
-
//#endregion
|
|
1698
|
-
//#region ---- Row Actions ----
|
|
1699
|
-
async loadSecondaryActions(row) {
|
|
1700
|
-
const actions = await this.vm().cardSecondaryRowActions(row);
|
|
1701
|
-
this.secondaryActions.set(actions);
|
|
1702
|
-
}
|
|
1703
|
-
//#endregion
|
|
1704
|
-
//#region ---- UI Handlers ----
|
|
1705
|
-
onCardClick(event) {
|
|
1706
|
-
if (event.ctrlKey || event.metaKey) {
|
|
1707
|
-
event.preventDefault();
|
|
1708
|
-
this.selectionChange.emit(!this.selected());
|
|
1709
|
-
}
|
|
1710
|
-
}
|
|
1711
|
-
onCardDblClick(event) {
|
|
1712
|
-
event.preventDefault();
|
|
1713
|
-
void this.runDefaultAction();
|
|
1714
|
-
}
|
|
1715
|
-
onCardKeydown(event) {
|
|
1716
|
-
if (event.key === 'Enter' || event.key === ' ') {
|
|
1717
|
-
event.preventDefault();
|
|
1718
|
-
void this.runDefaultAction();
|
|
1719
|
-
}
|
|
1720
|
-
}
|
|
1721
|
-
onPrimaryActionClick(actionName, event) {
|
|
1722
|
-
event.nativeEvent?.stopPropagation();
|
|
1723
|
-
const action = this.primaryActions().find((a) => a.name === actionName);
|
|
1724
|
-
if (action && !action.disabled) {
|
|
1725
|
-
this.commandClick.emit(action.name);
|
|
1726
|
-
}
|
|
1727
|
-
}
|
|
1728
|
-
onSecondaryActionClick(item, event) {
|
|
1729
|
-
event.nativeEvent?.stopPropagation();
|
|
1730
|
-
if (item.isCardSelect || item.name === AXPEntityMasterListCardSelectActionName) {
|
|
1731
|
-
if (!this.selected()) {
|
|
1732
|
-
this.selectionChange.emit(true);
|
|
1733
|
-
}
|
|
1734
|
-
return;
|
|
1735
|
-
}
|
|
1736
|
-
this.commandClick.emit(item.name);
|
|
1737
|
-
}
|
|
1738
|
-
onSelectionCheckboxChange(event) {
|
|
1739
|
-
this.selectionChange.emit(!!event.value);
|
|
1740
|
-
}
|
|
1741
|
-
onSelectionCheckboxClick(event) {
|
|
1742
|
-
event.stopPropagation();
|
|
1743
|
-
}
|
|
1744
|
-
stopClickPropagation(event) {
|
|
1745
|
-
event.nativeEvent?.stopPropagation();
|
|
1746
|
-
}
|
|
1747
|
-
isStatusBadgeField(field) {
|
|
1748
|
-
return field.isStatusWidget;
|
|
1749
|
-
}
|
|
1750
|
-
resolveBadgeText(field) {
|
|
1751
|
-
const path = field.node().path ?? field.name;
|
|
1752
|
-
const value = get(this.row(), path);
|
|
1753
|
-
if (value == null) {
|
|
1754
|
-
return '';
|
|
1755
|
-
}
|
|
1756
|
-
if (typeof value === 'object') {
|
|
1757
|
-
const record = value;
|
|
1758
|
-
const label = record['title'] ?? record['name'] ?? record['label'];
|
|
1759
|
-
return label == null ? '' : String(label);
|
|
1760
|
-
}
|
|
1761
|
-
return String(value);
|
|
1762
|
-
}
|
|
1763
|
-
resolveBadgeColor(field) {
|
|
1764
|
-
return this.badgeColorByField()[field.name] ?? 'default';
|
|
1765
|
-
}
|
|
1766
|
-
//#endregion
|
|
1767
|
-
//#region ---- Private Helpers ----
|
|
1768
|
-
async resolveBadgeColors(row, fields) {
|
|
1769
|
-
const vm = this.vm();
|
|
1770
|
-
const entries = await Promise.all(fields.map(async (field) => [field.name, await vm.resolveCardBadgeColor(field, row)]));
|
|
1771
|
-
this.badgeColorByField.set(Object.fromEntries(entries));
|
|
1772
|
-
}
|
|
1773
|
-
async resolveHeaderFields(row, header) {
|
|
1774
|
-
const vm = this.vm();
|
|
1775
|
-
const [title, description, icon] = await Promise.all([
|
|
1776
|
-
vm.resolveCardHeaderValue(header?.title, row),
|
|
1777
|
-
vm.resolveCardHeaderValue(header?.description, row),
|
|
1778
|
-
vm.resolveCardHeaderValue(header?.icon, row),
|
|
1779
|
-
]);
|
|
1780
|
-
this.titleText.set(title);
|
|
1781
|
-
this.descriptionText.set(description);
|
|
1782
|
-
this.iconClass.set(this.toIconClass(this.toIconString(icon)));
|
|
1783
|
-
}
|
|
1784
|
-
toIconString(value) {
|
|
1785
|
-
if (!value) {
|
|
1786
|
-
return '';
|
|
1787
|
-
}
|
|
1788
|
-
if (typeof value === 'string') {
|
|
1789
|
-
return value;
|
|
1790
|
-
}
|
|
1791
|
-
if (this.translation.isValidMultiLanguageObject(value)) {
|
|
1792
|
-
return this.translation.resolve(value);
|
|
1793
|
-
}
|
|
1794
|
-
return '';
|
|
1795
|
-
}
|
|
1796
|
-
toIconClass(value) {
|
|
1797
|
-
if (!value) {
|
|
1798
|
-
return null;
|
|
1799
|
-
}
|
|
1800
|
-
return value.includes('fa-') ? value : `fa-light fa-${value}`;
|
|
1801
|
-
}
|
|
1802
|
-
async runDefaultAction() {
|
|
1803
|
-
const primary = this.primaryActions();
|
|
1804
|
-
const secondary = this.secondaryActions().filter((a) => !a.isCardSelect);
|
|
1805
|
-
const all = [...primary, ...secondary].filter(Boolean);
|
|
1806
|
-
const defaultAction = all.find((a) => {
|
|
1807
|
-
if (!a) {
|
|
1808
|
-
return false;
|
|
1809
|
-
}
|
|
1810
|
-
const commandName = a.name.split('&')[0];
|
|
1811
|
-
return (a.default || commandName === 'Entity:OpenDetails') && !a.disabled;
|
|
1812
|
-
});
|
|
1813
|
-
if (defaultAction) {
|
|
1814
|
-
this.commandClick.emit(defaultAction.name);
|
|
1815
|
-
}
|
|
1816
|
-
}
|
|
1817
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListCardItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1818
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityMasterListCardItemComponent, isStandalone: true, selector: "axp-entity-master-list-card-item", inputs: { vm: { classPropertyName: "vm", publicName: "vm", isSignal: true, isRequired: true, transformFunction: null }, row: { classPropertyName: "row", publicName: "row", isSignal: true, isRequired: true, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, showNewBadge: { classPropertyName: "showNewBadge", publicName: "showNewBadge", isSignal: true, isRequired: false, transformFunction: null }, showSelection: { classPropertyName: "showSelection", publicName: "showSelection", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange", commandClick: "commandClick" }, ngImport: i0, template: "<article\n class=\"axp-entity-card\"\n role=\"button\"\n tabindex=\"0\"\n [class.axp-entity-card--selected]=\"selected()\"\n [class.axp-entity-card--new]=\"showNewBadge()\"\n [attr.aria-selected]=\"selected()\"\n (click)=\"onCardClick($event)\"\n (dblclick)=\"onCardDblClick($event)\"\n (keydown)=\"onCardKeydown($event)\"\n>\n <div class=\"axp-entity-card__header\">\n <div class=\"axp-entity-card__header-main\">\n <div class=\"axp-entity-card__header-text\">\n <div class=\"axp-entity-card__title-row\">\n @if (iconClass(); as icon) {\n <i [class]=\"icon + ' axp-entity-card__icon'\" aria-hidden=\"true\"></i>\n }\n\n <h3 class=\"axp-entity-card__title\" title=\"{{ titleText() | translate | async }}\">\n {{ titleText() | translate | async }}\n </h3>\n\n @if (showNewBadge()) {\n <ax-badge\n class=\"axp-entity-card__header-badge\"\n [text]=\"('@acorex:dataTable.rowHighlight.new' | translate | async) || ''\"\n color=\"success\"\n />\n }\n\n @for (field of headerBadgeFields(); track field.name) {\n @if (isStatusBadgeField(field)) {\n <div class=\"axp-entity-card__header-badge\">\n <axp-widget-column-cell [node]=\"field.headerBadgeNode()\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n } @else if (resolveBadgeText(field)) {\n <ax-badge\n class=\"axp-entity-card__header-badge\"\n [text]=\"resolveBadgeText(field)\"\n [color]=\"resolveBadgeColor(field)\"\n />\n }\n }\n </div>\n\n @if (descriptionText()) {\n <p class=\"axp-entity-card__description\" title=\"{{ descriptionText() | translate | async }}\">\n {{ descriptionText() | translate | async }}\n </p>\n }\n </div>\n </div>\n\n @if (showSelection() || secondaryActions().length) {\n <div class=\"axp-entity-card__header-actions\">\n @if (showSelection()) {\n <ax-check-box\n class=\"axp-entity-card__select-checkbox\"\n [value]=\"selected()\"\n (onValueChanged)=\"onSelectionCheckboxChange($event)\"\n (click)=\"onSelectionCheckboxClick($event)\"\n />\n } @else if (secondaryActions().length) {\n <ax-button [look]=\"'blank'\" [color]=\"'default'\" (onClick)=\"stopClickPropagation($event)\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis\" aria-hidden=\"true\"></i>\n </ax-prefix>\n\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (item of secondaryActions(); track $index) {\n @if (item.divided) {\n <ax-divider />\n }\n <ax-button-item\n [text]=\"(item.title | translate | async)!\"\n [color]=\"item.color\"\n [disabled]=\"item.disabled\"\n (onClick)=\"onSecondaryActionClick(item, $event)\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n </div>\n\n @if (showCardContent()) {\n @if (bodyFields().length) {\n <div class=\"axp-entity-card__fields grid grid-cols-12 gap-y-3 gap-x-4\">\n @for (field of bodyFields(); track field.name) {\n <div\n class=\"axp-entity-card__field col-span-12\"\n [axp-grid-layout]=\"field.layout ?? { positions: { sm: { colSpan: 12 } } }\"\n >\n <div class=\"axp-entity-card__field-row\">\n <span class=\"axp-entity-card__field-label\">{{ field.title | translate | async }}</span>\n\n <div class=\"axp-entity-card__field-value\">\n <axp-widget-column-cell [node]=\"field.node()\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n </div>\n </div>\n }\n </div>\n }\n }\n\n @if (primaryActions().length) {\n <footer class=\"axp-entity-card__footer\">\n @for (action of primaryActions(); track $index) {\n <ax-button\n class=\"axp-entity-card__primary-action text-xs\"\n [class.flex-1]=\"!primaryActionsIconOnly()\"\n [look]=\"'outline'\"\n [color]=\"action.color\"\n [size]=\"'sm'\"\n [iconOnly]=\"primaryActionsIconOnly()\"\n [disabled]=\"action.disabled\"\n [text]=\"(action.title | translate | async)!\"\n (onClick)=\"onPrimaryActionClick(action.name, $event)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <i class=\"fa-light {{ action.icon }}\"></i>\n </ax-prefix>\n }\n </ax-button>\n }\n </footer>\n }\n</article>\n", styles: ["@layer properties;:host{display:block;height:auto;width:100%}.axp-entity-card{display:flex;height:auto;width:100%;cursor:pointer;flex-direction:column;gap:calc(var(--spacing, .25rem) * 4);border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * 4);transition-property:box-shadow;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s))}.axp-entity-card:hover{--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.axp-entity-card:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:2px;outline-color:rgba(var(--ax-sys-color-primary-500))}.axp-entity-card.axp-entity-card--selected{border-color:rgba(var(--ax-sys-color-primary-500));--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);box-shadow:0 0 0 1px rgb(var(--ax-sys-color-primary-500)/.25),0 2px 6px #0000000f}.axp-entity-card.axp-entity-card--new{border-color:rgb(var(--ax-sys-color-border-success-surface));box-shadow:0 0 0 1px rgb(var(--ax-sys-color-success-500)/.2)}.axp-entity-card .axp-entity-card__header{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__header-main{display:flex;min-width:0px;flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__header-text{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__title-row{display:flex;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__select-checkbox,.axp-entity-card .axp-entity-card__header-badge{flex-shrink:0}.axp-entity-card .axp-entity-card__header-actions{display:flex;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__title{min-width:0px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700)}.axp-entity-card .axp-entity-card__icon{flex-shrink:0;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));color:var(--color-gray-500, oklch(55.1% .027 264.364))}.axp-entity-card .axp-entity-card__description{min-width:0px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);color:rgba(var(--ax-sys-color-on-lightest-surface))}.axp-entity-card .axp-entity-card__fields{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));padding-top:calc(var(--spacing, .25rem) * 4)}.axp-entity-card .axp-entity-card__field-row{display:grid;width:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 3);grid-template-columns:auto minmax(0,1fr)}.axp-entity-card .axp-entity-card__field-label{flex-shrink:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:var(--color-gray-400, oklch(70.7% .022 261.325))}.axp-entity-card .axp-entity-card__field-value{max-width:100%;min-width:0px;justify-self:flex-end;text-align:end;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-lightest-surface));width:fit-content}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell{display:block;max-width:100%}.axp-entity-card .axp-entity-card__footer{margin-inline:calc(var(--spacing, .25rem) * -4);margin-top:auto;margin-bottom:calc(var(--spacing, .25rem) * -4);display:flex;align-items:center;justify-content:flex-end;gap:calc(var(--spacing, .25rem) * 4);border-bottom-right-radius:var(--radius-xl, .75rem);border-bottom-left-radius:var(--radius-xl, .75rem);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lighter-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);padding-top:calc(var(--spacing, .25rem) * 3)}.axp-entity-card .axp-entity-card__primary-action{min-width:0px}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-outline-style: solid;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1$2.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i3$3.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.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: AXDropdownModule }, { kind: "component", type: i5.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: AXPGridLayoutDirective, selector: "[axp-grid-layout]", inputs: ["axp-grid-layout"] }, { kind: "component", type: AXPWidgetColumnCellComponent, selector: "axp-widget-column-cell", inputs: ["node", "rowData", "caption"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1819
|
-
}
|
|
1820
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListCardItemComponent, decorators: [{
|
|
1821
|
-
type: Component,
|
|
1822
|
-
args: [{ selector: 'axp-entity-master-list-card-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1823
|
-
CommonModule,
|
|
1824
|
-
AXBadgeModule,
|
|
1825
|
-
AXButtonModule,
|
|
1826
|
-
AXCheckBoxModule,
|
|
1827
|
-
AXDecoratorModule,
|
|
1828
|
-
AXDropdownModule,
|
|
1829
|
-
AXTranslationModule,
|
|
1830
|
-
AXPGridLayoutDirective,
|
|
1831
|
-
AXPWidgetColumnCellComponent,
|
|
1832
|
-
], template: "<article\n class=\"axp-entity-card\"\n role=\"button\"\n tabindex=\"0\"\n [class.axp-entity-card--selected]=\"selected()\"\n [class.axp-entity-card--new]=\"showNewBadge()\"\n [attr.aria-selected]=\"selected()\"\n (click)=\"onCardClick($event)\"\n (dblclick)=\"onCardDblClick($event)\"\n (keydown)=\"onCardKeydown($event)\"\n>\n <div class=\"axp-entity-card__header\">\n <div class=\"axp-entity-card__header-main\">\n <div class=\"axp-entity-card__header-text\">\n <div class=\"axp-entity-card__title-row\">\n @if (iconClass(); as icon) {\n <i [class]=\"icon + ' axp-entity-card__icon'\" aria-hidden=\"true\"></i>\n }\n\n <h3 class=\"axp-entity-card__title\" title=\"{{ titleText() | translate | async }}\">\n {{ titleText() | translate | async }}\n </h3>\n\n @if (showNewBadge()) {\n <ax-badge\n class=\"axp-entity-card__header-badge\"\n [text]=\"('@acorex:dataTable.rowHighlight.new' | translate | async) || ''\"\n color=\"success\"\n />\n }\n\n @for (field of headerBadgeFields(); track field.name) {\n @if (isStatusBadgeField(field)) {\n <div class=\"axp-entity-card__header-badge\">\n <axp-widget-column-cell [node]=\"field.headerBadgeNode()\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n } @else if (resolveBadgeText(field)) {\n <ax-badge\n class=\"axp-entity-card__header-badge\"\n [text]=\"resolveBadgeText(field)\"\n [color]=\"resolveBadgeColor(field)\"\n />\n }\n }\n </div>\n\n @if (descriptionText()) {\n <p class=\"axp-entity-card__description\" title=\"{{ descriptionText() | translate | async }}\">\n {{ descriptionText() | translate | async }}\n </p>\n }\n </div>\n </div>\n\n @if (showSelection() || secondaryActions().length) {\n <div class=\"axp-entity-card__header-actions\">\n @if (showSelection()) {\n <ax-check-box\n class=\"axp-entity-card__select-checkbox\"\n [value]=\"selected()\"\n (onValueChanged)=\"onSelectionCheckboxChange($event)\"\n (click)=\"onSelectionCheckboxClick($event)\"\n />\n } @else if (secondaryActions().length) {\n <ax-button [look]=\"'blank'\" [color]=\"'default'\" (onClick)=\"stopClickPropagation($event)\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis\" aria-hidden=\"true\"></i>\n </ax-prefix>\n\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (item of secondaryActions(); track $index) {\n @if (item.divided) {\n <ax-divider />\n }\n <ax-button-item\n [text]=\"(item.title | translate | async)!\"\n [color]=\"item.color\"\n [disabled]=\"item.disabled\"\n (onClick)=\"onSecondaryActionClick(item, $event)\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n </div>\n\n @if (showCardContent()) {\n @if (bodyFields().length) {\n <div class=\"axp-entity-card__fields grid grid-cols-12 gap-y-3 gap-x-4\">\n @for (field of bodyFields(); track field.name) {\n <div\n class=\"axp-entity-card__field col-span-12\"\n [axp-grid-layout]=\"field.layout ?? { positions: { sm: { colSpan: 12 } } }\"\n >\n <div class=\"axp-entity-card__field-row\">\n <span class=\"axp-entity-card__field-label\">{{ field.title | translate | async }}</span>\n\n <div class=\"axp-entity-card__field-value\">\n <axp-widget-column-cell [node]=\"field.node()\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n </div>\n </div>\n }\n </div>\n }\n }\n\n @if (primaryActions().length) {\n <footer class=\"axp-entity-card__footer\">\n @for (action of primaryActions(); track $index) {\n <ax-button\n class=\"axp-entity-card__primary-action text-xs\"\n [class.flex-1]=\"!primaryActionsIconOnly()\"\n [look]=\"'outline'\"\n [color]=\"action.color\"\n [size]=\"'sm'\"\n [iconOnly]=\"primaryActionsIconOnly()\"\n [disabled]=\"action.disabled\"\n [text]=\"(action.title | translate | async)!\"\n (onClick)=\"onPrimaryActionClick(action.name, $event)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <i class=\"fa-light {{ action.icon }}\"></i>\n </ax-prefix>\n }\n </ax-button>\n }\n </footer>\n }\n</article>\n", styles: ["@layer properties;:host{display:block;height:auto;width:100%}.axp-entity-card{display:flex;height:auto;width:100%;cursor:pointer;flex-direction:column;gap:calc(var(--spacing, .25rem) * 4);border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * 4);transition-property:box-shadow;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s))}.axp-entity-card:hover{--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.axp-entity-card:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px;outline-offset:2px;outline-color:rgba(var(--ax-sys-color-primary-500))}.axp-entity-card.axp-entity-card--selected{border-color:rgba(var(--ax-sys-color-primary-500));--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);box-shadow:0 0 0 1px rgb(var(--ax-sys-color-primary-500)/.25),0 2px 6px #0000000f}.axp-entity-card.axp-entity-card--new{border-color:rgb(var(--ax-sys-color-border-success-surface));box-shadow:0 0 0 1px rgb(var(--ax-sys-color-success-500)/.2)}.axp-entity-card .axp-entity-card__header{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__header-main{display:flex;min-width:0px;flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__header-text{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__title-row{display:flex;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__select-checkbox,.axp-entity-card .axp-entity-card__header-badge{flex-shrink:0}.axp-entity-card .axp-entity-card__header-actions{display:flex;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__title{min-width:0px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));--tw-leading: var(--leading-tight, 1.25);line-height:var(--leading-tight, 1.25);--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700)}.axp-entity-card .axp-entity-card__icon{flex-shrink:0;font-size:var(--text-lg, 1.125rem);line-height:var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125)));color:var(--color-gray-500, oklch(55.1% .027 264.364))}.axp-entity-card .axp-entity-card__description{min-width:0px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);color:rgba(var(--ax-sys-color-on-lightest-surface))}.axp-entity-card .axp-entity-card__fields{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));padding-top:calc(var(--spacing, .25rem) * 4)}.axp-entity-card .axp-entity-card__field-row{display:grid;width:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 3);grid-template-columns:auto minmax(0,1fr)}.axp-entity-card .axp-entity-card__field-label{flex-shrink:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:var(--color-gray-400, oklch(70.7% .022 261.325))}.axp-entity-card .axp-entity-card__field-value{max-width:100%;min-width:0px;justify-self:flex-end;text-align:end;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-lightest-surface));width:fit-content}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell{display:block;max-width:100%}.axp-entity-card .axp-entity-card__footer{margin-inline:calc(var(--spacing, .25rem) * -4);margin-top:auto;margin-bottom:calc(var(--spacing, .25rem) * -4);display:flex;align-items:center;justify-content:flex-end;gap:calc(var(--spacing, .25rem) * 4);border-bottom-right-radius:var(--radius-xl, .75rem);border-bottom-left-radius:var(--radius-xl, .75rem);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lighter-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);padding-top:calc(var(--spacing, .25rem) * 3)}.axp-entity-card .axp-entity-card__primary-action{min-width:0px}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-outline-style: solid;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
1833
|
-
}], ctorParameters: () => [], propDecorators: { vm: [{ type: i0.Input, args: [{ isSignal: true, alias: "vm", required: true }] }], row: [{ type: i0.Input, args: [{ isSignal: true, alias: "row", required: true }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], showNewBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNewBadge", required: false }] }], showSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSelection", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], commandClick: [{ type: i0.Output, args: ["commandClick"] }] } });
|
|
1834
|
-
|
|
1835
|
-
class AXPEntityMasterListCardListComponent {
|
|
1836
|
-
//#endregion
|
|
1837
|
-
//#region ---- Lifecycle ----
|
|
1838
|
-
constructor() {
|
|
1839
|
-
//#region ---- Services & Dependencies ----
|
|
1840
|
-
this.deviceService = inject(AXPDeviceService);
|
|
1841
|
-
//#endregion
|
|
1842
|
-
//#region ---- Inputs & Outputs ----
|
|
1843
|
-
this.vm = input.required(/* @ts-ignore */
|
|
1844
|
-
...(ngDevMode ? [{ debugName: "vm" }] : /* istanbul ignore next */ []));
|
|
1845
|
-
this.pageChanged = output();
|
|
1846
|
-
//#endregion
|
|
1847
|
-
//#region ---- State ----
|
|
1848
|
-
this.pagerDisplayMode = computed(() => (this.deviceService.isSmall() ? 'compact' : 'full'), /* @ts-ignore */
|
|
1849
|
-
...(ngDevMode ? [{ debugName: "pagerDisplayMode" }] : /* istanbul ignore next */ []));
|
|
1850
|
-
this.items = signal([], /* @ts-ignore */
|
|
1851
|
-
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
1852
|
-
this.loading = signal(false, /* @ts-ignore */
|
|
1853
|
-
...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
1854
|
-
this.highlightedRowId = signal(null, /* @ts-ignore */
|
|
1855
|
-
...(ngDevMode ? [{ debugName: "highlightedRowId" }] : /* istanbul ignore next */ []));
|
|
1856
|
-
this.totalCount = signal(0, /* @ts-ignore */
|
|
1857
|
-
...(ngDevMode ? [{ debugName: "totalCount" }] : /* istanbul ignore next */ []));
|
|
1858
|
-
this.pageIndex = signal(0, /* @ts-ignore */
|
|
1859
|
-
...(ngDevMode ? [{ debugName: "pageIndex" }] : /* istanbul ignore next */ []));
|
|
1860
|
-
this.pageSize = signal(10, /* @ts-ignore */
|
|
1861
|
-
...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
|
|
1862
|
-
this.showSelection = computed(() => this.vm().selectedItems().length > 0, /* @ts-ignore */
|
|
1863
|
-
...(ngDevMode ? [{ debugName: "showSelection" }] : /* istanbul ignore next */ []));
|
|
1864
|
-
this.rowKey = computed(() => this.vm().dataSource.config?.key ?? 'id', /* @ts-ignore */
|
|
1865
|
-
...(ngDevMode ? [{ debugName: "rowKey" }] : /* istanbul ignore next */ []));
|
|
1866
|
-
this.skeletonCount = computed(() => Math.max(this.pageSize(), 1), /* @ts-ignore */
|
|
1867
|
-
...(ngDevMode ? [{ debugName: "skeletonCount" }] : /* istanbul ignore next */ []));
|
|
1868
|
-
this.skeletonFieldCount = computed(() => {
|
|
1869
|
-
if (!this.vm().cardContentExpanded()) {
|
|
1870
|
-
return 0;
|
|
1871
|
-
}
|
|
1872
|
-
const bodyCount = this.vm()
|
|
1873
|
-
.cardFields()
|
|
1874
|
-
.filter((field) => field.visible !== false && !field.isBadgeDisplay).length;
|
|
1875
|
-
return bodyCount > 0 ? bodyCount : 4;
|
|
1876
|
-
}, /* @ts-ignore */
|
|
1877
|
-
...(ngDevMode ? [{ debugName: "skeletonFieldCount" }] : /* istanbul ignore next */ []));
|
|
1878
|
-
this.skeletonBadgeCount = computed(() => {
|
|
1879
|
-
const count = this.vm()
|
|
1880
|
-
.cardFields()
|
|
1881
|
-
.filter((field) => field.visible !== false && field.isBadgeDisplay).length;
|
|
1882
|
-
return count > 0 ? count : 1;
|
|
1883
|
-
}, /* @ts-ignore */
|
|
1884
|
-
...(ngDevMode ? [{ debugName: "skeletonBadgeCount" }] : /* istanbul ignore next */ []));
|
|
1885
|
-
this.skeletonShowFooter = computed(() => this.vm().primaryRowActions().length > 0, /* @ts-ignore */
|
|
1886
|
-
...(ngDevMode ? [{ debugName: "skeletonShowFooter" }] : /* istanbul ignore next */ []));
|
|
1887
|
-
this.skeletonPlaceholders = computed(() => Array.from({ length: this.skeletonCount() }, (_, index) => index), /* @ts-ignore */
|
|
1888
|
-
...(ngDevMode ? [{ debugName: "skeletonPlaceholders" }] : /* istanbul ignore next */ []));
|
|
1889
|
-
effect((onCleanup) => {
|
|
1890
|
-
const vm = this.vm();
|
|
1891
|
-
const dataSource = vm.dataSource;
|
|
1892
|
-
untracked(() => {
|
|
1893
|
-
this.syncPagingFromDataSource(vm);
|
|
1894
|
-
this.syncFromDataSource();
|
|
1895
|
-
});
|
|
1896
|
-
const changedSub = dataSource.onChanged.subscribe(() => {
|
|
1897
|
-
this.syncFromDataSource();
|
|
1898
|
-
});
|
|
1899
|
-
const loadingSub = dataSource.onLoadingChanged.subscribe((isLoading) => {
|
|
1900
|
-
this.loading.set(isLoading);
|
|
1901
|
-
});
|
|
1902
|
-
onCleanup(() => {
|
|
1903
|
-
changedSub.unsubscribe();
|
|
1904
|
-
loadingSub.unsubscribe();
|
|
1905
|
-
});
|
|
1886
|
+
queueMicrotask(() => resolve());
|
|
1887
|
+
}, { injector: this.injector });
|
|
1906
1888
|
});
|
|
1907
1889
|
}
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
if (!resetPagination) {
|
|
1912
|
-
await this.vm().ensureListPagingResolved();
|
|
1913
|
-
this.vm().applyPagingToDataSourceWithoutLoad();
|
|
1914
|
-
}
|
|
1915
|
-
const dataReady = this.waitForDataSourceLoad(this.vm().dataSource);
|
|
1916
|
-
this.vm().dataSource.refresh({ reset: resetPagination });
|
|
1917
|
-
await dataReady;
|
|
1890
|
+
async loadSettings() {
|
|
1891
|
+
const filterTriggerMode = await this.settingsService.get(AXPCommonSettings.EntityFilterApplyMode);
|
|
1892
|
+
this.filterTriggerMode = (filterTriggerMode?.value ?? 'auto');
|
|
1918
1893
|
}
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
this.
|
|
1925
|
-
}
|
|
1894
|
+
setListDisplayMode(mode) {
|
|
1895
|
+
traceEntityMasterList('toolbar', 'setListDisplayMode clicked', () => ({
|
|
1896
|
+
mode,
|
|
1897
|
+
viewName: this.vm.view().name,
|
|
1898
|
+
previousLayout: this.vm.activeListLayout(),
|
|
1899
|
+
previousDisplayMode: this.vm.listDisplayMode(),
|
|
1900
|
+
}));
|
|
1901
|
+
this.vm.setListDisplayMode(mode);
|
|
1902
|
+
this.listDisplayModePopover()?.close();
|
|
1926
1903
|
}
|
|
1927
|
-
|
|
1928
|
-
this.
|
|
1904
|
+
scheduleApply() {
|
|
1905
|
+
clearTimeout(this.applyTimer);
|
|
1906
|
+
this.applyTimer = setTimeout(() => {
|
|
1907
|
+
this.vm.applyFilterAndSort();
|
|
1908
|
+
}, 50);
|
|
1929
1909
|
}
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1910
|
+
async onViewChanged(view) {
|
|
1911
|
+
traceEntityMasterList('toolbar', 'view tab changed', () => ({
|
|
1912
|
+
previousViewName: this.vm.view().name,
|
|
1913
|
+
nextViewName: view.name,
|
|
1914
|
+
activeListLayout: this.vm.activeListLayout(),
|
|
1915
|
+
dataSource: buildDataSourceTraceSnapshot(this.vm.dataSource),
|
|
1916
|
+
}));
|
|
1917
|
+
await this.vm.setView(view.name);
|
|
1918
|
+
if (axpIsEntityListRoute(this.router)) {
|
|
1919
|
+
axpReplaceEntityListRouteQueryParams(this.router, { view: view.name });
|
|
1920
|
+
// Prevent queryParamSub from re-applying the same view change while initial load runs.
|
|
1921
|
+
this.vm.markRouteQueryContextSynced(this.activeRoute.snapshot.queryParamMap, {
|
|
1922
|
+
view: view.name,
|
|
1923
|
+
});
|
|
1934
1924
|
}
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
getTraceSnapshot() {
|
|
1943
|
-
return {
|
|
1944
|
-
itemCount: this.items().length,
|
|
1945
|
-
loading: this.loading(),
|
|
1946
|
-
pageIndex: this.pageIndex(),
|
|
1947
|
-
pageSize: this.pageSize(),
|
|
1948
|
-
};
|
|
1925
|
+
await this.runInitialListLoad();
|
|
1926
|
+
traceEntityMasterList('toolbar', 'view tab change handled', () => ({
|
|
1927
|
+
viewName: this.vm.view().name,
|
|
1928
|
+
activeListLayout: this.vm.activeListLayout(),
|
|
1929
|
+
filterCount: this.vm.filterQueries().length,
|
|
1930
|
+
dataSource: buildDataSourceTraceSnapshot(this.vm.dataSource),
|
|
1931
|
+
}));
|
|
1949
1932
|
}
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1933
|
+
#effect;
|
|
1934
|
+
setInitialFiltersFromSettingsOrView() {
|
|
1935
|
+
const saved = this.vm.filterQueries();
|
|
1936
|
+
this.previousFilterQueries.set(saved);
|
|
1937
|
+
const viewConditions = this.vm.view().conditions.map((c) => c.name);
|
|
1938
|
+
if (saved && saved.length) {
|
|
1939
|
+
this.initialFilters.set(saved.map((s) => ({ ...s, hidden: viewConditions.includes(s.field) })));
|
|
1940
|
+
return;
|
|
1955
1941
|
}
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
return this.vm()
|
|
1963
|
-
.selectedItems()
|
|
1964
|
-
.some((item) => getRowId(item, key) === rowId);
|
|
1942
|
+
this.initialFilters.set(this.vm.view().conditions.map((c) => ({
|
|
1943
|
+
field: c.name,
|
|
1944
|
+
operator: c.operator,
|
|
1945
|
+
value: c.value,
|
|
1946
|
+
hidden: true,
|
|
1947
|
+
})));
|
|
1965
1948
|
}
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
if (selected) {
|
|
1971
|
-
if (!current.some((item) => getRowId(item, key) === rowId)) {
|
|
1972
|
-
this.vm().selectedItems.set([...current, row]);
|
|
1973
|
-
}
|
|
1949
|
+
onFiltersChanged(filters) {
|
|
1950
|
+
if (this.isInitializing) {
|
|
1951
|
+
this.vm.filterQueries.set(filters);
|
|
1952
|
+
this.previousFilterQueries.set(filters);
|
|
1974
1953
|
return;
|
|
1975
1954
|
}
|
|
1976
|
-
this.
|
|
1955
|
+
if (!this.filtersReady()) {
|
|
1956
|
+
return;
|
|
1957
|
+
}
|
|
1958
|
+
this.vm.filterQueries.set(filters);
|
|
1959
|
+
if (this.filterTriggerMode === 'auto') {
|
|
1960
|
+
void this.applyFilters();
|
|
1961
|
+
}
|
|
1977
1962
|
}
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
await this.vm
|
|
1963
|
+
async applyFilters() {
|
|
1964
|
+
const persistableFilters = this.vm.getPersistableFilterQueries();
|
|
1965
|
+
this.previousFilterQueries.set(this.vm.filterQueries());
|
|
1966
|
+
await this.vm.saveSettings('filters', persistableFilters);
|
|
1967
|
+
this.stripFiltersFromRouteQueryParam();
|
|
1968
|
+
await this.vm.applyFilterAndSort();
|
|
1982
1969
|
}
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
this.pageSize.set(event.take);
|
|
1987
|
-
if (!event.isUserInteraction) {
|
|
1970
|
+
/** Removes `filters` from the entity list URL; filter state is persisted in user settings only. */
|
|
1971
|
+
stripFiltersFromRouteQueryParam() {
|
|
1972
|
+
if (!axpIsEntityListRoute(this.router)) {
|
|
1988
1973
|
return;
|
|
1989
1974
|
}
|
|
1990
|
-
|
|
1991
|
-
|
|
1975
|
+
const url = this.router.url;
|
|
1976
|
+
if (!url.includes('filters=')) {
|
|
1977
|
+
return;
|
|
1992
1978
|
}
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
//#endregion
|
|
1997
|
-
//#region ---- Private Helpers ----
|
|
1998
|
-
syncItemsFromDataSource() {
|
|
1999
|
-
const ds = this.vm().dataSource;
|
|
2000
|
-
const pageItems = [...ds.items];
|
|
2001
|
-
this.items.set(pageItems.filter(isRowRecord));
|
|
2002
|
-
this.totalCount.set(ds.totalCount ?? this.items().length);
|
|
2003
|
-
this.pageIndex.set(getDataSourcePageIndex(this.vm().dataSource));
|
|
2004
|
-
this.pageSize.set(this.vm().dataSource.config.pageSize ?? 10);
|
|
1979
|
+
// Mark the post-strip key first so queryParamMap emission does not trigger an extra list reload.
|
|
1980
|
+
this.vm.markRouteQueryContextSynced(this.activeRoute.snapshot.queryParamMap, { filters: null });
|
|
1981
|
+
axpReplaceEntityListRouteQueryParams(this.router, { filters: null });
|
|
2005
1982
|
}
|
|
2006
|
-
|
|
2007
|
-
this.
|
|
2008
|
-
|
|
1983
|
+
onSortQueriesChange(e) {
|
|
1984
|
+
if (this.isInitializing || this.pendingInitialSorts) {
|
|
1985
|
+
this.pendingInitialSorts = false;
|
|
1986
|
+
return;
|
|
1987
|
+
}
|
|
1988
|
+
const sortableByName = new Map(this.vm.sortableFields().map((f) => [f.name, f]));
|
|
1989
|
+
const nextSortedFields = e
|
|
1990
|
+
.filter((s) => s.dir && sortableByName.has(s.name))
|
|
1991
|
+
.map((s) => ({
|
|
1992
|
+
name: s.name,
|
|
1993
|
+
title: sortableByName.get(s.name).title,
|
|
1994
|
+
dir: s.dir,
|
|
1995
|
+
}));
|
|
1996
|
+
const sortSignature = (fields) => fields.map((s) => `${s.name}:${s.dir ?? ''}`).join('|');
|
|
1997
|
+
if (sortSignature(nextSortedFields) === sortSignature(this.vm.sortedFields())) {
|
|
1998
|
+
return;
|
|
1999
|
+
}
|
|
2000
|
+
this.vm.sortedFields.set(nextSortedFields);
|
|
2001
|
+
this.vm.saveSettings('sorts', e);
|
|
2002
|
+
this.scheduleApply();
|
|
2009
2003
|
}
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
const
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
loadingSub.unsubscribe();
|
|
2020
|
-
changedSub.unsubscribe();
|
|
2021
|
-
resolve();
|
|
2022
|
-
};
|
|
2023
|
-
const changedSub = dataSource.onChanged.subscribe(() => {
|
|
2024
|
-
if (!dataSource.isLoading) {
|
|
2025
|
-
queueMicrotask(finish);
|
|
2026
|
-
}
|
|
2027
|
-
});
|
|
2028
|
-
const loadingSub = dataSource.onLoadingChanged.subscribe((isLoading) => {
|
|
2029
|
-
if (!isLoading) {
|
|
2030
|
-
queueMicrotask(finish);
|
|
2004
|
+
onColumnsChange(columns) {
|
|
2005
|
+
const keyOf = (c) => c.column?.options?.dataPath ?? c.name;
|
|
2006
|
+
this.vm.columns.update((prev) => {
|
|
2007
|
+
const byKey = new Map(prev.map((c) => [keyOf(c), c]));
|
|
2008
|
+
return columns
|
|
2009
|
+
.map((newColumn) => {
|
|
2010
|
+
const existing = byKey.get(keyOf(newColumn));
|
|
2011
|
+
if (!existing) {
|
|
2012
|
+
return null;
|
|
2031
2013
|
}
|
|
2032
|
-
|
|
2033
|
-
|
|
2014
|
+
return new AXPEntityListViewColumnViewModel(existing.property, {
|
|
2015
|
+
...existing.column,
|
|
2016
|
+
options: {
|
|
2017
|
+
...existing.column.options,
|
|
2018
|
+
visible: newColumn.visible,
|
|
2019
|
+
},
|
|
2020
|
+
});
|
|
2021
|
+
})
|
|
2022
|
+
.filter((c) => c != null);
|
|
2034
2023
|
});
|
|
2024
|
+
// Persist column order/visibility (client-only; do not re-query on visibility toggle)
|
|
2025
|
+
this.vm.onColumnsChanged(this.vm.columns());
|
|
2035
2026
|
}
|
|
2036
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type:
|
|
2037
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type:
|
|
2027
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2028
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityMasterToolbarViewComponent, isStandalone: true, selector: "axp-entity-master-toolbar-view", inputs: { vm: ["viewModel", "vm"] }, host: { classAttribute: "w-full" }, viewQueries: [{ propertyName: "listDisplayModePopover", first: true, predicate: ["listDisplayModePopover"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- <axp-entity-view-toolbar [viewModel]=\"vm\"></axp-entity-view-toolbar> -->\n<axp-query-views\n id=\"axp-toolbar-view-selector\"\n [views]=\"viewQueries()\"\n [selectedView]=\"selectedViewQuery()\"\n (selectedViewChange)=\"onViewChanged($event)\"\n></axp-query-views>\n<div class=\"flex items-center gap-2 border-b border-light w-full\">\n <!-- <axp-entity-filter-toolbar [viewModel]=\"vm\"></axp-entity-filter-toolbar> -->\n @if (filtersReady()) {\n <axp-query-filters\n id=\"axp-toolbar-filters\"\n [filtersDefinitions]=\"filtersDefinitions()\"\n [initialFilters]=\"initialFilters()\"\n [quickSearch]=\"true\"\n (onFiltersChanged)=\"onFiltersChanged($event)\"\n ></axp-query-filters>\n }\n\n <div class=\"flex items-center gap-2 md:gap-2\">\n @if (filterTriggerMode === 'manual' && isFiltersDirty()) {\n <ax-button\n id=\"axp-toolbar-btn-filter\"\n [title]=\"'@general:actions.apply.title'\"\n [iconOnly]=\"true\"\n #filterButton\n [color]=\"'primary'\"\n (onClick)=\"applyFilters()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-search\"></i>\n </ax-prefix>\n </ax-button>\n }\n @if (vm.activeListLayout() === 'table') {\n <div>\n <ax-button id=\"axp-toolbar-btn-columns\" [iconOnly]=\"true\" #columnButton [color]=\"'default'\">\n <i class=\"fa-light fa-table-columns\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-columns\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"columnButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #columnsPopover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.common.columns' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-4\">\n <axp-query-columns [columns]=\"vm.columns()\" (columnsChange)=\"onColumnsChange($event)\"></axp-query-columns>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n\n @if (vm.canSort()) {\n <div>\n <ax-button id=\"axp-toolbar-btn-sort\" [iconOnly]=\"true\" [text]=\"'Sorts'\" #sortButton [color]=\"'default'\">\n <i class=\"fa-light fa-sort-amount-up\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-sort\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"sortButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #popover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.common.sorts' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-4\">\n <!-- <axp-list-view-option-sorting [viewModel]=\"vm\"></axp-list-view-option-sorting> -->\n <axp-query-sorts\n [sortDefinitions]=\"sortDefinitions()\"\n (sortQueriesChange)=\"onSortQueriesChange($event)\"\n [initialSortQueries]=\"sortQueries()\"\n ></axp-query-sorts>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n @if (deviceService.isSmall()) {\n <ax-button\n id=\"axp-toolbar-btn-category\"\n (onClick)=\"parent.toggleCategoryDrawer()\"\n [iconOnly]=\"true\"\n [color]=\"'default'\"\n >\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n\n @if (showListDisplayModeControl()) {\n <div>\n <ax-button id=\"axp-toolbar-btn-list-display\" [iconOnly]=\"true\" #listDisplayButton [color]=\"'default'\">\n <i [class]=\"listDisplayModeButtonIcon()\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-list-display\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"listDisplayButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #listDisplayModePopover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.interface.list-display' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-2\">\n <ax-button-item-list>\n @if (hasTableListDisplayOption()) {\n <ax-button-item\n [text]=\"('@general:terms.interface.table-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'table'\"\n (onClick)=\"setListDisplayMode('table')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-table\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n @if (hasTableListDisplayOption() && (hasCardListDisplayOption() || hasRowListDisplayOption())) {\n <ax-divider />\n }\n @if (hasCardListDisplayOption()) {\n <!-- ----- Card grid presentation ----- -->\n <ax-button-item\n [text]=\"('@general:terms.interface.card-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'card'\"\n (onClick)=\"setListDisplayMode('card')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grid-2\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n @if (hasRowListDisplayOption()) {\n <!-- ----- Horizontal row-list presentation ----- -->\n <ax-button-item\n [text]=\"('@general:terms.interface.row-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'row'\"\n (onClick)=\"setListDisplayMode('row')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grip-lines\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$1.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: i3$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.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: AXDropdownModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPQueryFiltersComponent, selector: "axp-query-filters", inputs: ["filtersDefinitions", "initialFilters", "quickSearch"], outputs: ["onFiltersChanged"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i6.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXPQuerySortsComponent, selector: "axp-query-sorts", inputs: ["sortDefinitions", "initialSortQueries"], outputs: ["sortDefinitionsChange", "sortQueriesChange"] }, { kind: "component", type: AXPQueryViewsComponent, selector: "axp-query-views", inputs: ["views", "selectedView"], outputs: ["viewsChange", "selectedViewChange"] }, { kind: "component", type: AXPQueryColumnsComponent, selector: "axp-query-columns", inputs: ["columns"], outputs: ["columnsChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2038
2029
|
}
|
|
2039
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type:
|
|
2030
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, decorators: [{
|
|
2040
2031
|
type: Component,
|
|
2041
|
-
args: [{ selector: 'axp-entity-master-
|
|
2042
|
-
|
|
2032
|
+
args: [{ selector: 'axp-entity-master-toolbar-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
2033
|
+
AsyncPipe,
|
|
2043
2034
|
AXButtonModule,
|
|
2044
|
-
|
|
2035
|
+
AXDecoratorModule,
|
|
2036
|
+
AXDropdownModule,
|
|
2045
2037
|
AXTranslationModule,
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
}
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
}
|
|
2038
|
+
AXPQueryFiltersComponent,
|
|
2039
|
+
AXPopoverModule,
|
|
2040
|
+
AXPQuerySortsComponent,
|
|
2041
|
+
AXPQueryViewsComponent,
|
|
2042
|
+
AXPQueryColumnsComponent,
|
|
2043
|
+
], host: {
|
|
2044
|
+
class: 'w-full',
|
|
2045
|
+
}, template: "<!-- <axp-entity-view-toolbar [viewModel]=\"vm\"></axp-entity-view-toolbar> -->\n<axp-query-views\n id=\"axp-toolbar-view-selector\"\n [views]=\"viewQueries()\"\n [selectedView]=\"selectedViewQuery()\"\n (selectedViewChange)=\"onViewChanged($event)\"\n></axp-query-views>\n<div class=\"flex items-center gap-2 border-b border-light w-full\">\n <!-- <axp-entity-filter-toolbar [viewModel]=\"vm\"></axp-entity-filter-toolbar> -->\n @if (filtersReady()) {\n <axp-query-filters\n id=\"axp-toolbar-filters\"\n [filtersDefinitions]=\"filtersDefinitions()\"\n [initialFilters]=\"initialFilters()\"\n [quickSearch]=\"true\"\n (onFiltersChanged)=\"onFiltersChanged($event)\"\n ></axp-query-filters>\n }\n\n <div class=\"flex items-center gap-2 md:gap-2\">\n @if (filterTriggerMode === 'manual' && isFiltersDirty()) {\n <ax-button\n id=\"axp-toolbar-btn-filter\"\n [title]=\"'@general:actions.apply.title'\"\n [iconOnly]=\"true\"\n #filterButton\n [color]=\"'primary'\"\n (onClick)=\"applyFilters()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-search\"></i>\n </ax-prefix>\n </ax-button>\n }\n @if (vm.activeListLayout() === 'table') {\n <div>\n <ax-button id=\"axp-toolbar-btn-columns\" [iconOnly]=\"true\" #columnButton [color]=\"'default'\">\n <i class=\"fa-light fa-table-columns\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-columns\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"columnButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #columnsPopover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.common.columns' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-4\">\n <axp-query-columns [columns]=\"vm.columns()\" (columnsChange)=\"onColumnsChange($event)\"></axp-query-columns>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n\n @if (vm.canSort()) {\n <div>\n <ax-button id=\"axp-toolbar-btn-sort\" [iconOnly]=\"true\" [text]=\"'Sorts'\" #sortButton [color]=\"'default'\">\n <i class=\"fa-light fa-sort-amount-up\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-sort\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"sortButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #popover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.common.sorts' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-4\">\n <!-- <axp-list-view-option-sorting [viewModel]=\"vm\"></axp-list-view-option-sorting> -->\n <axp-query-sorts\n [sortDefinitions]=\"sortDefinitions()\"\n (sortQueriesChange)=\"onSortQueriesChange($event)\"\n [initialSortQueries]=\"sortQueries()\"\n ></axp-query-sorts>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n @if (deviceService.isSmall()) {\n <ax-button\n id=\"axp-toolbar-btn-category\"\n (onClick)=\"parent.toggleCategoryDrawer()\"\n [iconOnly]=\"true\"\n [color]=\"'default'\"\n >\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n\n @if (showListDisplayModeControl()) {\n <div>\n <ax-button id=\"axp-toolbar-btn-list-display\" [iconOnly]=\"true\" #listDisplayButton [color]=\"'default'\">\n <i [class]=\"listDisplayModeButtonIcon()\"></i>\n </ax-button>\n <ax-popover\n id=\"axp-popover-list-display\"\n [adaptivityEnabled]=\"true\"\n [offsetY]=\"10\"\n [target]=\"listDisplayButton\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n #listDisplayModePopover\n >\n <div class=\"lightest-surface shadow-md border md:w-72 w-full rounded-md\">\n <ax-header class=\"border-b lighter-surface rounded-t-md p-4 font-bold\">\n {{ '@general:terms.interface.list-display' | translate | async }}\n </ax-header>\n <div class=\"py-2 px-2\">\n <ax-button-item-list>\n @if (hasTableListDisplayOption()) {\n <ax-button-item\n [text]=\"('@general:terms.interface.table-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'table'\"\n (onClick)=\"setListDisplayMode('table')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-table\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n @if (hasTableListDisplayOption() && (hasCardListDisplayOption() || hasRowListDisplayOption())) {\n <ax-divider />\n }\n @if (hasCardListDisplayOption()) {\n <!-- ----- Card grid presentation ----- -->\n <ax-button-item\n [text]=\"('@general:terms.interface.card-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'card'\"\n (onClick)=\"setListDisplayMode('card')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grid-2\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n @if (hasRowListDisplayOption()) {\n <!-- ----- Horizontal row-list presentation ----- -->\n <ax-button-item\n [text]=\"('@general:terms.interface.row-view' | translate | async)!\"\n [selected]=\"listDisplayMode() === 'row'\"\n (onClick)=\"setListDisplayMode('row')\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-grip-lines\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </div>\n </div>\n </ax-popover>\n </div>\n }\n </div>\n</div>\n" }]
|
|
2046
|
+
}], propDecorators: { vm: [{
|
|
2047
|
+
type: Input,
|
|
2048
|
+
args: ['viewModel']
|
|
2049
|
+
}], listDisplayModePopover: [{ type: i0.ViewChild, args: ['listDisplayModePopover', { isSignal: true }] }] } });
|
|
2059
2050
|
|
|
2060
2051
|
class AXPEntityMasterListDataTableComponent {
|
|
2061
2052
|
constructor() {
|
|
@@ -2069,11 +2060,11 @@ class AXPEntityMasterListDataTableComponent {
|
|
|
2069
2060
|
...(ngDevMode ? [{ debugName: "gridRef" }] : /* istanbul ignore next */ []));
|
|
2070
2061
|
//#endregion
|
|
2071
2062
|
//#region ---- Computed ----
|
|
2072
|
-
this.resolveRowCssClass = (row, _rowIndex) => {
|
|
2073
|
-
return this.vm().
|
|
2063
|
+
this.resolveRowCssClass = async (row, _rowIndex) => {
|
|
2064
|
+
return toDataTableRowStylingClass(await this.vm().resolveRecordStylingClass(row));
|
|
2074
2065
|
};
|
|
2075
|
-
this.resolveCellCssClass = (row, column, _rowIndex) => {
|
|
2076
|
-
return this.vm().
|
|
2066
|
+
this.resolveCellCssClass = async (row, column, _rowIndex) => {
|
|
2067
|
+
return this.vm().resolveFieldStylingClass(row, this.resolveTableColumnName(column));
|
|
2077
2068
|
};
|
|
2078
2069
|
this.commandRowItems = computed(() => {
|
|
2079
2070
|
return this.vm()
|
|
@@ -2167,8 +2158,11 @@ class AXPEntityMasterListDataTableComponent {
|
|
|
2167
2158
|
//#endregion
|
|
2168
2159
|
//#region ---- Private Helpers ----
|
|
2169
2160
|
resolveTableColumnName(column) {
|
|
2170
|
-
const
|
|
2171
|
-
|
|
2161
|
+
const path = column.name.startsWith('col-') ? column.name.slice('col-'.length) : column.name;
|
|
2162
|
+
const match = this.vm()
|
|
2163
|
+
.columns()
|
|
2164
|
+
.find((item) => item.name === path || item.column?.options?.dataPath === path);
|
|
2165
|
+
return match?.name ?? path;
|
|
2172
2166
|
}
|
|
2173
2167
|
async dropdownRowItems(rowData) {
|
|
2174
2168
|
return (await this.vm().secondaryRowActions(rowData)).map((c) => ({
|
|
@@ -2182,7 +2176,7 @@ class AXPEntityMasterListDataTableComponent {
|
|
|
2182
2176
|
}));
|
|
2183
2177
|
}
|
|
2184
2178
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListDataTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2185
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityMasterListDataTableComponent, isStandalone: true, selector: "axp-entity-master-list-data-table", inputs: { vm: { classPropertyName: "vm", publicName: "vm", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { pageChanged: "pageChanged" }, host: { styleAttribute: "height: -webkit-fill-available;" }, viewQueries: [{ propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true, isSignal: true }], ngImport: i0, template: "<ax-data-table\n id=\"axp-entity-table\"\n [allowReordering]=\"true\"\n (onColumnsOrderChanged)=\"onColumnsOrderChanged($event)\"\n #grid\n [showFooter]=\"false\"\n class=\"flex-1\"\n [paging]=\"true\"\n [fetchDataMode]=\"'manual'\"\n [parentField]=\"vm().parentKey()\"\n [loading]=\"{ enabled: true, animation: true }\"\n [dataSource]=\"vm().dataSource\"\n [highlightText]=\"vm().inlineFilterHighlightText()\"\n [rowCssClass]=\"resolveRowCssClass\"\n [cellCssClass]=\"resolveCellCssClass\"\n (selectedRowsChange)=\"handleSelectedRowsChange($event)\"\n (onRowDbClick)=\"handleRowDbClick($event)\"\n (onColumnSizeChanged)=\"onColumnSizeChanged($event)\"\n (onPageChanged)=\"onPageChanged($event)\"\n>\n @if (vm().showIndexColumn()) {\n <ax-index-column\n id=\"axp-table-col-index\"\n [caption]=\"('@general:terms.common.row-number' | translate | async)!\"\n fixed=\"start\"\n [width]=\"'80px'\"\n [padZero]=\"false\"\n ></ax-index-column>\n }\n @if (vm().selectedScopeActionsCount()) {\n <ax-select-column id=\"axp-table-col-select\" fixed=\"start\" [width]=\"'60px'\"></ax-select-column>\n }\n @for (col of vm().columns(); track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer\n [attr.id]=\"'axp-table-col-' + col.name\"\n [expandHandler]=\"$index === 0 && vm().parentKey() ? true : false\"\n [caption]=\"(col.title | translate | async)!\"\n [node]=\"col.node()\"\n [customWidth]=\"col.width ?? ''\"\n [sortEnabled]=\"!!col.sortEnabled\"\n [headerSortDirection]=\"resolveColumnSortDirection(vm().sortedFields(), col.name)\"\n [headerSortPriority]=\"resolveColumnSortIndex(vm().sortedFields(), col.name)\"\n (sortToggle)=\"handleColumnSort(col.name, $event)\"\n ></axp-widget-column-renderer>\n }\n }\n @if (getCommandRowItems().length) {\n <ax-command-column\n id=\"axp-table-col-commands\"\n fixed=\"end\"\n [width]=\"getCommandRowItems().length * 70 + 'px'\"\n [items]=\"getCommandRowItems()\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n }\n <ax-dropdown-command-column\n id=\"axp-table-col-dropdown-commands\"\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-dropdown-command-column>\n</ax-data-table>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type:
|
|
2179
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityMasterListDataTableComponent, isStandalone: true, selector: "axp-entity-master-list-data-table", inputs: { vm: { classPropertyName: "vm", publicName: "vm", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { pageChanged: "pageChanged" }, host: { styleAttribute: "height: -webkit-fill-available;" }, viewQueries: [{ propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true, isSignal: true }], ngImport: i0, template: "<ax-data-table\n id=\"axp-entity-table\"\n [allowReordering]=\"true\"\n (onColumnsOrderChanged)=\"onColumnsOrderChanged($event)\"\n #grid\n [showFooter]=\"false\"\n class=\"flex-1\"\n [paging]=\"true\"\n [fetchDataMode]=\"'manual'\"\n [parentField]=\"vm().parentKey()\"\n [loading]=\"{ enabled: true, animation: true }\"\n [dataSource]=\"vm().dataSource\"\n [highlightText]=\"vm().inlineFilterHighlightText()\"\n [rowCssClass]=\"resolveRowCssClass\"\n [cellCssClass]=\"resolveCellCssClass\"\n (selectedRowsChange)=\"handleSelectedRowsChange($event)\"\n (onRowDbClick)=\"handleRowDbClick($event)\"\n (onColumnSizeChanged)=\"onColumnSizeChanged($event)\"\n (onPageChanged)=\"onPageChanged($event)\"\n>\n @if (vm().showIndexColumn()) {\n <ax-index-column\n id=\"axp-table-col-index\"\n [caption]=\"('@general:terms.common.row-number' | translate | async)!\"\n fixed=\"start\"\n [width]=\"'80px'\"\n [padZero]=\"false\"\n ></ax-index-column>\n }\n @if (vm().selectedScopeActionsCount()) {\n <ax-select-column id=\"axp-table-col-select\" fixed=\"start\" [width]=\"'60px'\"></ax-select-column>\n }\n @for (col of vm().columns(); track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer\n [attr.id]=\"'axp-table-col-' + col.name\"\n [expandHandler]=\"$index === 0 && vm().parentKey() ? true : false\"\n [caption]=\"(col.title | translate | async)!\"\n [node]=\"col.node()\"\n [customWidth]=\"col.width ?? ''\"\n [sortEnabled]=\"!!col.sortEnabled\"\n [headerSortDirection]=\"resolveColumnSortDirection(vm().sortedFields(), col.name)\"\n [headerSortPriority]=\"resolveColumnSortIndex(vm().sortedFields(), col.name)\"\n (sortToggle)=\"handleColumnSort(col.name, $event)\"\n ></axp-widget-column-renderer>\n }\n }\n @if (getCommandRowItems().length) {\n <ax-command-column\n id=\"axp-table-col-commands\"\n fixed=\"end\"\n [width]=\"getCommandRowItems().length * 70 + 'px'\"\n [items]=\"getCommandRowItems()\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n }\n <ax-dropdown-command-column\n id=\"axp-table-col-dropdown-commands\"\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-dropdown-command-column>\n</ax-data-table>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i8.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i8.AXRowIndexColumnComponent, selector: "ax-index-column", inputs: ["width", "caption", "fixed", "footerTemplate", "padZero"] }, { kind: "component", type: i8.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i8.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i8.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "emptyStateTemplate", "emptyStateText", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i7$1.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "sortEnabled", "headerSortDirection", "headerSortPriority", "columnFixed", "cellTemplate", "headerTemplate"], outputs: ["sortToggle"] }, { kind: "ngmodule", type: AXPWidgetsModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2186
2180
|
}
|
|
2187
2181
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListDataTableComponent, decorators: [{
|
|
2188
2182
|
type: Component,
|
|
@@ -2190,6 +2184,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
2190
2184
|
style: 'height: -webkit-fill-available;',
|
|
2191
2185
|
}, template: "<ax-data-table\n id=\"axp-entity-table\"\n [allowReordering]=\"true\"\n (onColumnsOrderChanged)=\"onColumnsOrderChanged($event)\"\n #grid\n [showFooter]=\"false\"\n class=\"flex-1\"\n [paging]=\"true\"\n [fetchDataMode]=\"'manual'\"\n [parentField]=\"vm().parentKey()\"\n [loading]=\"{ enabled: true, animation: true }\"\n [dataSource]=\"vm().dataSource\"\n [highlightText]=\"vm().inlineFilterHighlightText()\"\n [rowCssClass]=\"resolveRowCssClass\"\n [cellCssClass]=\"resolveCellCssClass\"\n (selectedRowsChange)=\"handleSelectedRowsChange($event)\"\n (onRowDbClick)=\"handleRowDbClick($event)\"\n (onColumnSizeChanged)=\"onColumnSizeChanged($event)\"\n (onPageChanged)=\"onPageChanged($event)\"\n>\n @if (vm().showIndexColumn()) {\n <ax-index-column\n id=\"axp-table-col-index\"\n [caption]=\"('@general:terms.common.row-number' | translate | async)!\"\n fixed=\"start\"\n [width]=\"'80px'\"\n [padZero]=\"false\"\n ></ax-index-column>\n }\n @if (vm().selectedScopeActionsCount()) {\n <ax-select-column id=\"axp-table-col-select\" fixed=\"start\" [width]=\"'60px'\"></ax-select-column>\n }\n @for (col of vm().columns(); track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer\n [attr.id]=\"'axp-table-col-' + col.name\"\n [expandHandler]=\"$index === 0 && vm().parentKey() ? true : false\"\n [caption]=\"(col.title | translate | async)!\"\n [node]=\"col.node()\"\n [customWidth]=\"col.width ?? ''\"\n [sortEnabled]=\"!!col.sortEnabled\"\n [headerSortDirection]=\"resolveColumnSortDirection(vm().sortedFields(), col.name)\"\n [headerSortPriority]=\"resolveColumnSortIndex(vm().sortedFields(), col.name)\"\n (sortToggle)=\"handleColumnSort(col.name, $event)\"\n ></axp-widget-column-renderer>\n }\n }\n @if (getCommandRowItems().length) {\n <ax-command-column\n id=\"axp-table-col-commands\"\n fixed=\"end\"\n [width]=\"getCommandRowItems().length * 70 + 'px'\"\n [items]=\"getCommandRowItems()\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n }\n <ax-dropdown-command-column\n id=\"axp-table-col-dropdown-commands\"\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-dropdown-command-column>\n</ax-data-table>\n" }]
|
|
2192
2186
|
}], propDecorators: { vm: [{ type: i0.Input, args: [{ isSignal: true, alias: "vm", required: true }] }], pageChanged: [{ type: i0.Output, args: ["pageChanged"] }], gridRef: [{ type: i0.ViewChild, args: ['grid', { isSignal: true }] }] } });
|
|
2187
|
+
/** Maps `warning` / `danger` / … to the data table’s `ax-row-color-*` row chrome. */
|
|
2188
|
+
function toDataTableRowStylingClass(cssClass) {
|
|
2189
|
+
if (!cssClass) {
|
|
2190
|
+
return undefined;
|
|
2191
|
+
}
|
|
2192
|
+
const tokens = cssClass
|
|
2193
|
+
.split(/\s+/)
|
|
2194
|
+
.filter(Boolean)
|
|
2195
|
+
.map((token) => AX_DATA_TABLE_ROW_COLOR_TYPES.includes(token) ||
|
|
2196
|
+
AXP_THEME_SURFACE_STYLES.includes(token)
|
|
2197
|
+
? `ax-row-color-${token}`
|
|
2198
|
+
: token);
|
|
2199
|
+
return tokens.length ? tokens.join(' ') : undefined;
|
|
2200
|
+
}
|
|
2193
2201
|
|
|
2194
2202
|
class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponent {
|
|
2195
2203
|
constructor(platform) {
|
|
@@ -2310,13 +2318,14 @@ class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponent {
|
|
|
2310
2318
|
...this.buildListHostTraceSnapshot(),
|
|
2311
2319
|
}));
|
|
2312
2320
|
if (layout === 'table') {
|
|
2313
|
-
// Card
|
|
2314
|
-
|
|
2315
|
-
this.
|
|
2316
|
-
this.scheduleRestoreExpandedRows();
|
|
2321
|
+
// Card accumulate holds more than one data-source page; refetch table page 1.
|
|
2322
|
+
this.vm.resetListPagingSkip();
|
|
2323
|
+
void this.reloadListData(true);
|
|
2317
2324
|
return;
|
|
2318
2325
|
}
|
|
2319
|
-
|
|
2326
|
+
if (previous === 'table') {
|
|
2327
|
+
void this.cardList()?.reload(true);
|
|
2328
|
+
}
|
|
2320
2329
|
});
|
|
2321
2330
|
effect(() => {
|
|
2322
2331
|
if (!this.listHostReady()) {
|
|
@@ -2525,12 +2534,12 @@ class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponent {
|
|
|
2525
2534
|
hasCardList: !!this.cardList(),
|
|
2526
2535
|
dataSource: buildDataSourceTraceSnapshot(this.vm.dataSource),
|
|
2527
2536
|
}));
|
|
2528
|
-
if (!resetPagination) {
|
|
2537
|
+
if (!resetPagination && !this.vm.isCardHostLayout()) {
|
|
2529
2538
|
await this.vm.ensureListPagingResolved();
|
|
2530
2539
|
this.vm.applyPagingToDataSourceWithoutLoad();
|
|
2531
2540
|
}
|
|
2532
|
-
if (this.vm.
|
|
2533
|
-
await this.cardList()?.reload(
|
|
2541
|
+
if (this.vm.isCardHostLayout()) {
|
|
2542
|
+
await this.cardList()?.reload(true);
|
|
2534
2543
|
// Shared DS load updates table rows via onChanged but not isRefreshCalled; prepare for a later table switch.
|
|
2535
2544
|
this.acknowledgeManualTableReady();
|
|
2536
2545
|
traceEntityMasterList('list-view', 'reloadListData complete (card)', () => this.buildListHostTraceSnapshot());
|
|
@@ -2573,7 +2582,7 @@ class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponent {
|
|
|
2573
2582
|
return {
|
|
2574
2583
|
viewName: this.vm.view().name,
|
|
2575
2584
|
activeListLayout: this.vm.activeListLayout(),
|
|
2576
|
-
|
|
2585
|
+
listDisplayMode: this.vm.listDisplayMode(),
|
|
2577
2586
|
hasGrid: !!gridRef,
|
|
2578
2587
|
displayedRowCount: displayedRows.length,
|
|
2579
2588
|
cardList: this.cardList()?.getTraceSnapshot() ?? null,
|
|
@@ -2616,7 +2625,7 @@ class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponent {
|
|
|
2616
2625
|
* Highlights a freshly created row in the active list layout (table or card).
|
|
2617
2626
|
*/
|
|
2618
2627
|
async highlightRowById(rowId) {
|
|
2619
|
-
if (this.vm.
|
|
2628
|
+
if (this.vm.isCardHostLayout()) {
|
|
2620
2629
|
this.cardList()?.highlightCardById(rowId);
|
|
2621
2630
|
return;
|
|
2622
2631
|
}
|
|
@@ -2749,13 +2758,13 @@ class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponent {
|
|
|
2749
2758
|
this.isRestoringExpandedRows = false;
|
|
2750
2759
|
}
|
|
2751
2760
|
}
|
|
2752
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListViewComponent, deps: [{ token: i1$
|
|
2761
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListViewComponent, deps: [{ token: i1$2.AXPlatform }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2753
2762
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityMasterListViewComponent, isStandalone: true, selector: "axp-entity-master-list", providers: [
|
|
2754
2763
|
{
|
|
2755
2764
|
provide: AXPPageLayoutBase,
|
|
2756
2765
|
useExisting: AXPEntityMasterListViewComponent,
|
|
2757
2766
|
},
|
|
2758
|
-
], viewQueries: [{ propertyName: "dataTable", first: true, predicate: AXPEntityMasterListDataTableComponent, descendants: true, isSignal: true }, { propertyName: "cardList", first: true, predicate: AXPEntityMasterListCardListComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.entityDef.category) {\n <axp-layout-start-side id=\"axp-entity-category-drawer\">\n <axp-entity-category\n id=\"axp-entity-category\"\n class=\"w-80\"\n [vm]=\"vm\"\n [searchValue]=\"categorySearchValue()\"\n ></axp-entity-category>\n </axp-layout-start-side>\n }\n <axp-page-toolbar id=\"axp-entity-toolbar\" data-testid=\"entity-list-toolbar\">\n <axp-entity-master-toolbar-view\n [viewModel]=\"vm\"\n ></axp-entity-master-toolbar-view>\n </axp-page-toolbar>\n <axp-page-content class=\"overflow-auto pt-0!\">\n <div\n class=\"flex items-center justify-between gap-1 pb-1 text-muted text-sm\"\n [class.hidden]=\"!vm.selectedItems().length\"\n >\n <span\n >{{ vm.selectedItems().length }}\n <span>{{\n '@general:terms.interface.items-selected' | translate | async\n }}</span>\n </span>\n <ax-button\n text=\"@general:terms.interface.unselect-all\"\n class=\"ax-sm\"\n (onClick)=\"handleUnselectAll()\"\n ></ax-button>\n </div>\n @if (vm.enabledListLayouts().includes('table')) {\n <axp-entity-master-list-data-table\n class=\"axp-entity-list-host\"\n [class.axp-entity-list-host--hidden]=\"vm.activeListLayout() !== 'table'\"\n [vm]=\"vm\"\n (pageChanged)=\"onListPageChanged()\"\n ></axp-entity-master-list-data-table>\n }\n @if (vm.enabledListLayouts().includes('card')) {\n <axp-entity-master-list-card-list\n class=\"axp-entity-list-host\"\n [class.axp-entity-list-host--hidden]=\"vm.activeListLayout() !== 'card'\"\n [vm]=\"vm\"\n (pageChanged)=\"onListPageChanged()\"\n ></axp-entity-master-list-card-list>\n }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["@layer properties;axp-entity-master-list axp-layout-start-side{min-width:calc(var(--spacing, .25rem) * 80)!important;border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}axp-entity-master-list axp-layout-header{padding-bottom:var(--spacing, .25rem)}axp-entity-master-list .axp-entity-list-host{display:flex;height:100%;min-height:0px;flex-direction:column}axp-entity-master-list axp-page-content{display:flex;min-height:0px;flex-direction:column}axp-entity-master-list .axp-entity-list-host--hidden{display:none!important}.cdk-drag-preview{border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:rgba(var(--ax-sys-color-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0%}.view-drawer{width:85vw;background-color:rgba(var(--ax-sys-color-lightest-surface));border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-top-style:var(--tw-border-style);border-top-width:1px;border-top-color:rgba(var(--ax-sys-color-primary-600))}@media(width>=48rem){.view-drawer{width:45vw}}@media(width>=64rem){.view-drawer{width:35vw}}@media(width>=96rem){.view-drawer{width:20vw}}.view-drawer ax-header{display:flex;align-items:center;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lighter-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2)}.view-drawer ax-header h2{font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700);color:rgba(var(--ax-sys-color-on-lighter-surface))}.view-drawer ax-footer{position:absolute;bottom:0;width:100%;justify-content:flex-start;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: AXDecoratorModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXActionSheetModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDialogModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i3$1.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: DragDropModule }, { kind: "ngmodule", type: AXPAuthModule }, { kind: "component", type: AXPEntityMasterToolbarViewComponent, selector: "axp-entity-master-toolbar-view", inputs: ["viewModel"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXPEntityCategoryComponent, selector: "axp-entity-category", inputs: ["vm", "searchValue", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "searchWithChildren"] }, { kind: "component", type: AXPEntityMasterListDataTableComponent, selector: "axp-entity-master-list-data-table", inputs: ["vm"], outputs: ["pageChanged"] }, { kind: "component", type: AXPEntityMasterListCardListComponent, selector: "axp-entity-master-list-card-list", inputs: ["vm"], outputs: ["pageChanged"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2767
|
+
], viewQueries: [{ propertyName: "dataTable", first: true, predicate: AXPEntityMasterListDataTableComponent, descendants: true, isSignal: true }, { propertyName: "cardList", first: true, predicate: AXPEntityMasterListCardListComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.entityDef.category) {\n <axp-layout-start-side id=\"axp-entity-category-drawer\">\n <axp-entity-category\n id=\"axp-entity-category\"\n class=\"w-80\"\n [vm]=\"vm\"\n [searchValue]=\"categorySearchValue()\"\n ></axp-entity-category>\n </axp-layout-start-side>\n }\n <axp-page-toolbar id=\"axp-entity-toolbar\" data-testid=\"entity-list-toolbar\">\n <axp-entity-master-toolbar-view\n [viewModel]=\"vm\"\n ></axp-entity-master-toolbar-view>\n </axp-page-toolbar>\n <axp-page-content class=\"overflow-auto pt-0! pb-0!\">\n <div\n class=\"flex items-center justify-between gap-1 pb-1 text-muted text-sm\"\n [class.hidden]=\"!vm.selectedItems().length\"\n >\n <span\n >{{ vm.selectedItems().length }}\n <span>{{\n '@general:terms.interface.items-selected' | translate | async\n }}</span>\n </span>\n <ax-button\n text=\"@general:terms.interface.unselect-all\"\n class=\"ax-sm\"\n (onClick)=\"handleUnselectAll()\"\n ></ax-button>\n </div>\n @if (vm.enabledListLayouts().includes('table')) {\n <axp-entity-master-list-data-table\n class=\"axp-entity-list-host\"\n [class.axp-entity-list-host--hidden]=\"vm.activeListLayout() !== 'table'\"\n [vm]=\"vm\"\n (pageChanged)=\"onListPageChanged()\"\n ></axp-entity-master-list-data-table>\n }\n @if (vm.enabledListLayouts().includes('card') || vm.enabledListLayouts().includes('row')) {\n <axp-entity-master-list-card-list\n class=\"axp-entity-list-host\"\n [class.axp-entity-list-host--hidden]=\"!vm.isCardHostLayout()\"\n [vm]=\"vm\"\n ></axp-entity-master-list-card-list>\n }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["@layer properties;axp-entity-master-list axp-layout-start-side{min-width:calc(var(--spacing, .25rem) * 80)!important;border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}axp-entity-master-list axp-layout-header{padding-bottom:var(--spacing, .25rem)}axp-entity-master-list .axp-entity-list-host{display:flex;height:100%;min-height:0px;flex-direction:column}axp-entity-master-list axp-page-content{display:flex;min-height:0px;flex-direction:column;padding-bottom:0!important}axp-entity-master-list .axp-entity-list-host--hidden{display:none!important}.cdk-drag-preview{border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:rgba(var(--ax-sys-color-surface));padding:.5rem;height:max-content!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-primary>td{background:rgb(var(--ax-sys-color-primary-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-secondary>td{background:rgb(var(--ax-sys-color-secondary-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-success>td{background:rgb(var(--ax-sys-color-success-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-warning>td{background:rgb(var(--ax-sys-color-warning-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-danger>td{background:rgb(var(--ax-sys-color-danger-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-accent1>td,axp-entity-master-list-data-table ax-data-table tbody tr.accent1>td{background:rgb(var(--ax-sys-color-accent1-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-accent2>td,axp-entity-master-list-data-table ax-data-table tbody tr.accent2>td{background:rgb(var(--ax-sys-color-accent2-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-accent3>td,axp-entity-master-list-data-table ax-data-table tbody tr.accent3>td{background:rgb(var(--ax-sys-color-accent3-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr>td.primary,axp-entity-master-list-data-table ax-data-table tbody tr>td.secondary,axp-entity-master-list-data-table ax-data-table tbody tr>td.success,axp-entity-master-list-data-table ax-data-table tbody tr>td.warning,axp-entity-master-list-data-table ax-data-table tbody tr>td.danger,axp-entity-master-list-data-table ax-data-table tbody tr>td.accent1,axp-entity-master-list-data-table ax-data-table tbody tr>td.accent2,axp-entity-master-list-data-table ax-data-table tbody tr>td.accent3{box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35)}axp-entity-master-list-data-table ax-data-table tbody tr>td.primary{--axp-entity-styling-border: var(--ax-sys-color-border-primary-lightest-surface);background:rgb(var(--ax-sys-color-primary-100))!important;color:rgb(var(--ax-sys-color-on-primary-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.secondary{--axp-entity-styling-border: var(--ax-sys-color-border-secondary-lightest-surface);background:rgb(var(--ax-sys-color-secondary-100))!important;color:rgb(var(--ax-sys-color-on-secondary-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.success{--axp-entity-styling-border: var(--ax-sys-color-border-success-lightest-surface);background:rgb(var(--ax-sys-color-success-100))!important;color:rgb(var(--ax-sys-color-on-success-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.warning{--axp-entity-styling-border: var(--ax-sys-color-border-warning-lightest-surface);background:rgb(var(--ax-sys-color-warning-100))!important;color:rgb(var(--ax-sys-color-on-warning-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.danger{--axp-entity-styling-border: var(--ax-sys-color-border-danger-lightest-surface);background:rgb(var(--ax-sys-color-danger-100))!important;color:rgb(var(--ax-sys-color-on-danger-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.accent1{--axp-entity-styling-border: var(--ax-sys-color-border-accent1-lightest-surface);background:rgb(var(--ax-sys-color-accent1-100))!important;color:rgb(var(--ax-sys-color-on-accent1-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.accent2{--axp-entity-styling-border: var(--ax-sys-color-border-accent2-lightest-surface);background:rgb(var(--ax-sys-color-accent2-100))!important;color:rgb(var(--ax-sys-color-on-accent2-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.accent3{--axp-entity-styling-border: var(--ax-sys-color-border-accent3-lightest-surface);background:rgb(var(--ax-sys-color-accent3-100))!important;color:rgb(var(--ax-sys-color-on-accent3-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr[class*=ax-row-color-]:not(.ax-row-color-pulse) td{animation:none!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0%}.view-drawer{width:85vw;background-color:rgba(var(--ax-sys-color-lightest-surface));border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-top-style:var(--tw-border-style);border-top-width:1px;border-top-color:rgba(var(--ax-sys-color-primary-600))}@media(width>=48rem){.view-drawer{width:45vw}}@media(width>=64rem){.view-drawer{width:35vw}}@media(width>=96rem){.view-drawer{width:20vw}}.view-drawer ax-header{display:flex;align-items:center;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lighter-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2)}.view-drawer ax-header h2{font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700);color:rgba(var(--ax-sys-color-on-lighter-surface))}.view-drawer ax-footer{position:absolute;bottom:0;width:100%;justify-content:flex-start;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$1.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: AXDecoratorModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXActionSheetModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "ngmodule", type: AXDialogModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i3.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: DragDropModule }, { kind: "ngmodule", type: AXPAuthModule }, { kind: "component", type: AXPEntityMasterToolbarViewComponent, selector: "axp-entity-master-toolbar-view", inputs: ["viewModel"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXPEntityCategoryComponent, selector: "axp-entity-category", inputs: ["vm", "searchValue", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "searchWithChildren"] }, { kind: "component", type: AXPEntityMasterListDataTableComponent, selector: "axp-entity-master-list-data-table", inputs: ["vm"], outputs: ["pageChanged"] }, { kind: "component", type: AXPEntityMasterListCardListComponent, selector: "axp-entity-master-list-card-list", inputs: ["vm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2759
2768
|
}
|
|
2760
2769
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityMasterListViewComponent, decorators: [{
|
|
2761
2770
|
type: Component,
|
|
@@ -2793,8 +2802,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
2793
2802
|
provide: AXPPageLayoutBase,
|
|
2794
2803
|
useExisting: AXPEntityMasterListViewComponent,
|
|
2795
2804
|
},
|
|
2796
|
-
], template: "<axp-page-layout *translate=\"let t\">\n @if (vm.entityDef.category) {\n <axp-layout-start-side id=\"axp-entity-category-drawer\">\n <axp-entity-category\n id=\"axp-entity-category\"\n class=\"w-80\"\n [vm]=\"vm\"\n [searchValue]=\"categorySearchValue()\"\n ></axp-entity-category>\n </axp-layout-start-side>\n }\n <axp-page-toolbar id=\"axp-entity-toolbar\" data-testid=\"entity-list-toolbar\">\n <axp-entity-master-toolbar-view\n [viewModel]=\"vm\"\n ></axp-entity-master-toolbar-view>\n </axp-page-toolbar>\n <axp-page-content class=\"overflow-auto pt-0!\">\n <div\n class=\"flex items-center justify-between gap-1 pb-1 text-muted text-sm\"\n [class.hidden]=\"!vm.selectedItems().length\"\n >\n <span\n >{{ vm.selectedItems().length }}\n <span>{{\n '@general:terms.interface.items-selected' | translate | async\n }}</span>\n </span>\n <ax-button\n text=\"@general:terms.interface.unselect-all\"\n class=\"ax-sm\"\n (onClick)=\"handleUnselectAll()\"\n ></ax-button>\n </div>\n @if (vm.enabledListLayouts().includes('table')) {\n <axp-entity-master-list-data-table\n class=\"axp-entity-list-host\"\n [class.axp-entity-list-host--hidden]=\"vm.activeListLayout() !== 'table'\"\n [vm]=\"vm\"\n (pageChanged)=\"onListPageChanged()\"\n ></axp-entity-master-list-data-table>\n }\n @if (vm.enabledListLayouts().includes('card')) {\n <axp-entity-master-list-card-list\n class=\"axp-entity-list-host\"\n [class.axp-entity-list-host--hidden]=\"vm.activeListLayout() !== 'card'\"\n [vm]=\"vm\"\n (pageChanged)=\"onListPageChanged()\"\n ></axp-entity-master-list-card-list>\n }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["@layer properties;axp-entity-master-list axp-layout-start-side{min-width:calc(var(--spacing, .25rem) * 80)!important;border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}axp-entity-master-list axp-layout-header{padding-bottom:var(--spacing, .25rem)}axp-entity-master-list .axp-entity-list-host{display:flex;height:100%;min-height:0px;flex-direction:column}axp-entity-master-list axp-page-content{display:flex;min-height:0px;flex-direction:column}axp-entity-master-list .axp-entity-list-host--hidden{display:none!important}.cdk-drag-preview{border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:rgba(var(--ax-sys-color-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0%}.view-drawer{width:85vw;background-color:rgba(var(--ax-sys-color-lightest-surface));border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-top-style:var(--tw-border-style);border-top-width:1px;border-top-color:rgba(var(--ax-sys-color-primary-600))}@media(width>=48rem){.view-drawer{width:45vw}}@media(width>=64rem){.view-drawer{width:35vw}}@media(width>=96rem){.view-drawer{width:20vw}}.view-drawer ax-header{display:flex;align-items:center;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lighter-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2)}.view-drawer ax-header h2{font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700);color:rgba(var(--ax-sys-color-on-lighter-surface))}.view-drawer ax-footer{position:absolute;bottom:0;width:100%;justify-content:flex-start;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
2797
|
-
}], ctorParameters: () => [{ type: i1$
|
|
2805
|
+
], template: "<axp-page-layout *translate=\"let t\">\n @if (vm.entityDef.category) {\n <axp-layout-start-side id=\"axp-entity-category-drawer\">\n <axp-entity-category\n id=\"axp-entity-category\"\n class=\"w-80\"\n [vm]=\"vm\"\n [searchValue]=\"categorySearchValue()\"\n ></axp-entity-category>\n </axp-layout-start-side>\n }\n <axp-page-toolbar id=\"axp-entity-toolbar\" data-testid=\"entity-list-toolbar\">\n <axp-entity-master-toolbar-view\n [viewModel]=\"vm\"\n ></axp-entity-master-toolbar-view>\n </axp-page-toolbar>\n <axp-page-content class=\"overflow-auto pt-0! pb-0!\">\n <div\n class=\"flex items-center justify-between gap-1 pb-1 text-muted text-sm\"\n [class.hidden]=\"!vm.selectedItems().length\"\n >\n <span\n >{{ vm.selectedItems().length }}\n <span>{{\n '@general:terms.interface.items-selected' | translate | async\n }}</span>\n </span>\n <ax-button\n text=\"@general:terms.interface.unselect-all\"\n class=\"ax-sm\"\n (onClick)=\"handleUnselectAll()\"\n ></ax-button>\n </div>\n @if (vm.enabledListLayouts().includes('table')) {\n <axp-entity-master-list-data-table\n class=\"axp-entity-list-host\"\n [class.axp-entity-list-host--hidden]=\"vm.activeListLayout() !== 'table'\"\n [vm]=\"vm\"\n (pageChanged)=\"onListPageChanged()\"\n ></axp-entity-master-list-data-table>\n }\n @if (vm.enabledListLayouts().includes('card') || vm.enabledListLayouts().includes('row')) {\n <axp-entity-master-list-card-list\n class=\"axp-entity-list-host\"\n [class.axp-entity-list-host--hidden]=\"!vm.isCardHostLayout()\"\n [vm]=\"vm\"\n ></axp-entity-master-list-card-list>\n }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["@layer properties;axp-entity-master-list axp-layout-start-side{min-width:calc(var(--spacing, .25rem) * 80)!important;border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}axp-entity-master-list axp-layout-header{padding-bottom:var(--spacing, .25rem)}axp-entity-master-list .axp-entity-list-host{display:flex;height:100%;min-height:0px;flex-direction:column}axp-entity-master-list axp-page-content{display:flex;min-height:0px;flex-direction:column;padding-bottom:0!important}axp-entity-master-list .axp-entity-list-host--hidden{display:none!important}.cdk-drag-preview{border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:rgba(var(--ax-sys-color-surface));padding:.5rem;height:max-content!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-primary>td{background:rgb(var(--ax-sys-color-primary-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-secondary>td{background:rgb(var(--ax-sys-color-secondary-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-success>td{background:rgb(var(--ax-sys-color-success-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-warning>td{background:rgb(var(--ax-sys-color-warning-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-danger>td{background:rgb(var(--ax-sys-color-danger-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-accent1>td,axp-entity-master-list-data-table ax-data-table tbody tr.accent1>td{background:rgb(var(--ax-sys-color-accent1-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-accent2>td,axp-entity-master-list-data-table ax-data-table tbody tr.accent2>td{background:rgb(var(--ax-sys-color-accent2-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr.ax-row-color-accent3>td,axp-entity-master-list-data-table ax-data-table tbody tr.accent3>td{background:rgb(var(--ax-sys-color-accent3-50))!important}axp-entity-master-list-data-table ax-data-table tbody tr>td.primary,axp-entity-master-list-data-table ax-data-table tbody tr>td.secondary,axp-entity-master-list-data-table ax-data-table tbody tr>td.success,axp-entity-master-list-data-table ax-data-table tbody tr>td.warning,axp-entity-master-list-data-table ax-data-table tbody tr>td.danger,axp-entity-master-list-data-table ax-data-table tbody tr>td.accent1,axp-entity-master-list-data-table ax-data-table tbody tr>td.accent2,axp-entity-master-list-data-table ax-data-table tbody tr>td.accent3{box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35)}axp-entity-master-list-data-table ax-data-table tbody tr>td.primary{--axp-entity-styling-border: var(--ax-sys-color-border-primary-lightest-surface);background:rgb(var(--ax-sys-color-primary-100))!important;color:rgb(var(--ax-sys-color-on-primary-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.secondary{--axp-entity-styling-border: var(--ax-sys-color-border-secondary-lightest-surface);background:rgb(var(--ax-sys-color-secondary-100))!important;color:rgb(var(--ax-sys-color-on-secondary-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.success{--axp-entity-styling-border: var(--ax-sys-color-border-success-lightest-surface);background:rgb(var(--ax-sys-color-success-100))!important;color:rgb(var(--ax-sys-color-on-success-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.warning{--axp-entity-styling-border: var(--ax-sys-color-border-warning-lightest-surface);background:rgb(var(--ax-sys-color-warning-100))!important;color:rgb(var(--ax-sys-color-on-warning-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.danger{--axp-entity-styling-border: var(--ax-sys-color-border-danger-lightest-surface);background:rgb(var(--ax-sys-color-danger-100))!important;color:rgb(var(--ax-sys-color-on-danger-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.accent1{--axp-entity-styling-border: var(--ax-sys-color-border-accent1-lightest-surface);background:rgb(var(--ax-sys-color-accent1-100))!important;color:rgb(var(--ax-sys-color-on-accent1-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.accent2{--axp-entity-styling-border: var(--ax-sys-color-border-accent2-lightest-surface);background:rgb(var(--ax-sys-color-accent2-100))!important;color:rgb(var(--ax-sys-color-on-accent2-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr>td.accent3{--axp-entity-styling-border: var(--ax-sys-color-border-accent3-lightest-surface);background:rgb(var(--ax-sys-color-accent3-100))!important;color:rgb(var(--ax-sys-color-on-accent3-lightest-surface))}axp-entity-master-list-data-table ax-data-table tbody tr[class*=ax-row-color-]:not(.ax-row-color-pulse) td{animation:none!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0%}.view-drawer{width:85vw;background-color:rgba(var(--ax-sys-color-lightest-surface));border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px;border-top-style:var(--tw-border-style);border-top-width:1px;border-top-color:rgba(var(--ax-sys-color-primary-600))}@media(width>=48rem){.view-drawer{width:45vw}}@media(width>=64rem){.view-drawer{width:35vw}}@media(width>=96rem){.view-drawer{width:20vw}}.view-drawer ax-header{display:flex;align-items:center;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));background-color:rgba(var(--ax-sys-color-lighter-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2)}.view-drawer ax-header h2{font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700);color:rgba(var(--ax-sys-color-on-lighter-surface))}.view-drawer ax-footer{position:absolute;bottom:0;width:100%;justify-content:flex-start;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 2)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
2806
|
+
}], ctorParameters: () => [{ type: i1$2.AXPlatform }], propDecorators: { dataTable: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPEntityMasterListDataTableComponent), { isSignal: true }] }], cardList: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPEntityMasterListCardListComponent), { isSignal: true }] }] } });
|
|
2798
2807
|
|
|
2799
2808
|
var entityMasterListView_component = /*#__PURE__*/Object.freeze({
|
|
2800
2809
|
__proto__: null,
|
|
@@ -2803,12 +2812,12 @@ var entityMasterListView_component = /*#__PURE__*/Object.freeze({
|
|
|
2803
2812
|
|
|
2804
2813
|
class AXPRootLayoutFooterComponent {
|
|
2805
2814
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRootLayoutFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2806
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPRootLayoutFooterComponent, isStandalone: true, selector: "axp-dashboard-admin-footer", host: { classAttribute: "h-10 flex item-center justify-between bg-lighter border-border-lighter
|
|
2815
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPRootLayoutFooterComponent, isStandalone: true, selector: "axp-dashboard-admin-footer", host: { classAttribute: "h-10 flex item-center justify-between bg-lighter border-border-lighter border-t shrink-0 px-4" }, providers: [], ngImport: i0, template: "<div class=\"flex items-center justify-start gap-1\">\n <axp-component-slot name=\"root-footer-start\"></axp-component-slot>\n</div>\n<div class=\"flex items-center justify-end gap-1\">\n <axp-component-slot name=\"root-footer-end\"></axp-component-slot>\n</div>\n", dependencies: [{ kind: "ngmodule", type: AXPComponentSlotModule }, { kind: "directive", type: i1$3.AXPComponentSlotDirective, selector: "axp-component-slot", inputs: ["name", "host", "context"], exportAs: ["slot"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2807
2816
|
}
|
|
2808
2817
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRootLayoutFooterComponent, decorators: [{
|
|
2809
2818
|
type: Component,
|
|
2810
2819
|
args: [{ selector: 'axp-dashboard-admin-footer', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [], host: {
|
|
2811
|
-
class: 'h-10 flex item-center justify-between bg-lighter border-border-lighter
|
|
2820
|
+
class: 'h-10 flex item-center justify-between bg-lighter border-border-lighter border-t shrink-0 px-4',
|
|
2812
2821
|
}, standalone: true, imports: [AXPComponentSlotModule], template: "<div class=\"flex items-center justify-start gap-1\">\n <axp-component-slot name=\"root-footer-start\"></axp-component-slot>\n</div>\n<div class=\"flex items-center justify-end gap-1\">\n <axp-component-slot name=\"root-footer-end\"></axp-component-slot>\n</div>\n" }]
|
|
2813
2822
|
}] });
|
|
2814
2823
|
|
|
@@ -2850,6 +2859,7 @@ class AXPRouteTabBarComponent {
|
|
|
2850
2859
|
//#region ---- Services & Dependencies ----
|
|
2851
2860
|
this.tabNavigation = inject(AXPTabNavigationService);
|
|
2852
2861
|
this.tabPreviewService = inject(AXPTabPreviewService);
|
|
2862
|
+
this.themeStore = inject(AXPLayoutThemeService);
|
|
2853
2863
|
this.translateService = inject(AXTranslationService);
|
|
2854
2864
|
this.host = inject((ElementRef));
|
|
2855
2865
|
this.tabStrip = viewChild('tabStrip', /* @ts-ignore */
|
|
@@ -2868,6 +2878,8 @@ class AXPRouteTabBarComponent {
|
|
|
2868
2878
|
...(ngDevMode ? [{ debugName: "isTabDragging" }] : /* istanbul ignore next */ []));
|
|
2869
2879
|
this.inHeader = signal(false, /* @ts-ignore */
|
|
2870
2880
|
...(ngDevMode ? [{ debugName: "inHeader" }] : /* istanbul ignore next */ []));
|
|
2881
|
+
this.simpleHeaderTabs = computed(() => this.inHeader() && !this.themeStore.headerBrandEnabled(), /* @ts-ignore */
|
|
2882
|
+
...(ngDevMode ? [{ debugName: "simpleHeaderTabs" }] : /* istanbul ignore next */ []));
|
|
2871
2883
|
this.tabTitleTooltipOpenAfterMs = AXP_ROUTE_TAB_TITLE_TOOLTIP_OPEN_AFTER_MS;
|
|
2872
2884
|
//#endregion
|
|
2873
2885
|
//#region ---- Layout State ----
|
|
@@ -3243,13 +3255,14 @@ class AXPRouteTabBarComponent {
|
|
|
3243
3255
|
/** Scrolls the active tab into view when the strip overflows horizontally. */
|
|
3244
3256
|
#scrollActiveTabIntoView;
|
|
3245
3257
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRouteTabBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3246
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRouteTabBarComponent, isStandalone: true, selector: "axp-route-tab-bar", host: { properties: { "class.axp-route-tab-bar--scrollable": "hasHorizontalOverflow()" }, classAttribute: "axp-route-tab-bar" }, viewQueries: [{ propertyName: "tabStrip", first: true, predicate: ["tabStrip"], descendants: true, isSignal: true }, { propertyName: "tabsScroll", first: true, predicate: ["tabsScroll"], descendants: true, isSignal: true }, { propertyName: "contextMenu", first: true, predicate: ["tabContextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (tabNavigation.isTabBarVisible()) {\n <div class=\"axp-route-tab-bar__strip\" #tabStrip [style.--axp-tab-width.px]=\"tabWidthPx()\">\n <div class=\"axp-route-tab-bar__viewport\">\n @if (canScrollBackward()) {\n <div class=\"axp-route-tab-bar__scroll-rail axp-route-tab-bar__scroll-rail--start\">\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__scroll-btn\"\n [title]=\"'@general:actions.scroll-tabs-back.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.scroll-tabs-back.title' | translate | async\"\n (click)=\"scrollTabs('backward')\"\n >\n <ax-icon [icon]=\"scrollBackwardIcon()\"></ax-icon>\n </button>\n </div>\n }\n\n <div\n class=\"axp-route-tab-bar__scroll-wrap\"\n [class.axp-route-tab-bar__scroll-wrap--overflow-start]=\"canScrollBackward()\"\n [class.axp-route-tab-bar__scroll-wrap--overflow-end]=\"canScrollForward()\"\n >\n <div\n #tabsScroll\n class=\"axp-route-tab-bar__scroll\"\n [class.axp-route-tab-bar__scroll--panning]=\"isMiddlePanning()\"\n (mousedown)=\"onTabsScrollMouseDown($event)\"\n >\n <div\n class=\"axp-route-tab-bar__tab-list\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"tabNavigation.tabList()\"\n (cdkDropListDropped)=\"onTabDropped($event)\"\n >\n @for (tab of tabNavigation.tabList(); track tab.key) {\n @let tabTitle = (tab.title | translate | async) || '';\n @let tabTitleParts = resolveTabTitleParts(tab, tabTitle);\n @let isTabDirty = !!tabPreviewService.previews()[tab.key]?.isDirty;\n @let isTabActive = tabNavigation.activeKey() === tab.key;\n <ng-template #tabTitleTooltip>\n <div class=\"axp-route-tab-bar__title-tooltip\">\n <span class=\"axp-route-tab-bar__title-tooltip-prefix\">{{ tabTitleParts.prefix }}</span>\n <span class=\"axp-route-tab-bar__title-tooltip-leaf\">{{ tabTitleParts.leaf }}</span>\n @if (isTabDirty) {\n <span class=\"axp-route-tab-bar__title-tooltip-dirty\">\n {{ '@general:terms.interface.save-status.not-saved.description' | translate | async }}\n </span>\n }\n </div>\n </ng-template>\n <div\n class=\"axp-route-tab-bar__tab\"\n [class.axp-route-tab-bar__tab--active]=\"isTabActive\"\n [class.axp-route-tab-bar__tab--dirty]=\"isTabDirty\"\n [class.axp-route-tab-bar__tab--dragging]=\"isTabDragging()\"\n [attr.data-tab-key]=\"tab.key\"\n role=\"tab\"\n [attr.aria-selected]=\"isTabActive\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n [cdkDragData]=\"tab\"\n [cdkDragDisabled]=\"isTabDragDisabled(tab)\"\n (cdkDragStarted)=\"onTabDragStarted()\"\n (cdkDragEnded)=\"onTabDragEnded()\"\n (click)=\"onTabActivate(tab, $event)\"\n >\n <div\n class=\"axp-route-tab-bar__tab-inner\"\n cdkDragHandle\n [axTooltip]=\"tabTitleTooltip\"\n [axTooltipOpenAfter]=\"tabTitleTooltipOpenAfterMs\"\n [axTooltipDisabled]=\"!tabTitleParts.prefix || isTabActive\"\n axTooltipPlacement=\"bottom\"\n [attr.aria-label]=\"isTabDirty ? ('@general:terms.interface.save-status.not-saved.title' | translate | async) : null\"\n (contextmenu)=\"openTabContextMenu($event, tab.key)\"\n (auxclick)=\"onTabMiddleClick(tab, $event)\"\n >\n <span class=\"axp-route-tab-bar__tab-icon\" aria-hidden=\"true\">\n <ax-icon [icon]=\"resolveTabIcon(tab)\"></ax-icon>\n </span>\n\n <span class=\"axp-route-tab-bar__tab-title-fade\" axpRouteTabTitleOverflow>\n <span class=\"axp-route-tab-bar__tab-title\">{{ tabTitleParts.leaf }}</span>\n </span>\n\n @if (tab.pinned) {\n <span class=\"axp-route-tab-bar__pin\" aria-hidden=\"true\">\n <ax-icon icon=\"fa-solid fa-thumbtack\"></ax-icon>\n </span>\n } @else if (tab.closable) {\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__close\"\n [title]=\"'@general:actions.close-tab.title' | translate | async\"\n (click)=\"onTabCloseClick(tab, $event)\"\n >\n <ax-icon icon=\"far fa-xmark\"></ax-icon>\n </button>\n }\n </div>\n\n <ng-template cdkDragPreview>\n <div\n class=\"axp-route-tab-bar__drag-preview\"\n [class.axp-route-tab-bar__drag-preview--in-header]=\"inHeader()\"\n [class.axp-route-tab-bar__drag-preview--active]=\"isTabActive\"\n [class.axp-route-tab-bar__drag-preview--dirty]=\"isTabDirty\"\n [style.width.px]=\"tabWidthPx()\"\n >\n <div class=\"axp-route-tab-bar__drag-preview-inner\">\n <span class=\"axp-route-tab-bar__tab-icon\" aria-hidden=\"true\">\n <ax-icon [icon]=\"resolveTabIcon(tab)\"></ax-icon>\n </span>\n <span class=\"axp-route-tab-bar__tab-title\">{{ tabTitleParts.leaf }}</span>\n </div>\n </div>\n </ng-template>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (canScrollForward()) {\n <div class=\"axp-route-tab-bar__scroll-rail axp-route-tab-bar__scroll-rail--end\">\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__scroll-btn\"\n [title]=\"'@general:actions.scroll-tabs-forward.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.scroll-tabs-forward.title' | translate | async\"\n (click)=\"scrollTabs('forward')\"\n >\n <ax-icon [icon]=\"scrollForwardIcon()\"></ax-icon>\n </button>\n </div>\n }\n </div>\n </div>\n}\n\n<ax-context-menu\n #tabContextMenu\n [closeOn]=\"'click'\"\n [orientation]=\"'vertical'\"\n (onItemClick)=\"handleTabContextMenuItemClick($event)\"\n></ax-context-menu>\n", styles: ["@layer properties;axp-route-tab-bar{display:block;min-width:0px;--axp-route-tab-bar-fade: var(--ax-sys-color-lightest-surface);--axp-route-tab-bar-chevron-size: 2rem}axp-route-tab-bar .axp-route-tab-bar__strip{display:flex;min-width:0px;align-items:stretch;gap:calc(var(--spacing, .25rem) * 2)}axp-route-tab-bar .axp-route-tab-bar__viewport{display:flex;height:100%;min-width:0px;flex:auto;flex-direction:row;align-items:center;gap:var(--spacing, .25rem)}axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs,axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs .tabs-scroll-area,axp-route-tab-bar .axp-route-tab-bar__viewport .axp-route-tab-bar__tab-list{overflow:visible!important;scrollbar-width:none!important;-ms-overflow-style:none!important}axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs::-webkit-scrollbar,axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs .tabs-scroll-area::-webkit-scrollbar,axp-route-tab-bar .axp-route-tab-bar__viewport .axp-route-tab-bar__tab-list::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}axp-route-tab-bar .axp-route-tab-bar__scroll-rail{display:flex;align-items:center;justify-content:center;align-self:center;flex:0 0 var(--axp-route-tab-bar-chevron-size);width:var(--axp-route-tab-bar-chevron-size);min-width:var(--axp-route-tab-bar-chevron-size);height:var(--axp-route-tab-bar-tab-row-height, 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap{position:relative;height:100%;min-width:0px;flex:auto;overflow:hidden}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-start:before,axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-end:after{pointer-events:none;position:absolute;z-index:1;content:\"\";inset-block:0;width:1.5rem}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-start:before{inset-inline-start:0;background:linear-gradient(to right,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-end:after{inset-inline-end:0;background:linear-gradient(to left,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll{height:100%;width:100%;min-width:0px;cursor:default;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scrollbar-width:none!important;-ms-overflow-style:none!important}axp-route-tab-bar .axp-route-tab-bar__scroll::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}axp-route-tab-bar .axp-route-tab-bar__scroll.axp-route-tab-bar__scroll--panning,axp-route-tab-bar .axp-route-tab-bar__scroll.axp-route-tab-bar__scroll--panning *{cursor:grabbing;-webkit-user-select:none;user-select:none}axp-route-tab-bar .axp-route-tab-bar__tabs-host{height:100%;min-width:0px;width:max-content}axp-route-tab-bar .axp-route-tab-bar__tab-list{display:flex;height:100%;width:max-content;min-width:max-content;flex:none;flex-wrap:nowrap;align-items:stretch;gap:calc(var(--spacing, .25rem) * 2)}axp-route-tab-bar .axp-route-tab-bar__tab-list.cdk-drop-list-dragging .axp-route-tab-bar__tab:not(.cdk-drag-placeholder){transition:transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab{height:100%;cursor:pointer;flex:0 0 var(--axp-tab-width, 5.5rem);width:var(--axp-tab-width, 5.5rem);min-width:var(--axp-tab-width, 5.5rem);max-width:var(--axp-tab-width, 5.5rem);transform:translateY(0);transition:background-color .15s ease,color .15s ease,border-color .15s ease,transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-disabled{cursor:pointer}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-dragging,axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-dragging .axp-route-tab-bar__tab-inner{cursor:grabbing}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-placeholder{opacity:.35}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-animating{transition:transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab:hover .axp-route-tab-bar__close,axp-route-tab-bar .axp-route-tab-bar__tab .axp-route-tab-bar__close:focus-visible{pointer-events:auto;width:1.25rem;opacity:.72}axp-route-tab-bar .axp-route-tab-bar__scroll-btn{margin:0;display:inline-flex;height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 6);cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:inherit;opacity:.88;border-radius:var(--ax-sys-border-radius);transition:opacity .15s ease}axp-route-tab-bar .axp-route-tab-bar__scroll-btn ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}axp-route-tab-bar .axp-route-tab-bar__scroll-btn:hover,axp-route-tab-bar .axp-route-tab-bar__scroll-btn:focus-visible{opacity:1}axp-route-tab-bar .axp-route-tab-bar__scroll-btn:focus-visible{outline:2px solid rgb(var(--ax-sys-color-primary-500));outline-offset:1px}axp-route-tab-bar .axp-route-tab-bar__tab-inner{position:relative;display:flex;height:100%;width:100%;max-width:100%;min-width:0px;cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 1.5);padding-inline:.625rem}axp-route-tab-bar .axp-route-tab-bar__tab-inner.cdk-drag-handle{cursor:pointer}axp-route-tab-bar .axp-route-tab-bar__tab--dirty{position:relative}axp-route-tab-bar .axp-route-tab-bar__tab--dirty:before{pointer-events:none;position:absolute;inset:0;z-index:1;content:\"\";border-radius:inherit;border-top:2px solid rgb(var(--ax-sys-color-warning-500))}axp-route-tab-bar .axp-route-tab-bar__tab-icon{display:inline-flex;flex-shrink:0}axp-route-tab-bar .axp-route-tab-bar__tab-icon ax-icon{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}axp-route-tab-bar .axp-route-tab-bar__tab-title-fade{position:relative;max-width:100%;min-width:0px;flex:auto;overflow:hidden}axp-route-tab-bar .axp-route-tab-bar__tab-title-fade.axp-route-tab-bar__tab-title-fade--overflowing .axp-route-tab-bar__tab-title{-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.25rem),transparent 100%);mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.25rem),transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__tab-title{display:block;width:100%;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);text-overflow:ellipsis;white-space:nowrap}axp-route-tab-bar .axp-route-tab-bar__pin{display:inline-flex;flex-shrink:0;color:inherit}axp-route-tab-bar .axp-route-tab-bar__pin ax-icon{font-size:.6875rem}axp-route-tab-bar .axp-route-tab-bar__close{margin:0;display:inline-flex;height:calc(var(--spacing, .25rem) * 5);flex-shrink:0;cursor:pointer;align-items:center;justify-content:center;overflow:hidden;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;width:0;color:inherit;border-radius:var(--ax-sys-border-radius);opacity:0;pointer-events:none;transition:opacity .15s ease,width .15s ease,background-color .15s ease}axp-route-tab-bar .axp-route-tab-bar__close ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}axp-route-tab-bar .axp-route-tab-bar__close:hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header){border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__strip{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);padding-inline:.5rem}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab:hover:not(.axp-route-tab-bar__tab--active){background-color:var(--color-light);color:var(--color-on-light);border-color:var(--color-border-light)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}axp-route-tab-bar.axp-route-tab-bar--in-header{height:100%;align-self:stretch;--axp-route-tab-bar-fade: var(--ax-sys-color-primary-surface);--axp-route-tab-bar-tab-row-height: 2.25rem}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__strip{display:flex;height:100%;align-items:stretch;align-self:stretch;background-color:transparent;color:rgb(var(--ax-sys-color-on-primary-surface))}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__viewport{align-items:flex-end}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-rail{margin-bottom:0;align-self:flex-end}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-wrap--overflow-start:before,axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-wrap--overflow-end:after{inset-block-end:0;inset-block-start:auto;height:var(--axp-route-tab-bar-tab-row-height)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll{cursor:default}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab-list{min-height:0px;align-items:flex-end;align-self:stretch;padding-top:calc(var(--spacing, .25rem) * 4)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab{align-self:center;border-top-left-radius:var(--radius-lg, .5rem);border-top-right-radius:var(--radius-lg, .5rem);border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:var(--color-primary-dark);color:var(--color-on-primary-dark);border-color:var(--color-border-primary-dark);padding:0}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab ax-icon{color:inherit}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab:hover:not(.axp-route-tab-bar__tab--active){background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-primary-darkest);color:var(--color-on-primary-darkest);border-color:var(--color-border-primary-darkest)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab .axp-route-tab-bar__close:hover{background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active .axp-route-tab-bar__close:hover{background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__scroll-wrap--overflow-start:before{background:linear-gradient(to left,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__scroll-wrap--overflow-end:after{background:linear-gradient(to right,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__tab-title-fade--overflowing .axp-route-tab-bar__tab-title{-webkit-mask-image:linear-gradient(to left,#000 0,#000 calc(100% - 1.25rem),transparent 100%);mask-image:linear-gradient(to left,#000 0,#000 calc(100% - 1.25rem),transparent 100%)}.cdk-drag-preview.axp-route-tab-bar__drag-preview{box-sizing:border-box;display:flex;cursor:grabbing;align-items:center;height:var(--axp-route-tab-bar-tab-row-height, 2.25rem);opacity:.96;box-shadow:0 4px 12px rgb(var(--ax-sys-color-dark)/.16),0 1px 3px rgb(var(--ax-sys-color-dark)/.12)}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__drag-preview-inner{display:flex;height:100%;width:100%;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:.625rem}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-icon{display:inline-flex;flex-shrink:0}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-icon ax-icon{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-title{min-width:0px;flex:auto;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);text-overflow:ellipsis;white-space:nowrap}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--dirty{position:relative}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--dirty:before{pointer-events:none;position:absolute;inset:0;z-index:1;content:\"\";border-radius:inherit;border-top:2px solid rgb(var(--ax-sys-color-warning-500))}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header{border-top-left-radius:var(--radius-lg, .5rem);border-top-right-radius:var(--radius-lg, .5rem);border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:var(--color-primary-dark);color:var(--color-on-primary-dark);border-color:var(--color-border-primary-dark)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-primary-darkest);color:var(--color-on-primary-darkest);border-color:var(--color-border-primary-darkest)}.cdk-drag-preview.axp-route-tab-bar__drag-preview:not(.axp-route-tab-bar__drag-preview--in-header){border-radius:var(--radius-md, .375rem);background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}.cdk-drag-preview.axp-route-tab-bar__drag-preview:not(.axp-route-tab-bar__drag-preview--in-header).axp-route-tab-bar__drag-preview--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}.axp-route-tab-bar__title-tooltip{display:flex;max-width:calc(var(--spacing, .25rem) * 80);flex-direction:column;gap:var(--spacing, .25rem);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);text-align:start;border-radius:var(--ax-sys-border-radius);background:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));box-shadow:0 4px 12px rgb(var(--ax-sys-color-dark)/.12),0 1px 3px rgb(var(--ax-sys-color-dark)/.08)}.axp-route-tab-bar__title-tooltip-prefix{display:block;overflow:hidden;font-size:.6875rem;--tw-leading: calc(var(--spacing, .25rem) * 4);line-height:calc(var(--spacing, .25rem) * 4);text-overflow:ellipsis;white-space:nowrap;opacity:.82}.axp-route-tab-bar__title-tooltip-leaf{display:block;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);text-overflow:ellipsis;white-space:nowrap}.axp-route-tab-bar__title-tooltip-dirty{margin-top:var(--spacing, .25rem);border-top-style:var(--tw-border-style);border-top-width:1px;padding-top:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: 1.125rem;line-height:1.125rem;border-color:rgb(var(--ax-sys-color-border-light-surface));color:rgb(var(--ax-sys-color-warning-600))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i2$3.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "closeOnRouteChange", "items", "target"], outputs: ["onItemClick", "onOpening", "onClose"] }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3258
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRouteTabBarComponent, isStandalone: true, selector: "axp-route-tab-bar", host: { properties: { "class.axp-route-tab-bar--scrollable": "hasHorizontalOverflow()", "class.axp-route-tab-bar--simple-header": "simpleHeaderTabs()" }, classAttribute: "axp-route-tab-bar" }, viewQueries: [{ propertyName: "tabStrip", first: true, predicate: ["tabStrip"], descendants: true, isSignal: true }, { propertyName: "tabsScroll", first: true, predicate: ["tabsScroll"], descendants: true, isSignal: true }, { propertyName: "contextMenu", first: true, predicate: ["tabContextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (tabNavigation.isTabBarVisible()) {\n <div class=\"axp-route-tab-bar__strip\" #tabStrip [style.--axp-tab-width.px]=\"tabWidthPx()\">\n <div class=\"axp-route-tab-bar__viewport\">\n @if (canScrollBackward()) {\n <div class=\"axp-route-tab-bar__scroll-rail axp-route-tab-bar__scroll-rail--start\">\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__scroll-btn\"\n [title]=\"'@general:actions.scroll-tabs-back.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.scroll-tabs-back.title' | translate | async\"\n (click)=\"scrollTabs('backward')\"\n >\n <ax-icon [icon]=\"scrollBackwardIcon()\"></ax-icon>\n </button>\n </div>\n }\n\n <div\n class=\"axp-route-tab-bar__scroll-wrap\"\n [class.axp-route-tab-bar__scroll-wrap--overflow-start]=\"canScrollBackward()\"\n [class.axp-route-tab-bar__scroll-wrap--overflow-end]=\"canScrollForward()\"\n >\n <div\n #tabsScroll\n class=\"axp-route-tab-bar__scroll\"\n [class.axp-route-tab-bar__scroll--panning]=\"isMiddlePanning()\"\n (mousedown)=\"onTabsScrollMouseDown($event)\"\n >\n <div\n class=\"axp-route-tab-bar__tab-list\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"tabNavigation.tabList()\"\n (cdkDropListDropped)=\"onTabDropped($event)\"\n >\n @for (tab of tabNavigation.tabList(); track tab.key) {\n @let tabTitle = (tab.title | translate | async) || '';\n @let tabTitleParts = resolveTabTitleParts(tab, tabTitle);\n @let isTabDirty = !!tabPreviewService.previews()[tab.key]?.isDirty;\n @let isTabActive = tabNavigation.activeKey() === tab.key;\n <ng-template #tabTitleTooltip>\n <div class=\"axp-route-tab-bar__title-tooltip\">\n <span class=\"axp-route-tab-bar__title-tooltip-prefix\">{{ tabTitleParts.prefix }}</span>\n <span class=\"axp-route-tab-bar__title-tooltip-leaf\">{{ tabTitleParts.leaf }}</span>\n @if (isTabDirty) {\n <span class=\"axp-route-tab-bar__title-tooltip-dirty\">\n {{ '@general:terms.interface.save-status.not-saved.description' | translate | async }}\n </span>\n }\n </div>\n </ng-template>\n <div\n class=\"axp-route-tab-bar__tab\"\n [class.axp-route-tab-bar__tab--active]=\"isTabActive\"\n [class.axp-route-tab-bar__tab--dirty]=\"isTabDirty\"\n [class.axp-route-tab-bar__tab--dragging]=\"isTabDragging()\"\n [attr.data-tab-key]=\"tab.key\"\n role=\"tab\"\n [attr.aria-selected]=\"isTabActive\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n [cdkDragData]=\"tab\"\n [cdkDragDisabled]=\"isTabDragDisabled(tab)\"\n (cdkDragStarted)=\"onTabDragStarted()\"\n (cdkDragEnded)=\"onTabDragEnded()\"\n (click)=\"onTabActivate(tab, $event)\"\n >\n <div\n class=\"axp-route-tab-bar__tab-inner\"\n cdkDragHandle\n [axTooltip]=\"tabTitleTooltip\"\n [axTooltipOpenAfter]=\"tabTitleTooltipOpenAfterMs\"\n [axTooltipDisabled]=\"!tabTitleParts.prefix || isTabActive\"\n axTooltipPlacement=\"bottom\"\n [attr.aria-label]=\"isTabDirty ? ('@general:terms.interface.save-status.not-saved.title' | translate | async) : null\"\n (contextmenu)=\"openTabContextMenu($event, tab.key)\"\n (auxclick)=\"onTabMiddleClick(tab, $event)\"\n >\n <span class=\"axp-route-tab-bar__tab-icon\" aria-hidden=\"true\">\n <ax-icon [icon]=\"resolveTabIcon(tab)\"></ax-icon>\n </span>\n\n <span class=\"axp-route-tab-bar__tab-title-fade\" axpRouteTabTitleOverflow>\n <span class=\"axp-route-tab-bar__tab-title\">{{ tabTitleParts.leaf }}</span>\n </span>\n\n @if (tab.pinned) {\n <span class=\"axp-route-tab-bar__pin\" aria-hidden=\"true\">\n <ax-icon icon=\"fa-solid fa-thumbtack\"></ax-icon>\n </span>\n } @else if (tab.closable) {\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__close\"\n [title]=\"'@general:actions.close-tab.title' | translate | async\"\n (click)=\"onTabCloseClick(tab, $event)\"\n >\n <ax-icon icon=\"far fa-xmark\"></ax-icon>\n </button>\n }\n </div>\n\n <ng-template cdkDragPreview>\n <div\n class=\"axp-route-tab-bar__drag-preview\"\n [class.axp-route-tab-bar__drag-preview--in-header]=\"inHeader()\"\n [class.axp-route-tab-bar__drag-preview--simple-header]=\"simpleHeaderTabs()\"\n [class.axp-route-tab-bar__drag-preview--active]=\"isTabActive\"\n [class.axp-route-tab-bar__drag-preview--dirty]=\"isTabDirty\"\n [style.width.px]=\"tabWidthPx()\"\n >\n <div class=\"axp-route-tab-bar__drag-preview-inner\">\n <span class=\"axp-route-tab-bar__tab-icon\" aria-hidden=\"true\">\n <ax-icon [icon]=\"resolveTabIcon(tab)\"></ax-icon>\n </span>\n <span class=\"axp-route-tab-bar__tab-title\">{{ tabTitleParts.leaf }}</span>\n </div>\n </div>\n </ng-template>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (canScrollForward()) {\n <div class=\"axp-route-tab-bar__scroll-rail axp-route-tab-bar__scroll-rail--end\">\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__scroll-btn\"\n [title]=\"'@general:actions.scroll-tabs-forward.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.scroll-tabs-forward.title' | translate | async\"\n (click)=\"scrollTabs('forward')\"\n >\n <ax-icon [icon]=\"scrollForwardIcon()\"></ax-icon>\n </button>\n </div>\n }\n </div>\n </div>\n}\n\n<ax-context-menu\n #tabContextMenu\n [closeOn]=\"'click'\"\n [orientation]=\"'vertical'\"\n (onItemClick)=\"handleTabContextMenuItemClick($event)\"\n></ax-context-menu>\n", styles: ["@layer properties;axp-route-tab-bar{display:block;min-width:0px;--axp-route-tab-bar-fade: var(--ax-sys-color-lightest-surface);--axp-route-tab-bar-chevron-size: 2rem}axp-route-tab-bar .axp-route-tab-bar__strip{display:flex;min-width:0px;align-items:stretch;gap:calc(var(--spacing, .25rem) * 2)}axp-route-tab-bar .axp-route-tab-bar__viewport{display:flex;height:100%;min-width:0px;flex:auto;flex-direction:row;align-items:center;gap:var(--spacing, .25rem)}axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs,axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs .tabs-scroll-area,axp-route-tab-bar .axp-route-tab-bar__viewport .axp-route-tab-bar__tab-list{overflow:visible!important;scrollbar-width:none!important;-ms-overflow-style:none!important}axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs::-webkit-scrollbar,axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs .tabs-scroll-area::-webkit-scrollbar,axp-route-tab-bar .axp-route-tab-bar__viewport .axp-route-tab-bar__tab-list::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}axp-route-tab-bar .axp-route-tab-bar__scroll-rail{display:flex;align-items:center;justify-content:center;align-self:center;flex:0 0 var(--axp-route-tab-bar-chevron-size);width:var(--axp-route-tab-bar-chevron-size);min-width:var(--axp-route-tab-bar-chevron-size);height:var(--axp-route-tab-bar-tab-row-height, 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap{position:relative;height:100%;min-width:0px;flex:auto;overflow:hidden}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-start:before,axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-end:after{pointer-events:none;position:absolute;z-index:1;content:\"\";inset-block:0;width:1.5rem}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-start:before{inset-inline-start:0;background:linear-gradient(to right,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-end:after{inset-inline-end:0;background:linear-gradient(to left,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll{height:100%;width:100%;min-width:0px;cursor:default;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scrollbar-width:none!important;-ms-overflow-style:none!important}axp-route-tab-bar .axp-route-tab-bar__scroll::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}axp-route-tab-bar .axp-route-tab-bar__scroll.axp-route-tab-bar__scroll--panning,axp-route-tab-bar .axp-route-tab-bar__scroll.axp-route-tab-bar__scroll--panning *{cursor:grabbing;-webkit-user-select:none;user-select:none}axp-route-tab-bar .axp-route-tab-bar__tabs-host{height:100%;min-width:0px;width:max-content}axp-route-tab-bar .axp-route-tab-bar__tab-list{display:flex;height:100%;width:max-content;min-width:max-content;flex:none;flex-wrap:nowrap;align-items:stretch;gap:calc(var(--spacing, .25rem) * 2)}axp-route-tab-bar .axp-route-tab-bar__tab-list.cdk-drop-list-dragging .axp-route-tab-bar__tab:not(.cdk-drag-placeholder){transition:transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab{height:100%;cursor:pointer;flex:0 0 var(--axp-tab-width, 5.5rem);width:var(--axp-tab-width, 5.5rem);min-width:var(--axp-tab-width, 5.5rem);max-width:var(--axp-tab-width, 5.5rem);transform:translateY(0);transition:background-color .15s ease,color .15s ease,border-color .15s ease,transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-disabled{cursor:pointer}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-dragging,axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-dragging .axp-route-tab-bar__tab-inner{cursor:grabbing}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-placeholder{opacity:.35}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-animating{transition:transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab:hover .axp-route-tab-bar__close,axp-route-tab-bar .axp-route-tab-bar__tab .axp-route-tab-bar__close:focus-visible{pointer-events:auto;width:1.25rem;opacity:.72}axp-route-tab-bar .axp-route-tab-bar__scroll-btn{margin:0;display:inline-flex;height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 6);cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:inherit;opacity:.88;border-radius:var(--ax-sys-border-radius);transition:opacity .15s ease}axp-route-tab-bar .axp-route-tab-bar__scroll-btn ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}axp-route-tab-bar .axp-route-tab-bar__scroll-btn:hover,axp-route-tab-bar .axp-route-tab-bar__scroll-btn:focus-visible{opacity:1}axp-route-tab-bar .axp-route-tab-bar__scroll-btn:focus-visible{outline:2px solid rgb(var(--ax-sys-color-primary-500));outline-offset:1px}axp-route-tab-bar .axp-route-tab-bar__tab-inner{position:relative;display:flex;height:100%;width:100%;max-width:100%;min-width:0px;cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 1.5);padding-inline:.625rem}axp-route-tab-bar .axp-route-tab-bar__tab-inner.cdk-drag-handle{cursor:pointer}axp-route-tab-bar .axp-route-tab-bar__tab--dirty{position:relative}axp-route-tab-bar .axp-route-tab-bar__tab--dirty:before{pointer-events:none;position:absolute;inset:0;z-index:1;content:\"\";border-radius:inherit;border-top:2px solid rgb(var(--ax-sys-color-warning-500))}axp-route-tab-bar .axp-route-tab-bar__tab-icon{display:inline-flex;flex-shrink:0}axp-route-tab-bar .axp-route-tab-bar__tab-icon ax-icon{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}axp-route-tab-bar .axp-route-tab-bar__tab-title-fade{position:relative;max-width:100%;min-width:0px;flex:auto;overflow:hidden}axp-route-tab-bar .axp-route-tab-bar__tab-title-fade.axp-route-tab-bar__tab-title-fade--overflowing .axp-route-tab-bar__tab-title{-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.25rem),transparent 100%);mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.25rem),transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__tab-title{display:block;width:100%;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);text-overflow:ellipsis;white-space:nowrap}axp-route-tab-bar .axp-route-tab-bar__pin{display:inline-flex;flex-shrink:0;color:inherit}axp-route-tab-bar .axp-route-tab-bar__pin ax-icon{font-size:.6875rem}axp-route-tab-bar .axp-route-tab-bar__close{margin:0;display:inline-flex;height:calc(var(--spacing, .25rem) * 5);flex-shrink:0;cursor:pointer;align-items:center;justify-content:center;overflow:hidden;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;width:0;color:inherit;border-radius:var(--ax-sys-border-radius);opacity:0;pointer-events:none;transition:opacity .15s ease,width .15s ease,background-color .15s ease}axp-route-tab-bar .axp-route-tab-bar__close ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}axp-route-tab-bar .axp-route-tab-bar__close:hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header){border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__strip{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);padding-inline:.5rem}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab:hover:not(.axp-route-tab-bar__tab--active){background-color:var(--color-light);color:var(--color-on-light);border-color:var(--color-border-light)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}axp-route-tab-bar.axp-route-tab-bar--in-header{height:100%;align-self:stretch;--axp-route-tab-bar-fade: var(--ax-sys-color-primary-surface);--axp-route-tab-bar-tab-row-height: 2.25rem}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__strip{display:flex;height:100%;align-items:stretch;align-self:stretch;background-color:transparent;color:rgb(var(--ax-sys-color-on-primary-surface))}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__viewport{align-items:flex-end}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-rail{margin-bottom:0;align-self:flex-end}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-wrap--overflow-start:before,axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-wrap--overflow-end:after{inset-block-end:0;inset-block-start:auto;height:var(--axp-route-tab-bar-tab-row-height)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll{cursor:default}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab-list{min-height:0px;align-items:flex-end;align-self:stretch;padding-top:calc(var(--spacing, .25rem) * 4)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab{align-self:center;border-top-left-radius:var(--radius-lg, .5rem);border-top-right-radius:var(--radius-lg, .5rem);border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:var(--color-primary-dark);color:var(--color-on-primary-dark);border-color:var(--color-border-primary-dark);padding:0}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab ax-icon{color:inherit}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab:hover:not(.axp-route-tab-bar__tab--active){background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-primary-darkest);color:var(--color-on-primary-darkest);border-color:var(--color-border-primary-darkest)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab .axp-route-tab-bar__close:hover{background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active .axp-route-tab-bar__close:hover{background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header{--axp-route-tab-bar-fade: var(--ax-sys-color-lightest-surface)}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__strip{color:inherit}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab{border-inline-style:var(--tw-border-style);border-inline-width:1px;border-top-style:var(--tw-border-style);border-top-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0px;background-color:var(--color-light);color:var(--color-on-light);border-color:var(--color-border-light);border-color:transparent}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab:hover:not(.axp-route-tab-bar__tab--active){background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);border-color:var(--color-border-default);box-shadow:0 1px 3px rgb(var(--ax-sys-color-dark) / .12),0 1px 2px rgb(var(--ax-sys-color-dark) / .08)}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-darker);color:var(--color-on-darker);border-color:var(--color-border-darker)}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab .axp-route-tab-bar__close:hover,axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active .axp-route-tab-bar__close:hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__scroll-wrap--overflow-start:before{background:linear-gradient(to left,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__scroll-wrap--overflow-end:after{background:linear-gradient(to right,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__tab-title-fade--overflowing .axp-route-tab-bar__tab-title{-webkit-mask-image:linear-gradient(to left,#000 0,#000 calc(100% - 1.25rem),transparent 100%);mask-image:linear-gradient(to left,#000 0,#000 calc(100% - 1.25rem),transparent 100%)}.cdk-drag-preview.axp-route-tab-bar__drag-preview{box-sizing:border-box;display:flex;cursor:grabbing;align-items:center;height:var(--axp-route-tab-bar-tab-row-height, 2.25rem);opacity:.96;box-shadow:0 4px 12px rgb(var(--ax-sys-color-dark)/.16),0 1px 3px rgb(var(--ax-sys-color-dark)/.12)}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__drag-preview-inner{display:flex;height:100%;width:100%;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:.625rem}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-icon{display:inline-flex;flex-shrink:0}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-icon ax-icon{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-title{min-width:0px;flex:auto;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);text-overflow:ellipsis;white-space:nowrap}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--dirty{position:relative}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--dirty:before{pointer-events:none;position:absolute;inset:0;z-index:1;content:\"\";border-radius:inherit;border-top:2px solid rgb(var(--ax-sys-color-warning-500))}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header{border-top-left-radius:var(--radius-lg, .5rem);border-top-right-radius:var(--radius-lg, .5rem);border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:var(--color-primary-dark);color:var(--color-on-primary-dark);border-color:var(--color-border-primary-dark)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-primary-darkest);color:var(--color-on-primary-darkest);border-color:var(--color-border-primary-darkest)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--simple-header{background-color:var(--color-light);color:var(--color-on-light);border-color:var(--color-border-light)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--simple-header.axp-route-tab-bar__drag-preview--active{border-inline-style:var(--tw-border-style);border-inline-width:1px;border-top-style:var(--tw-border-style);border-top-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0px;background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);border-color:var(--color-border-default);box-shadow:0 1px 3px rgb(var(--ax-sys-color-dark) / .12),0 1px 2px rgb(var(--ax-sys-color-dark) / .08)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--simple-header.axp-route-tab-bar__drag-preview--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-darker);color:var(--color-on-darker);border-color:var(--color-border-darker)}.cdk-drag-preview.axp-route-tab-bar__drag-preview:not(.axp-route-tab-bar__drag-preview--in-header){border-radius:var(--radius-md, .375rem);background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}.cdk-drag-preview.axp-route-tab-bar__drag-preview:not(.axp-route-tab-bar__drag-preview--in-header).axp-route-tab-bar__drag-preview--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}.axp-route-tab-bar__title-tooltip{display:flex;max-width:calc(var(--spacing, .25rem) * 80);flex-direction:column;gap:var(--spacing, .25rem);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);text-align:start;border-radius:var(--ax-sys-border-radius);background:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));box-shadow:0 4px 12px rgb(var(--ax-sys-color-dark)/.12),0 1px 3px rgb(var(--ax-sys-color-dark)/.08)}.axp-route-tab-bar__title-tooltip-prefix{display:block;overflow:hidden;font-size:.6875rem;--tw-leading: calc(var(--spacing, .25rem) * 4);line-height:calc(var(--spacing, .25rem) * 4);text-overflow:ellipsis;white-space:nowrap;opacity:.82}.axp-route-tab-bar__title-tooltip-leaf{display:block;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);text-overflow:ellipsis;white-space:nowrap}.axp-route-tab-bar__title-tooltip-dirty{margin-top:var(--spacing, .25rem);border-top-style:var(--tw-border-style);border-top-width:1px;padding-top:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: 1.125rem;line-height:1.125rem;border-color:rgb(var(--ax-sys-color-border-light-surface));color:rgb(var(--ax-sys-color-warning-600))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i2$3.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "closeOnRouteChange", "items", "target"], outputs: ["onItemClick", "onOpening", "onClose"] }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3247
3259
|
}
|
|
3248
3260
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRouteTabBarComponent, decorators: [{
|
|
3249
3261
|
type: Component,
|
|
3250
3262
|
args: [{ selector: 'axp-route-tab-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
3251
3263
|
class: 'axp-route-tab-bar',
|
|
3252
3264
|
'[class.axp-route-tab-bar--scrollable]': 'hasHorizontalOverflow()',
|
|
3265
|
+
'[class.axp-route-tab-bar--simple-header]': 'simpleHeaderTabs()',
|
|
3253
3266
|
}, imports: [
|
|
3254
3267
|
CdkDropList,
|
|
3255
3268
|
CdkDrag,
|
|
@@ -3260,7 +3273,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3260
3273
|
AXTooltipModule,
|
|
3261
3274
|
AXContextMenuComponent,
|
|
3262
3275
|
AsyncPipe,
|
|
3263
|
-
], template: "@if (tabNavigation.isTabBarVisible()) {\n <div class=\"axp-route-tab-bar__strip\" #tabStrip [style.--axp-tab-width.px]=\"tabWidthPx()\">\n <div class=\"axp-route-tab-bar__viewport\">\n @if (canScrollBackward()) {\n <div class=\"axp-route-tab-bar__scroll-rail axp-route-tab-bar__scroll-rail--start\">\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__scroll-btn\"\n [title]=\"'@general:actions.scroll-tabs-back.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.scroll-tabs-back.title' | translate | async\"\n (click)=\"scrollTabs('backward')\"\n >\n <ax-icon [icon]=\"scrollBackwardIcon()\"></ax-icon>\n </button>\n </div>\n }\n\n <div\n class=\"axp-route-tab-bar__scroll-wrap\"\n [class.axp-route-tab-bar__scroll-wrap--overflow-start]=\"canScrollBackward()\"\n [class.axp-route-tab-bar__scroll-wrap--overflow-end]=\"canScrollForward()\"\n >\n <div\n #tabsScroll\n class=\"axp-route-tab-bar__scroll\"\n [class.axp-route-tab-bar__scroll--panning]=\"isMiddlePanning()\"\n (mousedown)=\"onTabsScrollMouseDown($event)\"\n >\n <div\n class=\"axp-route-tab-bar__tab-list\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"tabNavigation.tabList()\"\n (cdkDropListDropped)=\"onTabDropped($event)\"\n >\n @for (tab of tabNavigation.tabList(); track tab.key) {\n @let tabTitle = (tab.title | translate | async) || '';\n @let tabTitleParts = resolveTabTitleParts(tab, tabTitle);\n @let isTabDirty = !!tabPreviewService.previews()[tab.key]?.isDirty;\n @let isTabActive = tabNavigation.activeKey() === tab.key;\n <ng-template #tabTitleTooltip>\n <div class=\"axp-route-tab-bar__title-tooltip\">\n <span class=\"axp-route-tab-bar__title-tooltip-prefix\">{{ tabTitleParts.prefix }}</span>\n <span class=\"axp-route-tab-bar__title-tooltip-leaf\">{{ tabTitleParts.leaf }}</span>\n @if (isTabDirty) {\n <span class=\"axp-route-tab-bar__title-tooltip-dirty\">\n {{ '@general:terms.interface.save-status.not-saved.description' | translate | async }}\n </span>\n }\n </div>\n </ng-template>\n <div\n class=\"axp-route-tab-bar__tab\"\n [class.axp-route-tab-bar__tab--active]=\"isTabActive\"\n [class.axp-route-tab-bar__tab--dirty]=\"isTabDirty\"\n [class.axp-route-tab-bar__tab--dragging]=\"isTabDragging()\"\n [attr.data-tab-key]=\"tab.key\"\n role=\"tab\"\n [attr.aria-selected]=\"isTabActive\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n [cdkDragData]=\"tab\"\n [cdkDragDisabled]=\"isTabDragDisabled(tab)\"\n (cdkDragStarted)=\"onTabDragStarted()\"\n (cdkDragEnded)=\"onTabDragEnded()\"\n (click)=\"onTabActivate(tab, $event)\"\n >\n <div\n class=\"axp-route-tab-bar__tab-inner\"\n cdkDragHandle\n [axTooltip]=\"tabTitleTooltip\"\n [axTooltipOpenAfter]=\"tabTitleTooltipOpenAfterMs\"\n [axTooltipDisabled]=\"!tabTitleParts.prefix || isTabActive\"\n axTooltipPlacement=\"bottom\"\n [attr.aria-label]=\"isTabDirty ? ('@general:terms.interface.save-status.not-saved.title' | translate | async) : null\"\n (contextmenu)=\"openTabContextMenu($event, tab.key)\"\n (auxclick)=\"onTabMiddleClick(tab, $event)\"\n >\n <span class=\"axp-route-tab-bar__tab-icon\" aria-hidden=\"true\">\n <ax-icon [icon]=\"resolveTabIcon(tab)\"></ax-icon>\n </span>\n\n <span class=\"axp-route-tab-bar__tab-title-fade\" axpRouteTabTitleOverflow>\n <span class=\"axp-route-tab-bar__tab-title\">{{ tabTitleParts.leaf }}</span>\n </span>\n\n @if (tab.pinned) {\n <span class=\"axp-route-tab-bar__pin\" aria-hidden=\"true\">\n <ax-icon icon=\"fa-solid fa-thumbtack\"></ax-icon>\n </span>\n } @else if (tab.closable) {\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__close\"\n [title]=\"'@general:actions.close-tab.title' | translate | async\"\n (click)=\"onTabCloseClick(tab, $event)\"\n >\n <ax-icon icon=\"far fa-xmark\"></ax-icon>\n </button>\n }\n </div>\n\n <ng-template cdkDragPreview>\n <div\n class=\"axp-route-tab-bar__drag-preview\"\n [class.axp-route-tab-bar__drag-preview--in-header]=\"inHeader()\"\n [class.axp-route-tab-bar__drag-preview--active]=\"isTabActive\"\n [class.axp-route-tab-bar__drag-preview--dirty]=\"isTabDirty\"\n [style.width.px]=\"tabWidthPx()\"\n >\n <div class=\"axp-route-tab-bar__drag-preview-inner\">\n <span class=\"axp-route-tab-bar__tab-icon\" aria-hidden=\"true\">\n <ax-icon [icon]=\"resolveTabIcon(tab)\"></ax-icon>\n </span>\n <span class=\"axp-route-tab-bar__tab-title\">{{ tabTitleParts.leaf }}</span>\n </div>\n </div>\n </ng-template>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (canScrollForward()) {\n <div class=\"axp-route-tab-bar__scroll-rail axp-route-tab-bar__scroll-rail--end\">\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__scroll-btn\"\n [title]=\"'@general:actions.scroll-tabs-forward.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.scroll-tabs-forward.title' | translate | async\"\n (click)=\"scrollTabs('forward')\"\n >\n <ax-icon [icon]=\"scrollForwardIcon()\"></ax-icon>\n </button>\n </div>\n }\n </div>\n </div>\n}\n\n<ax-context-menu\n #tabContextMenu\n [closeOn]=\"'click'\"\n [orientation]=\"'vertical'\"\n (onItemClick)=\"handleTabContextMenuItemClick($event)\"\n></ax-context-menu>\n", styles: ["@layer properties;axp-route-tab-bar{display:block;min-width:0px;--axp-route-tab-bar-fade: var(--ax-sys-color-lightest-surface);--axp-route-tab-bar-chevron-size: 2rem}axp-route-tab-bar .axp-route-tab-bar__strip{display:flex;min-width:0px;align-items:stretch;gap:calc(var(--spacing, .25rem) * 2)}axp-route-tab-bar .axp-route-tab-bar__viewport{display:flex;height:100%;min-width:0px;flex:auto;flex-direction:row;align-items:center;gap:var(--spacing, .25rem)}axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs,axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs .tabs-scroll-area,axp-route-tab-bar .axp-route-tab-bar__viewport .axp-route-tab-bar__tab-list{overflow:visible!important;scrollbar-width:none!important;-ms-overflow-style:none!important}axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs::-webkit-scrollbar,axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs .tabs-scroll-area::-webkit-scrollbar,axp-route-tab-bar .axp-route-tab-bar__viewport .axp-route-tab-bar__tab-list::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}axp-route-tab-bar .axp-route-tab-bar__scroll-rail{display:flex;align-items:center;justify-content:center;align-self:center;flex:0 0 var(--axp-route-tab-bar-chevron-size);width:var(--axp-route-tab-bar-chevron-size);min-width:var(--axp-route-tab-bar-chevron-size);height:var(--axp-route-tab-bar-tab-row-height, 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap{position:relative;height:100%;min-width:0px;flex:auto;overflow:hidden}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-start:before,axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-end:after{pointer-events:none;position:absolute;z-index:1;content:\"\";inset-block:0;width:1.5rem}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-start:before{inset-inline-start:0;background:linear-gradient(to right,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-end:after{inset-inline-end:0;background:linear-gradient(to left,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll{height:100%;width:100%;min-width:0px;cursor:default;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scrollbar-width:none!important;-ms-overflow-style:none!important}axp-route-tab-bar .axp-route-tab-bar__scroll::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}axp-route-tab-bar .axp-route-tab-bar__scroll.axp-route-tab-bar__scroll--panning,axp-route-tab-bar .axp-route-tab-bar__scroll.axp-route-tab-bar__scroll--panning *{cursor:grabbing;-webkit-user-select:none;user-select:none}axp-route-tab-bar .axp-route-tab-bar__tabs-host{height:100%;min-width:0px;width:max-content}axp-route-tab-bar .axp-route-tab-bar__tab-list{display:flex;height:100%;width:max-content;min-width:max-content;flex:none;flex-wrap:nowrap;align-items:stretch;gap:calc(var(--spacing, .25rem) * 2)}axp-route-tab-bar .axp-route-tab-bar__tab-list.cdk-drop-list-dragging .axp-route-tab-bar__tab:not(.cdk-drag-placeholder){transition:transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab{height:100%;cursor:pointer;flex:0 0 var(--axp-tab-width, 5.5rem);width:var(--axp-tab-width, 5.5rem);min-width:var(--axp-tab-width, 5.5rem);max-width:var(--axp-tab-width, 5.5rem);transform:translateY(0);transition:background-color .15s ease,color .15s ease,border-color .15s ease,transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-disabled{cursor:pointer}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-dragging,axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-dragging .axp-route-tab-bar__tab-inner{cursor:grabbing}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-placeholder{opacity:.35}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-animating{transition:transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab:hover .axp-route-tab-bar__close,axp-route-tab-bar .axp-route-tab-bar__tab .axp-route-tab-bar__close:focus-visible{pointer-events:auto;width:1.25rem;opacity:.72}axp-route-tab-bar .axp-route-tab-bar__scroll-btn{margin:0;display:inline-flex;height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 6);cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:inherit;opacity:.88;border-radius:var(--ax-sys-border-radius);transition:opacity .15s ease}axp-route-tab-bar .axp-route-tab-bar__scroll-btn ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}axp-route-tab-bar .axp-route-tab-bar__scroll-btn:hover,axp-route-tab-bar .axp-route-tab-bar__scroll-btn:focus-visible{opacity:1}axp-route-tab-bar .axp-route-tab-bar__scroll-btn:focus-visible{outline:2px solid rgb(var(--ax-sys-color-primary-500));outline-offset:1px}axp-route-tab-bar .axp-route-tab-bar__tab-inner{position:relative;display:flex;height:100%;width:100%;max-width:100%;min-width:0px;cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 1.5);padding-inline:.625rem}axp-route-tab-bar .axp-route-tab-bar__tab-inner.cdk-drag-handle{cursor:pointer}axp-route-tab-bar .axp-route-tab-bar__tab--dirty{position:relative}axp-route-tab-bar .axp-route-tab-bar__tab--dirty:before{pointer-events:none;position:absolute;inset:0;z-index:1;content:\"\";border-radius:inherit;border-top:2px solid rgb(var(--ax-sys-color-warning-500))}axp-route-tab-bar .axp-route-tab-bar__tab-icon{display:inline-flex;flex-shrink:0}axp-route-tab-bar .axp-route-tab-bar__tab-icon ax-icon{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}axp-route-tab-bar .axp-route-tab-bar__tab-title-fade{position:relative;max-width:100%;min-width:0px;flex:auto;overflow:hidden}axp-route-tab-bar .axp-route-tab-bar__tab-title-fade.axp-route-tab-bar__tab-title-fade--overflowing .axp-route-tab-bar__tab-title{-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.25rem),transparent 100%);mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.25rem),transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__tab-title{display:block;width:100%;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);text-overflow:ellipsis;white-space:nowrap}axp-route-tab-bar .axp-route-tab-bar__pin{display:inline-flex;flex-shrink:0;color:inherit}axp-route-tab-bar .axp-route-tab-bar__pin ax-icon{font-size:.6875rem}axp-route-tab-bar .axp-route-tab-bar__close{margin:0;display:inline-flex;height:calc(var(--spacing, .25rem) * 5);flex-shrink:0;cursor:pointer;align-items:center;justify-content:center;overflow:hidden;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;width:0;color:inherit;border-radius:var(--ax-sys-border-radius);opacity:0;pointer-events:none;transition:opacity .15s ease,width .15s ease,background-color .15s ease}axp-route-tab-bar .axp-route-tab-bar__close ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}axp-route-tab-bar .axp-route-tab-bar__close:hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header){border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__strip{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);padding-inline:.5rem}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab:hover:not(.axp-route-tab-bar__tab--active){background-color:var(--color-light);color:var(--color-on-light);border-color:var(--color-border-light)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}axp-route-tab-bar.axp-route-tab-bar--in-header{height:100%;align-self:stretch;--axp-route-tab-bar-fade: var(--ax-sys-color-primary-surface);--axp-route-tab-bar-tab-row-height: 2.25rem}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__strip{display:flex;height:100%;align-items:stretch;align-self:stretch;background-color:transparent;color:rgb(var(--ax-sys-color-on-primary-surface))}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__viewport{align-items:flex-end}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-rail{margin-bottom:0;align-self:flex-end}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-wrap--overflow-start:before,axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-wrap--overflow-end:after{inset-block-end:0;inset-block-start:auto;height:var(--axp-route-tab-bar-tab-row-height)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll{cursor:default}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab-list{min-height:0px;align-items:flex-end;align-self:stretch;padding-top:calc(var(--spacing, .25rem) * 4)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab{align-self:center;border-top-left-radius:var(--radius-lg, .5rem);border-top-right-radius:var(--radius-lg, .5rem);border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:var(--color-primary-dark);color:var(--color-on-primary-dark);border-color:var(--color-border-primary-dark);padding:0}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab ax-icon{color:inherit}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab:hover:not(.axp-route-tab-bar__tab--active){background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-primary-darkest);color:var(--color-on-primary-darkest);border-color:var(--color-border-primary-darkest)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab .axp-route-tab-bar__close:hover{background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active .axp-route-tab-bar__close:hover{background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__scroll-wrap--overflow-start:before{background:linear-gradient(to left,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__scroll-wrap--overflow-end:after{background:linear-gradient(to right,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__tab-title-fade--overflowing .axp-route-tab-bar__tab-title{-webkit-mask-image:linear-gradient(to left,#000 0,#000 calc(100% - 1.25rem),transparent 100%);mask-image:linear-gradient(to left,#000 0,#000 calc(100% - 1.25rem),transparent 100%)}.cdk-drag-preview.axp-route-tab-bar__drag-preview{box-sizing:border-box;display:flex;cursor:grabbing;align-items:center;height:var(--axp-route-tab-bar-tab-row-height, 2.25rem);opacity:.96;box-shadow:0 4px 12px rgb(var(--ax-sys-color-dark)/.16),0 1px 3px rgb(var(--ax-sys-color-dark)/.12)}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__drag-preview-inner{display:flex;height:100%;width:100%;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:.625rem}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-icon{display:inline-flex;flex-shrink:0}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-icon ax-icon{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-title{min-width:0px;flex:auto;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);text-overflow:ellipsis;white-space:nowrap}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--dirty{position:relative}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--dirty:before{pointer-events:none;position:absolute;inset:0;z-index:1;content:\"\";border-radius:inherit;border-top:2px solid rgb(var(--ax-sys-color-warning-500))}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header{border-top-left-radius:var(--radius-lg, .5rem);border-top-right-radius:var(--radius-lg, .5rem);border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:var(--color-primary-dark);color:var(--color-on-primary-dark);border-color:var(--color-border-primary-dark)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-primary-darkest);color:var(--color-on-primary-darkest);border-color:var(--color-border-primary-darkest)}.cdk-drag-preview.axp-route-tab-bar__drag-preview:not(.axp-route-tab-bar__drag-preview--in-header){border-radius:var(--radius-md, .375rem);background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}.cdk-drag-preview.axp-route-tab-bar__drag-preview:not(.axp-route-tab-bar__drag-preview--in-header).axp-route-tab-bar__drag-preview--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}.axp-route-tab-bar__title-tooltip{display:flex;max-width:calc(var(--spacing, .25rem) * 80);flex-direction:column;gap:var(--spacing, .25rem);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);text-align:start;border-radius:var(--ax-sys-border-radius);background:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));box-shadow:0 4px 12px rgb(var(--ax-sys-color-dark)/.12),0 1px 3px rgb(var(--ax-sys-color-dark)/.08)}.axp-route-tab-bar__title-tooltip-prefix{display:block;overflow:hidden;font-size:.6875rem;--tw-leading: calc(var(--spacing, .25rem) * 4);line-height:calc(var(--spacing, .25rem) * 4);text-overflow:ellipsis;white-space:nowrap;opacity:.82}.axp-route-tab-bar__title-tooltip-leaf{display:block;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);text-overflow:ellipsis;white-space:nowrap}.axp-route-tab-bar__title-tooltip-dirty{margin-top:var(--spacing, .25rem);border-top-style:var(--tw-border-style);border-top-width:1px;padding-top:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: 1.125rem;line-height:1.125rem;border-color:rgb(var(--ax-sys-color-border-light-surface));color:rgb(var(--ax-sys-color-warning-600))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
3276
|
+
], template: "@if (tabNavigation.isTabBarVisible()) {\n <div class=\"axp-route-tab-bar__strip\" #tabStrip [style.--axp-tab-width.px]=\"tabWidthPx()\">\n <div class=\"axp-route-tab-bar__viewport\">\n @if (canScrollBackward()) {\n <div class=\"axp-route-tab-bar__scroll-rail axp-route-tab-bar__scroll-rail--start\">\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__scroll-btn\"\n [title]=\"'@general:actions.scroll-tabs-back.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.scroll-tabs-back.title' | translate | async\"\n (click)=\"scrollTabs('backward')\"\n >\n <ax-icon [icon]=\"scrollBackwardIcon()\"></ax-icon>\n </button>\n </div>\n }\n\n <div\n class=\"axp-route-tab-bar__scroll-wrap\"\n [class.axp-route-tab-bar__scroll-wrap--overflow-start]=\"canScrollBackward()\"\n [class.axp-route-tab-bar__scroll-wrap--overflow-end]=\"canScrollForward()\"\n >\n <div\n #tabsScroll\n class=\"axp-route-tab-bar__scroll\"\n [class.axp-route-tab-bar__scroll--panning]=\"isMiddlePanning()\"\n (mousedown)=\"onTabsScrollMouseDown($event)\"\n >\n <div\n class=\"axp-route-tab-bar__tab-list\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"tabNavigation.tabList()\"\n (cdkDropListDropped)=\"onTabDropped($event)\"\n >\n @for (tab of tabNavigation.tabList(); track tab.key) {\n @let tabTitle = (tab.title | translate | async) || '';\n @let tabTitleParts = resolveTabTitleParts(tab, tabTitle);\n @let isTabDirty = !!tabPreviewService.previews()[tab.key]?.isDirty;\n @let isTabActive = tabNavigation.activeKey() === tab.key;\n <ng-template #tabTitleTooltip>\n <div class=\"axp-route-tab-bar__title-tooltip\">\n <span class=\"axp-route-tab-bar__title-tooltip-prefix\">{{ tabTitleParts.prefix }}</span>\n <span class=\"axp-route-tab-bar__title-tooltip-leaf\">{{ tabTitleParts.leaf }}</span>\n @if (isTabDirty) {\n <span class=\"axp-route-tab-bar__title-tooltip-dirty\">\n {{ '@general:terms.interface.save-status.not-saved.description' | translate | async }}\n </span>\n }\n </div>\n </ng-template>\n <div\n class=\"axp-route-tab-bar__tab\"\n [class.axp-route-tab-bar__tab--active]=\"isTabActive\"\n [class.axp-route-tab-bar__tab--dirty]=\"isTabDirty\"\n [class.axp-route-tab-bar__tab--dragging]=\"isTabDragging()\"\n [attr.data-tab-key]=\"tab.key\"\n role=\"tab\"\n [attr.aria-selected]=\"isTabActive\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n [cdkDragData]=\"tab\"\n [cdkDragDisabled]=\"isTabDragDisabled(tab)\"\n (cdkDragStarted)=\"onTabDragStarted()\"\n (cdkDragEnded)=\"onTabDragEnded()\"\n (click)=\"onTabActivate(tab, $event)\"\n >\n <div\n class=\"axp-route-tab-bar__tab-inner\"\n cdkDragHandle\n [axTooltip]=\"tabTitleTooltip\"\n [axTooltipOpenAfter]=\"tabTitleTooltipOpenAfterMs\"\n [axTooltipDisabled]=\"!tabTitleParts.prefix || isTabActive\"\n axTooltipPlacement=\"bottom\"\n [attr.aria-label]=\"isTabDirty ? ('@general:terms.interface.save-status.not-saved.title' | translate | async) : null\"\n (contextmenu)=\"openTabContextMenu($event, tab.key)\"\n (auxclick)=\"onTabMiddleClick(tab, $event)\"\n >\n <span class=\"axp-route-tab-bar__tab-icon\" aria-hidden=\"true\">\n <ax-icon [icon]=\"resolveTabIcon(tab)\"></ax-icon>\n </span>\n\n <span class=\"axp-route-tab-bar__tab-title-fade\" axpRouteTabTitleOverflow>\n <span class=\"axp-route-tab-bar__tab-title\">{{ tabTitleParts.leaf }}</span>\n </span>\n\n @if (tab.pinned) {\n <span class=\"axp-route-tab-bar__pin\" aria-hidden=\"true\">\n <ax-icon icon=\"fa-solid fa-thumbtack\"></ax-icon>\n </span>\n } @else if (tab.closable) {\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__close\"\n [title]=\"'@general:actions.close-tab.title' | translate | async\"\n (click)=\"onTabCloseClick(tab, $event)\"\n >\n <ax-icon icon=\"far fa-xmark\"></ax-icon>\n </button>\n }\n </div>\n\n <ng-template cdkDragPreview>\n <div\n class=\"axp-route-tab-bar__drag-preview\"\n [class.axp-route-tab-bar__drag-preview--in-header]=\"inHeader()\"\n [class.axp-route-tab-bar__drag-preview--simple-header]=\"simpleHeaderTabs()\"\n [class.axp-route-tab-bar__drag-preview--active]=\"isTabActive\"\n [class.axp-route-tab-bar__drag-preview--dirty]=\"isTabDirty\"\n [style.width.px]=\"tabWidthPx()\"\n >\n <div class=\"axp-route-tab-bar__drag-preview-inner\">\n <span class=\"axp-route-tab-bar__tab-icon\" aria-hidden=\"true\">\n <ax-icon [icon]=\"resolveTabIcon(tab)\"></ax-icon>\n </span>\n <span class=\"axp-route-tab-bar__tab-title\">{{ tabTitleParts.leaf }}</span>\n </div>\n </div>\n </ng-template>\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (canScrollForward()) {\n <div class=\"axp-route-tab-bar__scroll-rail axp-route-tab-bar__scroll-rail--end\">\n <button\n type=\"button\"\n class=\"axp-route-tab-bar__scroll-btn\"\n [title]=\"'@general:actions.scroll-tabs-forward.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.scroll-tabs-forward.title' | translate | async\"\n (click)=\"scrollTabs('forward')\"\n >\n <ax-icon [icon]=\"scrollForwardIcon()\"></ax-icon>\n </button>\n </div>\n }\n </div>\n </div>\n}\n\n<ax-context-menu\n #tabContextMenu\n [closeOn]=\"'click'\"\n [orientation]=\"'vertical'\"\n (onItemClick)=\"handleTabContextMenuItemClick($event)\"\n></ax-context-menu>\n", styles: ["@layer properties;axp-route-tab-bar{display:block;min-width:0px;--axp-route-tab-bar-fade: var(--ax-sys-color-lightest-surface);--axp-route-tab-bar-chevron-size: 2rem}axp-route-tab-bar .axp-route-tab-bar__strip{display:flex;min-width:0px;align-items:stretch;gap:calc(var(--spacing, .25rem) * 2)}axp-route-tab-bar .axp-route-tab-bar__viewport{display:flex;height:100%;min-width:0px;flex:auto;flex-direction:row;align-items:center;gap:var(--spacing, .25rem)}axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs,axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs .tabs-scroll-area,axp-route-tab-bar .axp-route-tab-bar__viewport .axp-route-tab-bar__tab-list{overflow:visible!important;scrollbar-width:none!important;-ms-overflow-style:none!important}axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs::-webkit-scrollbar,axp-route-tab-bar .axp-route-tab-bar__viewport ax-tabs .tabs-scroll-area::-webkit-scrollbar,axp-route-tab-bar .axp-route-tab-bar__viewport .axp-route-tab-bar__tab-list::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}axp-route-tab-bar .axp-route-tab-bar__scroll-rail{display:flex;align-items:center;justify-content:center;align-self:center;flex:0 0 var(--axp-route-tab-bar-chevron-size);width:var(--axp-route-tab-bar-chevron-size);min-width:var(--axp-route-tab-bar-chevron-size);height:var(--axp-route-tab-bar-tab-row-height, 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap{position:relative;height:100%;min-width:0px;flex:auto;overflow:hidden}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-start:before,axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-end:after{pointer-events:none;position:absolute;z-index:1;content:\"\";inset-block:0;width:1.5rem}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-start:before{inset-inline-start:0;background:linear-gradient(to right,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll-wrap.axp-route-tab-bar__scroll-wrap--overflow-end:after{inset-inline-end:0;background:linear-gradient(to left,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__scroll{height:100%;width:100%;min-width:0px;cursor:default;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scrollbar-width:none!important;-ms-overflow-style:none!important}axp-route-tab-bar .axp-route-tab-bar__scroll::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}axp-route-tab-bar .axp-route-tab-bar__scroll.axp-route-tab-bar__scroll--panning,axp-route-tab-bar .axp-route-tab-bar__scroll.axp-route-tab-bar__scroll--panning *{cursor:grabbing;-webkit-user-select:none;user-select:none}axp-route-tab-bar .axp-route-tab-bar__tabs-host{height:100%;min-width:0px;width:max-content}axp-route-tab-bar .axp-route-tab-bar__tab-list{display:flex;height:100%;width:max-content;min-width:max-content;flex:none;flex-wrap:nowrap;align-items:stretch;gap:calc(var(--spacing, .25rem) * 2)}axp-route-tab-bar .axp-route-tab-bar__tab-list.cdk-drop-list-dragging .axp-route-tab-bar__tab:not(.cdk-drag-placeholder){transition:transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab{height:100%;cursor:pointer;flex:0 0 var(--axp-tab-width, 5.5rem);width:var(--axp-tab-width, 5.5rem);min-width:var(--axp-tab-width, 5.5rem);max-width:var(--axp-tab-width, 5.5rem);transform:translateY(0);transition:background-color .15s ease,color .15s ease,border-color .15s ease,transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-disabled{cursor:pointer}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-dragging,axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-dragging .axp-route-tab-bar__tab-inner{cursor:grabbing}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-placeholder{opacity:.35}axp-route-tab-bar .axp-route-tab-bar__tab.cdk-drag-animating{transition:transform .22s cubic-bezier(.4,0,.2,1)}axp-route-tab-bar .axp-route-tab-bar__tab:hover .axp-route-tab-bar__close,axp-route-tab-bar .axp-route-tab-bar__tab .axp-route-tab-bar__close:focus-visible{pointer-events:auto;width:1.25rem;opacity:.72}axp-route-tab-bar .axp-route-tab-bar__scroll-btn{margin:0;display:inline-flex;height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 6);cursor:pointer;align-items:center;justify-content:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;color:inherit;opacity:.88;border-radius:var(--ax-sys-border-radius);transition:opacity .15s ease}axp-route-tab-bar .axp-route-tab-bar__scroll-btn ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}axp-route-tab-bar .axp-route-tab-bar__scroll-btn:hover,axp-route-tab-bar .axp-route-tab-bar__scroll-btn:focus-visible{opacity:1}axp-route-tab-bar .axp-route-tab-bar__scroll-btn:focus-visible{outline:2px solid rgb(var(--ax-sys-color-primary-500));outline-offset:1px}axp-route-tab-bar .axp-route-tab-bar__tab-inner{position:relative;display:flex;height:100%;width:100%;max-width:100%;min-width:0px;cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 1.5);padding-inline:.625rem}axp-route-tab-bar .axp-route-tab-bar__tab-inner.cdk-drag-handle{cursor:pointer}axp-route-tab-bar .axp-route-tab-bar__tab--dirty{position:relative}axp-route-tab-bar .axp-route-tab-bar__tab--dirty:before{pointer-events:none;position:absolute;inset:0;z-index:1;content:\"\";border-radius:inherit;border-top:2px solid rgb(var(--ax-sys-color-warning-500))}axp-route-tab-bar .axp-route-tab-bar__tab-icon{display:inline-flex;flex-shrink:0}axp-route-tab-bar .axp-route-tab-bar__tab-icon ax-icon{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}axp-route-tab-bar .axp-route-tab-bar__tab-title-fade{position:relative;max-width:100%;min-width:0px;flex:auto;overflow:hidden}axp-route-tab-bar .axp-route-tab-bar__tab-title-fade.axp-route-tab-bar__tab-title-fade--overflowing .axp-route-tab-bar__tab-title{-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.25rem),transparent 100%);mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.25rem),transparent 100%)}axp-route-tab-bar .axp-route-tab-bar__tab-title{display:block;width:100%;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);text-overflow:ellipsis;white-space:nowrap}axp-route-tab-bar .axp-route-tab-bar__pin{display:inline-flex;flex-shrink:0;color:inherit}axp-route-tab-bar .axp-route-tab-bar__pin ax-icon{font-size:.6875rem}axp-route-tab-bar .axp-route-tab-bar__close{margin:0;display:inline-flex;height:calc(var(--spacing, .25rem) * 5);flex-shrink:0;cursor:pointer;align-items:center;justify-content:center;overflow:hidden;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0;width:0;color:inherit;border-radius:var(--ax-sys-border-radius);opacity:0;pointer-events:none;transition:opacity .15s ease,width .15s ease,background-color .15s ease}axp-route-tab-bar .axp-route-tab-bar__close ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)))}axp-route-tab-bar .axp-route-tab-bar__close:hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header){border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__strip{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);padding-inline:.5rem}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab:hover:not(.axp-route-tab-bar__tab--active){background-color:var(--color-light);color:var(--color-on-light);border-color:var(--color-border-light)}axp-route-tab-bar:not(.axp-route-tab-bar--in-header) .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}axp-route-tab-bar.axp-route-tab-bar--in-header{height:100%;align-self:stretch;--axp-route-tab-bar-fade: var(--ax-sys-color-primary-surface);--axp-route-tab-bar-tab-row-height: 2.25rem}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__strip{display:flex;height:100%;align-items:stretch;align-self:stretch;background-color:transparent;color:rgb(var(--ax-sys-color-on-primary-surface))}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__viewport{align-items:flex-end}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-rail{margin-bottom:0;align-self:flex-end}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-wrap--overflow-start:before,axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll-wrap--overflow-end:after{inset-block-end:0;inset-block-start:auto;height:var(--axp-route-tab-bar-tab-row-height)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__scroll{cursor:default}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab-list{min-height:0px;align-items:flex-end;align-self:stretch;padding-top:calc(var(--spacing, .25rem) * 4)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab{align-self:center;border-top-left-radius:var(--radius-lg, .5rem);border-top-right-radius:var(--radius-lg, .5rem);border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:var(--color-primary-dark);color:var(--color-on-primary-dark);border-color:var(--color-border-primary-dark);padding:0}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab ax-icon{color:inherit}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab:hover:not(.axp-route-tab-bar__tab--active){background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-primary-darkest);color:var(--color-on-primary-darkest);border-color:var(--color-border-primary-darkest)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab .axp-route-tab-bar__close:hover{background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}axp-route-tab-bar.axp-route-tab-bar--in-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active .axp-route-tab-bar__close:hover{background-color:var(--color-primary-light);color:var(--color-on-primary-light);border-color:var(--color-border-primary-light)}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header{--axp-route-tab-bar-fade: var(--ax-sys-color-lightest-surface)}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__strip{color:inherit}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab{border-inline-style:var(--tw-border-style);border-inline-width:1px;border-top-style:var(--tw-border-style);border-top-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0px;background-color:var(--color-light);color:var(--color-on-light);border-color:var(--color-border-light);border-color:transparent}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab:hover:not(.axp-route-tab-bar__tab--active){background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);border-color:var(--color-border-default);box-shadow:0 1px 3px rgb(var(--ax-sys-color-dark) / .12),0 1px 2px rgb(var(--ax-sys-color-dark) / .08)}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-darker);color:var(--color-on-darker);border-color:var(--color-border-darker)}axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab .axp-route-tab-bar__close:hover,axp-route-tab-bar.axp-route-tab-bar--in-header.axp-route-tab-bar--simple-header .axp-route-tab-bar__tab.axp-route-tab-bar__tab--active .axp-route-tab-bar__close:hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__scroll-wrap--overflow-start:before{background:linear-gradient(to left,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__scroll-wrap--overflow-end:after{background:linear-gradient(to right,rgb(var(--axp-route-tab-bar-fade)) 0%,rgb(var(--axp-route-tab-bar-fade)/.72) 35%,transparent 100%)}[dir=rtl] axp-route-tab-bar .axp-route-tab-bar__tab-title-fade--overflowing .axp-route-tab-bar__tab-title{-webkit-mask-image:linear-gradient(to left,#000 0,#000 calc(100% - 1.25rem),transparent 100%);mask-image:linear-gradient(to left,#000 0,#000 calc(100% - 1.25rem),transparent 100%)}.cdk-drag-preview.axp-route-tab-bar__drag-preview{box-sizing:border-box;display:flex;cursor:grabbing;align-items:center;height:var(--axp-route-tab-bar-tab-row-height, 2.25rem);opacity:.96;box-shadow:0 4px 12px rgb(var(--ax-sys-color-dark)/.16),0 1px 3px rgb(var(--ax-sys-color-dark)/.12)}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__drag-preview-inner{display:flex;height:100%;width:100%;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:.625rem}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-icon{display:inline-flex;flex-shrink:0}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-icon ax-icon{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}.cdk-drag-preview.axp-route-tab-bar__drag-preview .axp-route-tab-bar__tab-title{min-width:0px;flex:auto;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);text-overflow:ellipsis;white-space:nowrap}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--dirty{position:relative}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--dirty:before{pointer-events:none;position:absolute;inset:0;z-index:1;content:\"\";border-radius:inherit;border-top:2px solid rgb(var(--ax-sys-color-warning-500))}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header{border-top-left-radius:var(--radius-lg, .5rem);border-top-right-radius:var(--radius-lg, .5rem);border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:var(--color-primary-dark);color:var(--color-on-primary-dark);border-color:var(--color-border-primary-dark)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-primary-darkest);color:var(--color-on-primary-darkest);border-color:var(--color-border-primary-darkest)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--simple-header{background-color:var(--color-light);color:var(--color-on-light);border-color:var(--color-border-light)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--simple-header.axp-route-tab-bar__drag-preview--active{border-inline-style:var(--tw-border-style);border-inline-width:1px;border-top-style:var(--tw-border-style);border-top-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0px;background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);border-color:var(--color-border-default);box-shadow:0 1px 3px rgb(var(--ax-sys-color-dark) / .12),0 1px 2px rgb(var(--ax-sys-color-dark) / .08)}.cdk-drag-preview.axp-route-tab-bar__drag-preview.axp-route-tab-bar__drag-preview--in-header.axp-route-tab-bar__drag-preview--simple-header.axp-route-tab-bar__drag-preview--active:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-darker);color:var(--color-on-darker);border-color:var(--color-border-darker)}.cdk-drag-preview.axp-route-tab-bar__drag-preview:not(.axp-route-tab-bar__drag-preview--in-header){border-radius:var(--radius-md, .375rem);background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}.cdk-drag-preview.axp-route-tab-bar__drag-preview:not(.axp-route-tab-bar__drag-preview--in-header).axp-route-tab-bar__drag-preview--active{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest)}.axp-route-tab-bar__title-tooltip{display:flex;max-width:calc(var(--spacing, .25rem) * 80);flex-direction:column;gap:var(--spacing, .25rem);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3);text-align:start;border-radius:var(--ax-sys-border-radius);background:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));box-shadow:0 4px 12px rgb(var(--ax-sys-color-dark)/.12),0 1px 3px rgb(var(--ax-sys-color-dark)/.08)}.axp-route-tab-bar__title-tooltip-prefix{display:block;overflow:hidden;font-size:.6875rem;--tw-leading: calc(var(--spacing, .25rem) * 4);line-height:calc(var(--spacing, .25rem) * 4);text-overflow:ellipsis;white-space:nowrap;opacity:.82}.axp-route-tab-bar__title-tooltip-leaf{display:block;overflow:hidden;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);text-overflow:ellipsis;white-space:nowrap}.axp-route-tab-bar__title-tooltip-dirty{margin-top:var(--spacing, .25rem);border-top-style:var(--tw-border-style);border-top-width:1px;padding-top:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: 1.125rem;line-height:1.125rem;border-color:rgb(var(--ax-sys-color-border-light-surface));color:rgb(var(--ax-sys-color-warning-600))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
3264
3277
|
}], propDecorators: { tabStrip: [{ type: i0.ViewChild, args: ['tabStrip', { isSignal: true }] }], tabsScroll: [{ type: i0.ViewChild, args: ['tabsScroll', { isSignal: true }] }], contextMenu: [{ type: i0.ViewChild, args: ['tabContextMenu', { isSignal: true }] }] } });
|
|
3265
3278
|
|
|
3266
3279
|
class AXPRootLayoutHeaderComponent {
|
|
@@ -3273,6 +3286,16 @@ class AXPRootLayoutHeaderComponent {
|
|
|
3273
3286
|
this.shortcutRegistry = inject(AXPKeyboardShortcutRegistry);
|
|
3274
3287
|
this.store = inject(AXPLayoutThemeService);
|
|
3275
3288
|
this.tabNavigation = inject(AXPTabNavigationService);
|
|
3289
|
+
this.hostClass = computed(() => {
|
|
3290
|
+
const base = 'w-full flex min-w-0 items-center gap-2 h-14 px-2 shrink-0 border-b border-default';
|
|
3291
|
+
if (!this.store.headerBrandEnabled()) {
|
|
3292
|
+
return `${base} bg-lightest dark:darker-surface axp-header-simple`;
|
|
3293
|
+
}
|
|
3294
|
+
return `${base} primary-surface ax-light axp-header-brand`;
|
|
3295
|
+
}, /* @ts-ignore */
|
|
3296
|
+
...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
|
|
3297
|
+
this.headerButtonColor = this.store.headerButtonColor;
|
|
3298
|
+
this.headerButtonLook = this.store.headerButtonLook;
|
|
3276
3299
|
this.shortcutRegistry.register({
|
|
3277
3300
|
owner: this.destroyRef,
|
|
3278
3301
|
id: 'root-layout-toggle-side-menu',
|
|
@@ -3299,18 +3322,18 @@ class AXPRootLayoutHeaderComponent {
|
|
|
3299
3322
|
this.router.navigate(['/']);
|
|
3300
3323
|
}
|
|
3301
3324
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRootLayoutHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3302
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRootLayoutHeaderComponent, isStandalone: true, selector: "axp-dashboard-admin-header", host: {
|
|
3325
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRootLayoutHeaderComponent, isStandalone: true, selector: "axp-dashboard-admin-header", host: { properties: { "class": "hostClass()" } }, ngImport: i0, template: "<ax-button\n id=\"axp-menu-toggle\"\n (onClick)=\"toggleSideMenu()\"\n [color]=\"headerButtonColor()\"\n [look]=\"headerButtonLook()\"\n>\n <ax-icon class=\"rtl:rotate-180\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n @if (store.isSideMenuOpen()) {\n <defs>\n <clipPath id=\"clip1382_20239\">\n <rect width=\"30.000000\" height=\"30.000000\" fill=\"white\" fill-opacity=\"0\"></rect>\n </clipPath>\n </defs>\n <rect width=\"30.000000\" height=\"30.000000\" fill=\"#FFFFFF\" fill-opacity=\"0\"></rect>\n <g clip-path=\"url(#clip1382_20239)\">\n <rect\n id=\"rect\"\n x=\"17.420410\"\n y=\"12.316406\"\n rx=\"1.000947\"\n width=\"5.995172\"\n height=\"2.001895\"\n transform=\"rotate(137.159 17.420410 12.316406)\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n ></rect>\n <rect\n id=\"rect\"\n x=\"12.959473\"\n y=\"13.728516\"\n rx=\"0.995190\"\n width=\"6.002943\"\n height=\"1.990380\"\n transform=\"rotate(40.853 12.959473 13.728516)\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n ></rect>\n <path\n id=\"path\"\n d=\"M20.1 25.5L9.9 25.51C9.48 25.51 9.06 25.47 8.65 25.39C8.24 25.3 7.84 25.18 7.45 25.02C7.06 24.86 6.69 24.66 6.34 24.43C5.99 24.19 5.67 23.92 5.37 23.63C5.07 23.33 4.81 23 4.58 22.65C4.34 22.3 4.15 21.93 3.98 21.54C3.82 21.15 3.7 20.75 3.62 20.34C3.54 19.93 3.5 19.51 3.5 19.09L3.5 10.93C3.5 10.51 3.54 10.1 3.62 9.68C3.7 9.27 3.82 8.87 3.98 8.48C4.15 8.09 4.34 7.72 4.58 7.37C4.81 7.02 5.07 6.69 5.37 6.39C5.67 6.1 5.99 5.83 6.34 5.6C6.69 5.36 7.06 5.16 7.45 5C7.84 4.84 8.24 4.72 8.65 4.64C9.06 4.55 9.48 4.51 9.9 4.51L20.1 4.5C20.52 4.5 20.94 4.54 21.35 4.62C21.76 4.7 22.16 4.83 22.55 4.99C22.94 5.15 23.31 5.35 23.66 5.58C24 5.82 24.33 6.08 24.62 6.38C24.92 6.68 25.19 7 25.42 7.35C25.65 7.7 25.85 8.07 26.01 8.46C26.17 8.85 26.3 9.25 26.38 9.67C26.46 10.08 26.5 10.5 26.5 10.92L26.5 19.07C26.5 19.5 26.46 19.91 26.38 20.32C26.3 20.74 26.17 21.14 26.01 21.53C25.85 21.92 25.65 22.29 25.42 22.64C25.19 22.99 24.92 23.31 24.62 23.61C24.33 23.91 24 24.17 23.66 24.41C23.31 24.64 22.94 24.84 22.55 25C22.16 25.16 21.76 25.29 21.35 25.37C20.94 25.45 20.52 25.5 20.1 25.5ZM9.9 6.6C9.61 6.6 9.33 6.63 9.05 6.69C8.78 6.74 8.51 6.82 8.24 6.93C7.98 7.04 7.73 7.18 7.5 7.33C7.26 7.49 7.04 7.67 6.84 7.87C6.64 8.07 6.46 8.29 6.31 8.53C6.15 8.77 6.02 9.01 5.91 9.28C5.8 9.54 5.72 9.81 5.66 10.09C5.61 10.37 5.58 10.65 5.58 10.93L5.58 19.09C5.58 19.37 5.61 19.65 5.66 19.93C5.72 20.21 5.8 20.48 5.91 20.74C6.02 21.01 6.15 21.26 6.31 21.49C6.46 21.73 6.64 21.95 6.84 22.15C7.04 22.35 7.26 22.53 7.5 22.69C7.73 22.85 7.98 22.98 8.24 23.09C8.51 23.2 8.78 23.28 9.05 23.33C9.33 23.39 9.61 23.42 9.9 23.42L20.1 23.41C20.38 23.41 20.67 23.37 20.94 23.32C21.22 23.26 21.49 23.18 21.75 23.07C22.01 22.96 22.26 22.83 22.5 22.67C22.73 22.51 22.95 22.33 23.15 22.13C23.35 21.93 23.53 21.71 23.69 21.48C23.85 21.24 23.98 20.99 24.09 20.73C24.2 20.47 24.28 20.2 24.33 19.92C24.39 19.64 24.42 19.36 24.42 19.07L24.42 10.92C24.42 10.64 24.39 10.35 24.33 10.07C24.28 9.79 24.2 9.52 24.09 9.26C23.98 9 23.85 8.75 23.69 8.51C23.53 8.28 23.35 8.06 23.15 7.86C22.95 7.66 22.73 7.48 22.5 7.32C22.26 7.16 22.01 7.03 21.75 6.92C21.49 6.81 21.22 6.73 20.94 6.67C20.67 6.62 20.38 6.59 20.1 6.59L9.9 6.6Z\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n fill-rule=\"nonzero\"\n ></path>\n <path\n id=\"rect\"\n d=\"M8.5 5.51L10.54 5.51L10.6 24.43L8.55 24.43L8.5 5.51Z\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n fill-rule=\"evenodd\"\n ></path>\n </g>\n } @else {\n <defs>\n <clipPath id=\"clip1381_20236\">\n <rect id=\"\u6253\u5F00\u8FB9\u680F0730\" width=\"30.000000\" height=\"30.000000\" fill=\"white\" fill-opacity=\"0\"></rect>\n </clipPath>\n </defs>\n <rect id=\"\u6253\u5F00\u8FB9\u680F0730\" width=\"30.000000\" height=\"30.000000\" fill=\"#FFFFFF\" fill-opacity=\"0\"></rect>\n <g clip-path=\"url(#clip1381_20236)\">\n <rect\n id=\"rect\"\n x=\"11.572754\"\n y=\"17.683594\"\n rx=\"1.000947\"\n width=\"5.995172\"\n height=\"2.001895\"\n transform=\"rotate(-42.841 11.572754 17.683594)\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n ></rect>\n <rect\n id=\"rect\"\n x=\"16.033691\"\n y=\"16.271484\"\n rx=\"0.995190\"\n width=\"6.002943\"\n height=\"1.990380\"\n transform=\"rotate(-139.147 16.033691 16.271484)\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n ></rect>\n <path\n id=\"path\"\n d=\"M20.09 25.48L9.89 25.5C9.47 25.5 9.05 25.45 8.64 25.37C8.23 25.29 7.83 25.17 7.44 25C7.05 24.84 6.68 24.64 6.33 24.41C5.98 24.18 5.66 23.91 5.36 23.61C5.07 23.31 4.8 22.99 4.57 22.64C4.34 22.29 4.14 21.92 3.98 21.53C3.82 21.14 3.69 20.74 3.61 20.32C3.53 19.91 3.49 19.49 3.49 19.07L3.49 10.92C3.49 10.5 3.53 10.08 3.61 9.67C3.69 9.25 3.82 8.85 3.98 8.46C4.14 8.07 4.34 7.7 4.57 7.35C4.8 7 5.07 6.68 5.36 6.38C5.66 6.08 5.98 5.81 6.33 5.58C6.68 5.35 7.05 5.15 7.44 4.99C7.83 4.82 8.23 4.7 8.64 4.62C9.05 4.54 9.47 4.5 9.89 4.5L20.09 4.48C20.51 4.48 20.93 4.52 21.34 4.6C21.75 4.69 22.15 4.81 22.54 4.97C22.93 5.13 23.3 5.33 23.65 5.57C24 5.8 24.32 6.06 24.62 6.36C24.92 6.66 25.18 6.98 25.41 7.33C25.65 7.69 25.84 8.06 26.01 8.45C26.17 8.84 26.29 9.24 26.37 9.65C26.45 10.06 26.49 10.48 26.5 10.91L26.5 19.06C26.49 19.48 26.45 19.89 26.37 20.31C26.29 20.72 26.17 21.12 26.01 21.51C25.84 21.9 25.65 22.27 25.41 22.62C25.18 22.97 24.92 23.3 24.62 23.6C24.32 23.89 24 24.16 23.65 24.39C23.3 24.63 22.93 24.83 22.54 24.99C22.15 25.15 21.75 25.27 21.34 25.35C20.93 25.44 20.51 25.48 20.09 25.48ZM9.89 6.59C9.61 6.59 9.32 6.62 9.05 6.67C8.77 6.73 8.5 6.81 8.24 6.92C7.98 7.03 7.73 7.16 7.49 7.32C7.26 7.48 7.04 7.66 6.84 7.86C6.64 8.06 6.46 8.28 6.3 8.51C6.14 8.75 6.01 9 5.9 9.26C5.79 9.52 5.71 9.8 5.66 10.07C5.6 10.35 5.57 10.63 5.57 10.92L5.57 19.07C5.57 19.36 5.6 19.64 5.66 19.92C5.71 20.19 5.79 20.47 5.9 20.73C6.01 20.99 6.14 21.24 6.3 21.48C6.46 21.71 6.64 21.93 6.84 22.13C7.04 22.33 7.26 22.51 7.49 22.67C7.73 22.83 7.98 22.96 8.24 23.07C8.5 23.18 8.77 23.26 9.05 23.32C9.32 23.37 9.61 23.4 9.89 23.4L20.09 23.39C20.38 23.39 20.66 23.36 20.94 23.3C21.21 23.25 21.48 23.17 21.75 23.06C22.01 22.95 22.26 22.81 22.49 22.66C22.73 22.5 22.95 22.32 23.15 22.12C23.35 21.91 23.52 21.7 23.68 21.46C23.84 21.22 23.97 20.98 24.08 20.71C24.19 20.45 24.27 20.18 24.33 19.9C24.38 19.62 24.41 19.34 24.41 19.06L24.41 10.91C24.41 10.62 24.38 10.34 24.33 10.06C24.27 9.78 24.19 9.51 24.08 9.25C23.97 8.98 23.84 8.74 23.68 8.5C23.52 8.26 23.35 8.04 23.15 7.84C22.95 7.64 22.73 7.46 22.49 7.3C22.26 7.15 22.01 7.01 21.75 6.9C21.48 6.79 21.21 6.71 20.94 6.66C20.66 6.6 20.38 6.57 20.09 6.57L9.89 6.59Z\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n fill-rule=\"nonzero\"\n ></path>\n <path\n id=\"rect\"\n d=\"M8.49 5.5L10.53 5.5L10.59 24.41L8.54 24.41L8.49 5.5Z\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n fill-rule=\"evenodd\"\n ></path>\n </g>\n }\n </svg>\n </ax-icon>\n</ax-button>\n\n<div class=\"axp-root-header__main h-full flex min-w-0 flex-1 items-center gap-2\">\n @if (tabNavigation.isTabBarVisible()) {\n <axp-route-tab-bar class=\"axp-route-tab-bar--in-header min-w-0 flex-1 self-stretch\"></axp-route-tab-bar>\n }\n <div class=\"flex min-w-0 items-center gap-1\" [class.flex-1]=\"!tabNavigation.isTabBarVisible()\">\n <axp-component-slot name=\"root-header-start\"></axp-component-slot>\n </div>\n</div>\n\n<div class=\"flex shrink-0 items-center gap-1\">\n <axp-component-slot name=\"root-header-end\"></axp-component-slot>\n</div>\n", styles: ["axp-dashboard-admin-header ax-button{border-radius:calc(infinity * 1px)}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXPComponentSlotModule }, { kind: "directive", type: i1$3.AXPComponentSlotDirective, selector: "axp-component-slot", inputs: ["name", "host", "context"], exportAs: ["slot"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$1.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: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXPRouteTabBarComponent, selector: "axp-route-tab-bar" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3303
3326
|
}
|
|
3304
3327
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRootLayoutHeaderComponent, decorators: [{
|
|
3305
3328
|
type: Component,
|
|
3306
3329
|
args: [{ selector: 'axp-dashboard-admin-header', encapsulation: ViewEncapsulation.None, host: {
|
|
3307
|
-
class: '
|
|
3330
|
+
'[class]': 'hostClass()',
|
|
3308
3331
|
}, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
3309
3332
|
AXPComponentSlotModule,
|
|
3310
3333
|
AXButtonModule,
|
|
3311
3334
|
AXDecoratorModule,
|
|
3312
3335
|
AXPRouteTabBarComponent,
|
|
3313
|
-
], template: "<ax-button
|
|
3336
|
+
], template: "<ax-button\n id=\"axp-menu-toggle\"\n (onClick)=\"toggleSideMenu()\"\n [color]=\"headerButtonColor()\"\n [look]=\"headerButtonLook()\"\n>\n <ax-icon class=\"rtl:rotate-180\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n @if (store.isSideMenuOpen()) {\n <defs>\n <clipPath id=\"clip1382_20239\">\n <rect width=\"30.000000\" height=\"30.000000\" fill=\"white\" fill-opacity=\"0\"></rect>\n </clipPath>\n </defs>\n <rect width=\"30.000000\" height=\"30.000000\" fill=\"#FFFFFF\" fill-opacity=\"0\"></rect>\n <g clip-path=\"url(#clip1382_20239)\">\n <rect\n id=\"rect\"\n x=\"17.420410\"\n y=\"12.316406\"\n rx=\"1.000947\"\n width=\"5.995172\"\n height=\"2.001895\"\n transform=\"rotate(137.159 17.420410 12.316406)\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n ></rect>\n <rect\n id=\"rect\"\n x=\"12.959473\"\n y=\"13.728516\"\n rx=\"0.995190\"\n width=\"6.002943\"\n height=\"1.990380\"\n transform=\"rotate(40.853 12.959473 13.728516)\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n ></rect>\n <path\n id=\"path\"\n d=\"M20.1 25.5L9.9 25.51C9.48 25.51 9.06 25.47 8.65 25.39C8.24 25.3 7.84 25.18 7.45 25.02C7.06 24.86 6.69 24.66 6.34 24.43C5.99 24.19 5.67 23.92 5.37 23.63C5.07 23.33 4.81 23 4.58 22.65C4.34 22.3 4.15 21.93 3.98 21.54C3.82 21.15 3.7 20.75 3.62 20.34C3.54 19.93 3.5 19.51 3.5 19.09L3.5 10.93C3.5 10.51 3.54 10.1 3.62 9.68C3.7 9.27 3.82 8.87 3.98 8.48C4.15 8.09 4.34 7.72 4.58 7.37C4.81 7.02 5.07 6.69 5.37 6.39C5.67 6.1 5.99 5.83 6.34 5.6C6.69 5.36 7.06 5.16 7.45 5C7.84 4.84 8.24 4.72 8.65 4.64C9.06 4.55 9.48 4.51 9.9 4.51L20.1 4.5C20.52 4.5 20.94 4.54 21.35 4.62C21.76 4.7 22.16 4.83 22.55 4.99C22.94 5.15 23.31 5.35 23.66 5.58C24 5.82 24.33 6.08 24.62 6.38C24.92 6.68 25.19 7 25.42 7.35C25.65 7.7 25.85 8.07 26.01 8.46C26.17 8.85 26.3 9.25 26.38 9.67C26.46 10.08 26.5 10.5 26.5 10.92L26.5 19.07C26.5 19.5 26.46 19.91 26.38 20.32C26.3 20.74 26.17 21.14 26.01 21.53C25.85 21.92 25.65 22.29 25.42 22.64C25.19 22.99 24.92 23.31 24.62 23.61C24.33 23.91 24 24.17 23.66 24.41C23.31 24.64 22.94 24.84 22.55 25C22.16 25.16 21.76 25.29 21.35 25.37C20.94 25.45 20.52 25.5 20.1 25.5ZM9.9 6.6C9.61 6.6 9.33 6.63 9.05 6.69C8.78 6.74 8.51 6.82 8.24 6.93C7.98 7.04 7.73 7.18 7.5 7.33C7.26 7.49 7.04 7.67 6.84 7.87C6.64 8.07 6.46 8.29 6.31 8.53C6.15 8.77 6.02 9.01 5.91 9.28C5.8 9.54 5.72 9.81 5.66 10.09C5.61 10.37 5.58 10.65 5.58 10.93L5.58 19.09C5.58 19.37 5.61 19.65 5.66 19.93C5.72 20.21 5.8 20.48 5.91 20.74C6.02 21.01 6.15 21.26 6.31 21.49C6.46 21.73 6.64 21.95 6.84 22.15C7.04 22.35 7.26 22.53 7.5 22.69C7.73 22.85 7.98 22.98 8.24 23.09C8.51 23.2 8.78 23.28 9.05 23.33C9.33 23.39 9.61 23.42 9.9 23.42L20.1 23.41C20.38 23.41 20.67 23.37 20.94 23.32C21.22 23.26 21.49 23.18 21.75 23.07C22.01 22.96 22.26 22.83 22.5 22.67C22.73 22.51 22.95 22.33 23.15 22.13C23.35 21.93 23.53 21.71 23.69 21.48C23.85 21.24 23.98 20.99 24.09 20.73C24.2 20.47 24.28 20.2 24.33 19.92C24.39 19.64 24.42 19.36 24.42 19.07L24.42 10.92C24.42 10.64 24.39 10.35 24.33 10.07C24.28 9.79 24.2 9.52 24.09 9.26C23.98 9 23.85 8.75 23.69 8.51C23.53 8.28 23.35 8.06 23.15 7.86C22.95 7.66 22.73 7.48 22.5 7.32C22.26 7.16 22.01 7.03 21.75 6.92C21.49 6.81 21.22 6.73 20.94 6.67C20.67 6.62 20.38 6.59 20.1 6.59L9.9 6.6Z\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n fill-rule=\"nonzero\"\n ></path>\n <path\n id=\"rect\"\n d=\"M8.5 5.51L10.54 5.51L10.6 24.43L8.55 24.43L8.5 5.51Z\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n fill-rule=\"evenodd\"\n ></path>\n </g>\n } @else {\n <defs>\n <clipPath id=\"clip1381_20236\">\n <rect id=\"\u6253\u5F00\u8FB9\u680F0730\" width=\"30.000000\" height=\"30.000000\" fill=\"white\" fill-opacity=\"0\"></rect>\n </clipPath>\n </defs>\n <rect id=\"\u6253\u5F00\u8FB9\u680F0730\" width=\"30.000000\" height=\"30.000000\" fill=\"#FFFFFF\" fill-opacity=\"0\"></rect>\n <g clip-path=\"url(#clip1381_20236)\">\n <rect\n id=\"rect\"\n x=\"11.572754\"\n y=\"17.683594\"\n rx=\"1.000947\"\n width=\"5.995172\"\n height=\"2.001895\"\n transform=\"rotate(-42.841 11.572754 17.683594)\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n ></rect>\n <rect\n id=\"rect\"\n x=\"16.033691\"\n y=\"16.271484\"\n rx=\"0.995190\"\n width=\"6.002943\"\n height=\"1.990380\"\n transform=\"rotate(-139.147 16.033691 16.271484)\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n ></rect>\n <path\n id=\"path\"\n d=\"M20.09 25.48L9.89 25.5C9.47 25.5 9.05 25.45 8.64 25.37C8.23 25.29 7.83 25.17 7.44 25C7.05 24.84 6.68 24.64 6.33 24.41C5.98 24.18 5.66 23.91 5.36 23.61C5.07 23.31 4.8 22.99 4.57 22.64C4.34 22.29 4.14 21.92 3.98 21.53C3.82 21.14 3.69 20.74 3.61 20.32C3.53 19.91 3.49 19.49 3.49 19.07L3.49 10.92C3.49 10.5 3.53 10.08 3.61 9.67C3.69 9.25 3.82 8.85 3.98 8.46C4.14 8.07 4.34 7.7 4.57 7.35C4.8 7 5.07 6.68 5.36 6.38C5.66 6.08 5.98 5.81 6.33 5.58C6.68 5.35 7.05 5.15 7.44 4.99C7.83 4.82 8.23 4.7 8.64 4.62C9.05 4.54 9.47 4.5 9.89 4.5L20.09 4.48C20.51 4.48 20.93 4.52 21.34 4.6C21.75 4.69 22.15 4.81 22.54 4.97C22.93 5.13 23.3 5.33 23.65 5.57C24 5.8 24.32 6.06 24.62 6.36C24.92 6.66 25.18 6.98 25.41 7.33C25.65 7.69 25.84 8.06 26.01 8.45C26.17 8.84 26.29 9.24 26.37 9.65C26.45 10.06 26.49 10.48 26.5 10.91L26.5 19.06C26.49 19.48 26.45 19.89 26.37 20.31C26.29 20.72 26.17 21.12 26.01 21.51C25.84 21.9 25.65 22.27 25.41 22.62C25.18 22.97 24.92 23.3 24.62 23.6C24.32 23.89 24 24.16 23.65 24.39C23.3 24.63 22.93 24.83 22.54 24.99C22.15 25.15 21.75 25.27 21.34 25.35C20.93 25.44 20.51 25.48 20.09 25.48ZM9.89 6.59C9.61 6.59 9.32 6.62 9.05 6.67C8.77 6.73 8.5 6.81 8.24 6.92C7.98 7.03 7.73 7.16 7.49 7.32C7.26 7.48 7.04 7.66 6.84 7.86C6.64 8.06 6.46 8.28 6.3 8.51C6.14 8.75 6.01 9 5.9 9.26C5.79 9.52 5.71 9.8 5.66 10.07C5.6 10.35 5.57 10.63 5.57 10.92L5.57 19.07C5.57 19.36 5.6 19.64 5.66 19.92C5.71 20.19 5.79 20.47 5.9 20.73C6.01 20.99 6.14 21.24 6.3 21.48C6.46 21.71 6.64 21.93 6.84 22.13C7.04 22.33 7.26 22.51 7.49 22.67C7.73 22.83 7.98 22.96 8.24 23.07C8.5 23.18 8.77 23.26 9.05 23.32C9.32 23.37 9.61 23.4 9.89 23.4L20.09 23.39C20.38 23.39 20.66 23.36 20.94 23.3C21.21 23.25 21.48 23.17 21.75 23.06C22.01 22.95 22.26 22.81 22.49 22.66C22.73 22.5 22.95 22.32 23.15 22.12C23.35 21.91 23.52 21.7 23.68 21.46C23.84 21.22 23.97 20.98 24.08 20.71C24.19 20.45 24.27 20.18 24.33 19.9C24.38 19.62 24.41 19.34 24.41 19.06L24.41 10.91C24.41 10.62 24.38 10.34 24.33 10.06C24.27 9.78 24.19 9.51 24.08 9.25C23.97 8.98 23.84 8.74 23.68 8.5C23.52 8.26 23.35 8.04 23.15 7.84C22.95 7.64 22.73 7.46 22.49 7.3C22.26 7.15 22.01 7.01 21.75 6.9C21.48 6.79 21.21 6.71 20.94 6.66C20.66 6.6 20.38 6.57 20.09 6.57L9.89 6.59Z\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n fill-rule=\"nonzero\"\n ></path>\n <path\n id=\"rect\"\n d=\"M8.49 5.5L10.53 5.5L10.59 24.41L8.54 24.41L8.49 5.5Z\"\n fill=\"currentColor\"\n fill-opacity=\"1.000000\"\n fill-rule=\"evenodd\"\n ></path>\n </g>\n }\n </svg>\n </ax-icon>\n</ax-button>\n\n<div class=\"axp-root-header__main h-full flex min-w-0 flex-1 items-center gap-2\">\n @if (tabNavigation.isTabBarVisible()) {\n <axp-route-tab-bar class=\"axp-route-tab-bar--in-header min-w-0 flex-1 self-stretch\"></axp-route-tab-bar>\n }\n <div class=\"flex min-w-0 items-center gap-1\" [class.flex-1]=\"!tabNavigation.isTabBarVisible()\">\n <axp-component-slot name=\"root-header-start\"></axp-component-slot>\n </div>\n</div>\n\n<div class=\"flex shrink-0 items-center gap-1\">\n <axp-component-slot name=\"root-header-end\"></axp-component-slot>\n</div>\n", styles: ["axp-dashboard-admin-header ax-button{border-radius:calc(infinity * 1px)}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
3314
3337
|
}], ctorParameters: () => [] });
|
|
3315
3338
|
|
|
3316
3339
|
class AXPRootLayoutMenuComponent {
|
|
@@ -3336,10 +3359,21 @@ class AXPRootLayoutMenuComponent {
|
|
|
3336
3359
|
}
|
|
3337
3360
|
//#endregion
|
|
3338
3361
|
async ngOnInit() {
|
|
3339
|
-
|
|
3362
|
+
let nextValue = true;
|
|
3363
|
+
try {
|
|
3364
|
+
nextValue =
|
|
3365
|
+
(await this.settingsService.get(AXPThemeLayoutSetting.MenuBadgeVisible)) ?? true;
|
|
3366
|
+
}
|
|
3367
|
+
catch {
|
|
3368
|
+
nextValue = true;
|
|
3369
|
+
}
|
|
3370
|
+
this.badgeVisible.set(nextValue);
|
|
3340
3371
|
this.settingsService.onChanged.subscribe((setting) => {
|
|
3341
3372
|
if (setting.keys.includes(AXPThemeLayoutSetting.MenuBadgeVisible)) {
|
|
3342
|
-
|
|
3373
|
+
const value = setting.values[AXPThemeLayoutSetting.MenuBadgeVisible];
|
|
3374
|
+
if (typeof value === 'boolean') {
|
|
3375
|
+
this.badgeVisible.set(value);
|
|
3376
|
+
}
|
|
3343
3377
|
}
|
|
3344
3378
|
});
|
|
3345
3379
|
}
|
|
@@ -3551,7 +3585,7 @@ class AXPRootLayoutMenuComponent {
|
|
|
3551
3585
|
return lowerPath.startsWith('http://') || lowerPath.startsWith('https://');
|
|
3552
3586
|
}
|
|
3553
3587
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRootLayoutMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3554
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRootLayoutMenuComponent, isStandalone: true, selector: "axp-side-menu", ngImport: i0, template: "<ax-side-menu [mode]=\"menuMode()\" [attr.data-access-policy]=\"accessPolicyRevision()\">\n @let sortedItems = sort(menuStore.items());\n @for (item of sortedItems; track item; let i = $index) {\n <ng-container\n [ngTemplateOutlet]=\"recursiveMenu\"\n [ngTemplateOutletContext]=\"{ item: item, items: sortedItems, index: i }\"\n >\n </ng-container>\n }\n</ax-side-menu>\n<ng-template #recursiveMenu let-item=\"item\" let-items=\"items\" let-index=\"index\">\n @if (item.type == 'group' && menuMode() === 'full') {\n @if (isItemVisible(item)) {\n <ax-title>{{ item.text | translate | async }}</ax-title>\n }\n } @else if (item.type == 'break') {\n @if (shouldShowDivider(item, items, index)) {\n <ax-divider></ax-divider>\n }\n } @else {\n @if (shouldRenderMenuItem(item)) {\n <ax-side-menu-item\n [attr.id]=\"'axp-menu-item-' + (item.name || item.text)\"\n (onClick)=\"onMenuItemClick(item)\"\n [active]=\"isMenuItemActive(item)\"\n [isCollapsed]=\"isMenuItemCollapsed(item)\"\n >\n <ax-prefix>\n <ax-icon [class]=\"item.icon\" class=\"fa-fw\"></ax-icon>\n </ax-prefix>\n <span>{{ item.text | translate | async }}</span>\n @if (item.children?.length) {\n <ng-container>\n @let sortedChildren = sort(item.children);\n @for (child of sortedChildren; track child; let childIndex = $index) {\n <ng-container\n [ngTemplateOutlet]=\"recursiveMenu\"\n [ngTemplateOutletContext]=\"{ item: child, items: sortedChildren, index: childIndex }\"\n >\n </ng-container>\n }\n </ng-container>\n }\n <ax-suffix>\n @if (badgeVisible()) {\n <ax-badge [axp-task-badge]=\"getMenuBadge(item)()\" color=\"secondary\"></ax-badge>\n }\n </ax-suffix>\n </ax-side-menu-item>\n }\n }\n</ng-template>\n", styles: ["axp-side-menu{--ax-comp-side-menu-active-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-side-menu-active-text-color: var(--ax-sys-color-on-primary-surface)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1
|
|
3588
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRootLayoutMenuComponent, isStandalone: true, selector: "axp-side-menu", ngImport: i0, template: "<ax-side-menu [mode]=\"menuMode()\" [attr.data-access-policy]=\"accessPolicyRevision()\">\n @let sortedItems = sort(menuStore.items());\n @for (item of sortedItems; track item; let i = $index) {\n <ng-container\n [ngTemplateOutlet]=\"recursiveMenu\"\n [ngTemplateOutletContext]=\"{ item: item, items: sortedItems, index: i }\"\n >\n </ng-container>\n }\n</ax-side-menu>\n<ng-template #recursiveMenu let-item=\"item\" let-items=\"items\" let-index=\"index\">\n @if (item.type == 'group' && menuMode() === 'full') {\n @if (isItemVisible(item)) {\n <ax-title>{{ item.text | translate | async }}</ax-title>\n }\n } @else if (item.type == 'break') {\n @if (shouldShowDivider(item, items, index)) {\n <ax-divider></ax-divider>\n }\n } @else {\n @if (shouldRenderMenuItem(item)) {\n <ax-side-menu-item\n [attr.id]=\"'axp-menu-item-' + (item.name || item.text)\"\n (onClick)=\"onMenuItemClick(item)\"\n [active]=\"isMenuItemActive(item)\"\n [isCollapsed]=\"isMenuItemCollapsed(item)\"\n >\n <ax-prefix>\n <ax-icon [class]=\"item.icon\" class=\"fa-fw\"></ax-icon>\n </ax-prefix>\n <span>{{ item.text | translate | async }}</span>\n @if (item.children?.length) {\n <ng-container>\n @let sortedChildren = sort(item.children);\n @for (child of sortedChildren; track child; let childIndex = $index) {\n <ng-container\n [ngTemplateOutlet]=\"recursiveMenu\"\n [ngTemplateOutletContext]=\"{ item: child, items: sortedChildren, index: childIndex }\"\n >\n </ng-container>\n }\n </ng-container>\n }\n <ax-suffix>\n @if (badgeVisible()) {\n <ax-badge [axp-task-badge]=\"getMenuBadge(item)()\" color=\"secondary\"></ax-badge>\n }\n </ax-suffix>\n </ax-side-menu-item>\n }\n }\n</ng-template>\n", styles: ["axp-side-menu{--ax-comp-side-menu-active-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-side-menu-active-text-color: var(--ax-sys-color-on-primary-surface)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXSideMenuModule }, { kind: "component", type: i2$4.AXSideMenuComponent, selector: "ax-side-menu", inputs: ["items", "look", "location", "mode"], outputs: ["itemsChange"] }, { kind: "component", type: i2$4.AXSideMenuItemComponent, selector: "ax-side-menu-item", inputs: ["disabled", "text", "active", "isLoading", "isCollapsed", "toggleOnClick", "href", "routerLink", "routerLinkActive", "routerLinkActiveOptions", "target"], outputs: ["textChange", "activeChange", "isLoadingChange", "isCollapsedChange", "onClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: AXPTaskBadgeDirective, selector: "[axp-task-badge]", inputs: ["badgeKey", "axp-task-badge"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.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: AXBadgeModule }, { kind: "component", type: i4.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3555
3589
|
}
|
|
3556
3590
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRootLayoutMenuComponent, decorators: [{
|
|
3557
3591
|
type: Component,
|
|
@@ -3746,7 +3780,7 @@ class AXPHorizontalMenuComponent {
|
|
|
3746
3780
|
return lowerPath.startsWith('http://') || lowerPath.startsWith('https://');
|
|
3747
3781
|
}
|
|
3748
3782
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPHorizontalMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3749
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPHorizontalMenuComponent, isStandalone: true, selector: "axp-horizontal-menu", host: { classAttribute: "primary-surface" }, ngImport: i0, template: "<div class=\"w-full flex items-center justify-between gap-1 h-14 px-4\">\n <div class=\"flex items-center gap-1\">\n <axp-logo logoKey=\"platform\" appearance=\"onDark\" format=\"full\" [size]=\"200\" [attr.alt]=\"platformTitle()\"></axp-logo>\n </div>\n <div class=\"flex items-center gap-1\">\n <axp-component-slot name=\"root-header-start\"></axp-component-slot>\n <axp-component-slot name=\"root-header-end\"></axp-component-slot>\n </div>\n</div>\n\n<div class=\"__menu-bar\">\n <ax-menu [orientation]=\"'horizontal'\" [class.ax-dark]=\"layoutService.isDarkMode()\" [hasArrow]=\"true\" [attr.data-access-policy]=\"accessPolicyRevision()\">\n @let sortedItems = sort(menuStore.items());\n @for (item of sortedItems; track item; let i = $index) {\n <ng-container [ngTemplateOutlet]=\"recursiveMenu\" [ngTemplateOutletContext]=\"{ item: item, items: sortedItems, index: i }\"></ng-container>\n }\n <!-- Item Templates -->\n <ng-template #recursiveMenu let-item=\"item\" let-items=\"items\" let-index=\"index\">\n @if (item.type == 'group') {\n @if (isItemVisible(item)) {\n <ax-title>{{ item.text | translate | async }}</ax-title>\n }\n } @else if (item.type == 'break') {\n @if (shouldShowDivider(item, items, index)) {\n <ax-divider></ax-divider>\n }\n } @else {\n @if (shouldRenderMenuItem(item)) {\n <ax-menu-item (onClick)=\"onMenuItemClick(item)\">\n @if (!item.meta?.isRoot) {\n <ax-prefix>\n <ax-icon [class]=\"item.icon\" class=\"fa-fw\"></ax-icon>\n </ax-prefix>\n }\n <ax-text>{{ item.text | translate | async }}</ax-text>\n @if (item.children?.length) {\n <ng-container>\n @let sortedChildren = sort(item.children);\n @for (child of sortedChildren; track child; let childIndex = $index) {\n <ng-container [ngTemplateOutlet]=\"recursiveMenu\" [ngTemplateOutletContext]=\"{ item: child, items: sortedChildren, index: childIndex }\"></ng-container>\n }\n </ng-container>\n }\n <ax-suffix>\n @if (badgeVisible()) {\n <ax-badge [axp-task-badge]=\"getMenuBadge(item)()\" color=\"secondary\"></ax-badge>\n }\n </ax-suffix>\n </ax-menu-item>\n }\n }\n </ng-template>\n </ax-menu>\n</div>\n<!-- <div class=\"__tab-bar\">\n<div class=\"axp-tabs-item axp-state-active\">\n <span class=\"font-medium\">Account</span>\n <i class=\"fa-light fa-times text-sm\"></i>\n</div>\n<div class=\"axp-tabs-item\">\n <span class=\"font-medium\">Projects</span>\n\n</div>\n</div> -->\n", styles: ["@layer properties;.__tab-bar{display:flex;height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:flex-end;gap:calc(var(--spacing, .25rem) * 2);background-color:rgba(var(--ax-sys-color-primary-darker-surface));padding-inline:calc(var(--spacing, .25rem) * 4);color:rgba(var(--ax-sys-color-on-primary-darker-surface))}.__tab-bar .axp-tabs-item{display:flex;height:calc(var(--spacing, .25rem) * 10);cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2);border-top-left-radius:var(--radius-lg, .5rem);border-top-right-radius:var(--radius-lg, .5rem);padding-inline:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: 1;line-height:1}.__tab-bar .axp-tabs-item:hover,.__tab-bar .axp-tabs-item.axp-state-active{background-color:rgba(var(--ax-sys-color-lightest-surface));color:rgba(var(--ax-sys-color-on-lightest-surface))}.__menu-bar{display:flex;width:100%;align-items:flex-end;gap:calc(var(--spacing, .25rem) * 2);overflow-x:auto;background-color:rgba(var(--ax-sys-color-primary-dark-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 1.5);color:rgba(var(--ax-sys-color-on-primary-dark-surface))}@property --tw-leading{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1
|
|
3783
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPHorizontalMenuComponent, isStandalone: true, selector: "axp-horizontal-menu", host: { classAttribute: "primary-surface" }, ngImport: i0, template: "<div class=\"w-full flex items-center justify-between gap-1 h-14 px-4\">\n <div class=\"flex items-center gap-1\">\n <axp-logo logoKey=\"platform\" appearance=\"onDark\" format=\"full\" [size]=\"200\" [attr.alt]=\"platformTitle()\"></axp-logo>\n </div>\n <div class=\"flex items-center gap-1\">\n <axp-component-slot name=\"root-header-start\"></axp-component-slot>\n <axp-component-slot name=\"root-header-end\"></axp-component-slot>\n </div>\n</div>\n\n<div class=\"__menu-bar\">\n <ax-menu [orientation]=\"'horizontal'\" [class.ax-dark]=\"layoutService.isDarkMode()\" [hasArrow]=\"true\" [attr.data-access-policy]=\"accessPolicyRevision()\">\n @let sortedItems = sort(menuStore.items());\n @for (item of sortedItems; track item; let i = $index) {\n <ng-container [ngTemplateOutlet]=\"recursiveMenu\" [ngTemplateOutletContext]=\"{ item: item, items: sortedItems, index: i }\"></ng-container>\n }\n <!-- Item Templates -->\n <ng-template #recursiveMenu let-item=\"item\" let-items=\"items\" let-index=\"index\">\n @if (item.type == 'group') {\n @if (isItemVisible(item)) {\n <ax-title>{{ item.text | translate | async }}</ax-title>\n }\n } @else if (item.type == 'break') {\n @if (shouldShowDivider(item, items, index)) {\n <ax-divider></ax-divider>\n }\n } @else {\n @if (shouldRenderMenuItem(item)) {\n <ax-menu-item (onClick)=\"onMenuItemClick(item)\">\n @if (!item.meta?.isRoot) {\n <ax-prefix>\n <ax-icon [class]=\"item.icon\" class=\"fa-fw\"></ax-icon>\n </ax-prefix>\n }\n <ax-text>{{ item.text | translate | async }}</ax-text>\n @if (item.children?.length) {\n <ng-container>\n @let sortedChildren = sort(item.children);\n @for (child of sortedChildren; track child; let childIndex = $index) {\n <ng-container [ngTemplateOutlet]=\"recursiveMenu\" [ngTemplateOutletContext]=\"{ item: child, items: sortedChildren, index: childIndex }\"></ng-container>\n }\n </ng-container>\n }\n <ax-suffix>\n @if (badgeVisible()) {\n <ax-badge [axp-task-badge]=\"getMenuBadge(item)()\" color=\"secondary\"></ax-badge>\n }\n </ax-suffix>\n </ax-menu-item>\n }\n }\n </ng-template>\n </ax-menu>\n</div>\n<!-- <div class=\"__tab-bar\">\n<div class=\"axp-tabs-item axp-state-active\">\n <span class=\"font-medium\">Account</span>\n <i class=\"fa-light fa-times text-sm\"></i>\n</div>\n<div class=\"axp-tabs-item\">\n <span class=\"font-medium\">Projects</span>\n\n</div>\n</div> -->\n", styles: ["@layer properties;.__tab-bar{display:flex;height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:flex-end;gap:calc(var(--spacing, .25rem) * 2);background-color:rgba(var(--ax-sys-color-primary-darker-surface));padding-inline:calc(var(--spacing, .25rem) * 4);color:rgba(var(--ax-sys-color-on-primary-darker-surface))}.__tab-bar .axp-tabs-item{display:flex;height:calc(var(--spacing, .25rem) * 10);cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2);border-top-left-radius:var(--radius-lg, .5rem);border-top-right-radius:var(--radius-lg, .5rem);padding-inline:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: 1;line-height:1}.__tab-bar .axp-tabs-item:hover,.__tab-bar .axp-tabs-item.axp-state-active{background-color:rgba(var(--ax-sys-color-lightest-surface));color:rgba(var(--ax-sys-color-on-lightest-surface))}.__menu-bar{display:flex;width:100%;align-items:flex-end;gap:calc(var(--spacing, .25rem) * 2);overflow-x:auto;background-color:rgba(var(--ax-sys-color-primary-dark-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 1.5);color:rgba(var(--ax-sys-color-on-primary-dark-surface))}@property --tw-leading{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXPComponentSlotModule }, { kind: "directive", type: i1$3.AXPComponentSlotDirective, selector: "axp-component-slot", inputs: ["name", "host", "context"], exportAs: ["slot"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.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: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i4$1.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["subItems", "name", "data", "disabled", "color"], outputs: ["onClick"] }, { kind: "component", type: i4$1.AXMenuComponent, selector: "ax-menu", inputs: ["orientation", "openOn", "closeOn", "items", "hasArrow"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: AXPTaskBadgeDirective, selector: "[axp-task-badge]", inputs: ["badgeKey", "axp-task-badge"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i4.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3750
3784
|
}
|
|
3751
3785
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPHorizontalMenuComponent, decorators: [{
|
|
3752
3786
|
type: Component,
|
|
@@ -3768,7 +3802,7 @@ class AXPRootHorizontalLayoutComponent {
|
|
|
3768
3802
|
}
|
|
3769
3803
|
}
|
|
3770
3804
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRootHorizontalLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3771
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRootHorizontalLayoutComponent, isStandalone: true, selector: "axp-root-horizontal-layout", viewQueries: [{ propertyName: "drawer", first: true, predicate: ["drawer"], descendants: true }], ngImport: i0, template: "<div class=\"axp-root-layout\">\n <ax-drawer-container>\n <ax-content class=\"flex flex-col relative bg-lightest dark:bg-lighter\">\n @if(store.isNavigationLoading()) {\n <div class=\"axp-navigating-progress\">\n <div></div>\n </div>\n }\n <axp-horizontal-menu></axp-horizontal-menu>\n <div class=\"flex-1 overflow-auto
|
|
3805
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRootHorizontalLayoutComponent, isStandalone: true, selector: "axp-root-horizontal-layout", viewQueries: [{ propertyName: "drawer", first: true, predicate: ["drawer"], descendants: true }], ngImport: i0, template: "<div class=\"axp-root-layout\">\n <ax-drawer-container class=\"min-h-0 flex-1\">\n <ax-content class=\"flex min-h-0 flex-1 flex-col relative bg-lightest dark:bg-lighter overflow-hidden\">\n @if(store.isNavigationLoading()) {\n <div class=\"axp-navigating-progress\">\n <div></div>\n </div>\n }\n <axp-horizontal-menu class=\"shrink-0\"></axp-horizontal-menu>\n <div class=\"relative min-h-0 flex-1 overflow-auto\">\n <router-outlet></router-outlet>\n </div>\n <axp-dashboard-admin-footer class=\"shrink-0\"></axp-dashboard-admin-footer>\n </ax-content>\n </ax-drawer-container>\n</div>", styles: [".axp-root-layout{display:flex;height:100%;width:100%;flex-direction:column;justify-content:space-between}.axp-navigating-progress{position:absolute;top:0;height:var(--spacing, .25rem);width:100%;overflow:hidden;background-color:rgba(var(--ax-sys-color-primary-200))}@supports (color: color-mix(in lab,red,red)){.axp-navigating-progress{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-200)) 40%,transparent)}}.axp-navigating-progress>div{height:100%;width:100%;background-color:rgba(var(--ax-sys-color-primary-500));animation:indeterminateAnimation 1.5s infinite cubic-bezier(.65,.815,.735,.395);transform-origin:0% 50%}@keyframes indeterminateAnimation{0%{transform:translate(-100%) scaleX(.2)}50%{transform:translate(50%) scaleX(.6)}to{transform:translate(100%) scaleX(.4)}}.resize-handle{background-color:transparent!important}.resize-handle:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$4.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.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: AXDropdownModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXImageModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$2.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXSideMenuModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXPAuthModule }, { kind: "component", type: AXPRootLayoutFooterComponent, selector: "axp-dashboard-admin-footer" }, { kind: "component", type: AXPHorizontalMenuComponent, selector: "axp-horizontal-menu" }, { kind: "ngmodule", type: AXPComponentSlotModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3772
3806
|
}
|
|
3773
3807
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRootHorizontalLayoutComponent, decorators: [{
|
|
3774
3808
|
type: Component,
|
|
@@ -3791,7 +3825,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3791
3825
|
AXPRootLayoutFooterComponent,
|
|
3792
3826
|
AXPHorizontalMenuComponent,
|
|
3793
3827
|
AXPComponentSlotModule
|
|
3794
|
-
], template: "<div class=\"axp-root-layout\">\n <ax-drawer-container>\n <ax-content class=\"flex flex-col relative bg-lightest dark:bg-lighter\">\n @if(store.isNavigationLoading()) {\n <div class=\"axp-navigating-progress\">\n <div></div>\n </div>\n }\n <axp-horizontal-menu></axp-horizontal-menu>\n <div class=\"flex-1 overflow-auto
|
|
3828
|
+
], template: "<div class=\"axp-root-layout\">\n <ax-drawer-container class=\"min-h-0 flex-1\">\n <ax-content class=\"flex min-h-0 flex-1 flex-col relative bg-lightest dark:bg-lighter overflow-hidden\">\n @if(store.isNavigationLoading()) {\n <div class=\"axp-navigating-progress\">\n <div></div>\n </div>\n }\n <axp-horizontal-menu class=\"shrink-0\"></axp-horizontal-menu>\n <div class=\"relative min-h-0 flex-1 overflow-auto\">\n <router-outlet></router-outlet>\n </div>\n <axp-dashboard-admin-footer class=\"shrink-0\"></axp-dashboard-admin-footer>\n </ax-content>\n </ax-drawer-container>\n</div>", styles: [".axp-root-layout{display:flex;height:100%;width:100%;flex-direction:column;justify-content:space-between}.axp-navigating-progress{position:absolute;top:0;height:var(--spacing, .25rem);width:100%;overflow:hidden;background-color:rgba(var(--ax-sys-color-primary-200))}@supports (color: color-mix(in lab,red,red)){.axp-navigating-progress{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-200)) 40%,transparent)}}.axp-navigating-progress>div{height:100%;width:100%;background-color:rgba(var(--ax-sys-color-primary-500));animation:indeterminateAnimation 1.5s infinite cubic-bezier(.65,.815,.735,.395);transform-origin:0% 50%}@keyframes indeterminateAnimation{0%{transform:translate(-100%) scaleX(.2)}50%{transform:translate(50%) scaleX(.6)}to{transform:translate(100%) scaleX(.4)}}.resize-handle{background-color:transparent!important}.resize-handle:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
3795
3829
|
}], propDecorators: { drawer: [{
|
|
3796
3830
|
type: ViewChild,
|
|
3797
3831
|
args: ['drawer']
|
|
@@ -3805,6 +3839,63 @@ class AXPRootVerticalLayoutComponent {
|
|
|
3805
3839
|
/** Recreates the drawer when switching overlay ↔ push to reset internal layout sizing. */
|
|
3806
3840
|
this.sideMenuDrawerKey = computed(() => this.deviceService.isSmall() || this.deviceService.isMedium() ? 'overlay' : 'push', /* @ts-ignore */
|
|
3807
3841
|
...(ngDevMode ? [{ debugName: "sideMenuDrawerKey" }] : /* istanbul ignore next */ []));
|
|
3842
|
+
/** Logo / profile divider: white on dark menus, black on light menus. */
|
|
3843
|
+
this.sideMenuDividerBorderClass = computed(() => {
|
|
3844
|
+
const appearance = this.store.menuAppearance();
|
|
3845
|
+
if (appearance === 'brand-light' && this.store.isDarkMode()) {
|
|
3846
|
+
return 'border-white/7';
|
|
3847
|
+
}
|
|
3848
|
+
return this.store.menuDarkEnabled() ? 'border-white/7' : 'border-black/7';
|
|
3849
|
+
}, /* @ts-ignore */
|
|
3850
|
+
...(ngDevMode ? [{ debugName: "sideMenuDividerBorderClass" }] : /* istanbul ignore next */ []));
|
|
3851
|
+
/** Brand-light menu surface: primary in light app mode, primary-darkest in dark app mode. */
|
|
3852
|
+
this.sideMenuBrandLightSurfaceClass = computed(() => this.store.isDarkMode() ? 'ax-dark primary-darkest-surface' : 'primary-surface', /* @ts-ignore */
|
|
3853
|
+
...(ngDevMode ? [{ debugName: "sideMenuBrandLightSurfaceClass" }] : /* istanbul ignore next */ []));
|
|
3854
|
+
/** Header chrome for dark / light / brand-light / brand-dark menu appearances. */
|
|
3855
|
+
this.sideMenuHeaderClass = computed(() => {
|
|
3856
|
+
const appearance = this.store.menuAppearance();
|
|
3857
|
+
const base = `h-14 flex items-center justify-center border-b ${this.sideMenuDividerBorderClass()}`;
|
|
3858
|
+
switch (appearance) {
|
|
3859
|
+
case 'dark':
|
|
3860
|
+
return `${base} ax-dark bg-lighter dark:bg-darker`;
|
|
3861
|
+
case 'light':
|
|
3862
|
+
return `${base} ax-light bg-primary-500 text-primary-on-surface`;
|
|
3863
|
+
case 'brand-light':
|
|
3864
|
+
return `${base} ${this.sideMenuBrandLightSurfaceClass()}`;
|
|
3865
|
+
case 'brand-dark':
|
|
3866
|
+
return `${base} primary-darkest-surface`;
|
|
3867
|
+
default:
|
|
3868
|
+
return `${base} ax-dark bg-lighter dark:bg-darker`;
|
|
3869
|
+
}
|
|
3870
|
+
}, /* @ts-ignore */
|
|
3871
|
+
...(ngDevMode ? [{ debugName: "sideMenuHeaderClass" }] : /* istanbul ignore next */ []));
|
|
3872
|
+
/** Body chrome for dark / light / brand-light / brand-dark menu appearances. */
|
|
3873
|
+
this.sideMenuSurfaceClass = computed(() => {
|
|
3874
|
+
const appearance = this.store.menuAppearance();
|
|
3875
|
+
const base = 'axp-side-menu-scroll flex h-full flex-col overflow-x-hidden overflow-y-scroll';
|
|
3876
|
+
switch (appearance) {
|
|
3877
|
+
case 'dark':
|
|
3878
|
+
return `${base} ax-dark bg-lighter dark:bg-darker`;
|
|
3879
|
+
case 'light':
|
|
3880
|
+
return `${base} bg-lighter`;
|
|
3881
|
+
case 'brand-light':
|
|
3882
|
+
return `${base} ${this.sideMenuBrandLightSurfaceClass()}`;
|
|
3883
|
+
case 'brand-dark':
|
|
3884
|
+
return `${base} primary-darkest-surface`;
|
|
3885
|
+
default:
|
|
3886
|
+
return `${base} ax-dark bg-lighter dark:bg-darker`;
|
|
3887
|
+
}
|
|
3888
|
+
}, /* @ts-ignore */
|
|
3889
|
+
...(ngDevMode ? [{ debugName: "sideMenuSurfaceClass" }] : /* istanbul ignore next */ []));
|
|
3890
|
+
/** White scrollbar thumb on dark menu surfaces. */
|
|
3891
|
+
this.sideMenuScrollUsesLightThumb = computed(() => {
|
|
3892
|
+
const appearance = this.store.menuAppearance();
|
|
3893
|
+
if (appearance === 'brand-dark' || appearance === 'dark') {
|
|
3894
|
+
return true;
|
|
3895
|
+
}
|
|
3896
|
+
return this.store.isDarkMode() && appearance === 'brand-light';
|
|
3897
|
+
}, /* @ts-ignore */
|
|
3898
|
+
...(ngDevMode ? [{ debugName: "sideMenuScrollUsesLightThumb" }] : /* istanbul ignore next */ []));
|
|
3808
3899
|
this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {
|
|
3809
3900
|
if (this.sideMenuDrawerKey() === 'overlay') {
|
|
3810
3901
|
this.store.closeSideMenu();
|
|
@@ -3820,7 +3911,7 @@ class AXPRootVerticalLayoutComponent {
|
|
|
3820
3911
|
this.store.closeSideMenu();
|
|
3821
3912
|
}
|
|
3822
3913
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRootVerticalLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3823
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRootVerticalLayoutComponent, isStandalone: true, selector: "axp-root-vertical-layout", ngImport: i0, template: "<div id=\"axp-root-layout\" class=\"axp-root-layout\">\n <ax-drawer-container>\n @for (drawerKey of [sideMenuDrawerKey()]; track drawerKey) {\n <ax-drawer\n id=\"axp-side-menu-drawer\"\n [axResizable]=\"drawerKey === 'push'\"\n class=\"
|
|
3914
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRootVerticalLayoutComponent, isStandalone: true, selector: "axp-root-vertical-layout", ngImport: i0, template: "<div id=\"axp-root-layout\" class=\"axp-root-layout\">\n <ax-drawer-container class=\"min-h-0 flex-1\">\n @for (drawerKey of [sideMenuDrawerKey()]; track drawerKey) {\n <ax-drawer\n id=\"axp-side-menu-drawer\"\n [axResizable]=\"drawerKey === 'push'\"\n class=\"h-full flex! flex-col dark:border-e dark:border-default\"\n [width]=\"(drawerKey === 'push' ? store.sideMenuDrawerWidth() : undefined)!\"\n [defaultWidth]=\"(drawerKey === 'push' ? store.sideMenuDrawerWidth() : undefined)!\"\n location=\"start\"\n [collapsed]=\"!store.isSideMenuOpen()\"\n [closeOnBackdropClick]=\"false\"\n [mode]=\"drawerKey === 'overlay' ? 'overlay' : 'push'\"\n [dblClickAction]=\"'fit'\"\n (onResizingEnded)=\"handleResizingEnded($event)\"\n (onResizingDblClick)=\"handleResizingEnded($event)\"\n (onBackdropClick)=\"handleBackdropClick()\"\n backdropClass=\"bg-black/50\"\n [class.w-[80%]]=\"drawerKey === 'overlay'\"\n >\n <ax-header\n id=\"axp-side-menu-header\"\n [class]=\"sideMenuHeaderClass()\"\n >\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onDark\"\n format=\"full\"\n [size]=\"200\"\n ></axp-logo>\n </ax-header>\n <ax-content\n [class]=\"sideMenuSurfaceClass()\"\n [class.axp-side-menu-scroll--on-dark]=\"sideMenuScrollUsesLightThumb()\"\n [attr.data-menu-appearance]=\"store.menuAppearance()\"\n >\n <axp-component-slot name=\"root-side-menu-header\"></axp-component-slot>\n <div>\n <axp-side-menu id=\"axp-side-menu\" class=\"block p-4\"></axp-side-menu>\n </div>\n <axp-component-slot name=\"root-side-menu-footer\"></axp-component-slot>\n </ax-content>\n </ax-drawer>\n }\n <ax-content\n class=\"flex min-h-0 flex-1 flex-col relative bg-lightest dark:bg-lighter overflow-hidden\"\n >\n @if (store.isNavigationLoading()) {\n <div class=\"axp-navigating-progress\">\n <div></div>\n </div>\n }\n <axp-dashboard-admin-header\n id=\"axp-main-header\"\n class=\"shrink-0\"\n ></axp-dashboard-admin-header>\n\n <div class=\"relative min-h-0 flex-1 overflow-auto\">\n <router-outlet></router-outlet>\n </div>\n\n <!-- ----- Footer aligned with main content (container width) ----- -->\n @if (!store.effectiveMainFooterFullWidth()) {\n <axp-dashboard-admin-footer\n id=\"axp-main-footer\"\n class=\"shrink-0\"\n ></axp-dashboard-admin-footer>\n }\n </ax-content>\n </ax-drawer-container>\n <axp-component-slot name=\"root-layout-overlay\"></axp-component-slot>\n\n <!-- ----- Full-width footer spans the entire viewport (vertical layout only) ----- -->\n @if (store.effectiveMainFooterFullWidth()) {\n <axp-dashboard-admin-footer id=\"axp-main-footer\"></axp-dashboard-admin-footer>\n }\n</div>\n", styles: [".axp-root-layout{display:flex;height:100%;width:100%;flex-direction:column;justify-content:space-between}#axp-side-menu-drawer{box-sizing:border-box}.axp-navigating-progress{position:absolute;top:0;height:var(--spacing, .25rem);width:100%;overflow:hidden;background-color:rgba(var(--ax-sys-color-primary-200))}@supports (color: color-mix(in lab,red,red)){.axp-navigating-progress{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-200)) 40%,transparent)}}.axp-navigating-progress>div{height:100%;width:100%;background-color:rgba(var(--ax-sys-color-primary-500));animation:indeterminateAnimation 1.5s infinite cubic-bezier(.65,.815,.735,.395);transform-origin:0% 50%}@keyframes indeterminateAnimation{0%{transform:translate(-100%) scaleX(.2)}50%{transform:translate(50%) scaleX(.6)}to{transform:translate(100%) scaleX(.4)}}.resize-handle{background-color:transparent!important}.resize-handle:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}#axp-side-menu-drawer ax-content.axp-side-menu-scroll{--axp-side-menu-scrollbar-size: 8px;--axp-side-menu-scrollbar-radius: 4px;scrollbar-gutter:stable;scrollbar-width:thin}#axp-side-menu-drawer ax-content.axp-side-menu-scroll::-webkit-scrollbar{width:var(--axp-side-menu-scrollbar-size);height:var(--axp-side-menu-scrollbar-size)}#axp-side-menu-drawer ax-content.axp-side-menu-scroll::-webkit-scrollbar-track{background:transparent;border-radius:var(--axp-side-menu-scrollbar-radius)}#axp-side-menu-drawer ax-content.axp-side-menu-scroll{--ax-sys-scroller-thumb-color: rgba(0, 0, 0, .35);--ax-sys-scroller-track-color: transparent;scrollbar-color:rgba(0,0,0,.35) transparent}#axp-side-menu-drawer ax-content.axp-side-menu-scroll::-webkit-scrollbar-thumb{background:#00000059!important;border-radius:var(--axp-side-menu-scrollbar-radius);min-height:2.5rem}#axp-side-menu-drawer ax-content.axp-side-menu-scroll.axp-side-menu-scroll--on-dark{--ax-sys-scroller-thumb-color: rgba(255, 255, 255, .5) !important;--ax-sys-scroller-track-color: transparent !important;scrollbar-color:rgba(255,255,255,.5) transparent!important}#axp-side-menu-drawer ax-content.axp-side-menu-scroll.axp-side-menu-scroll--on-dark::-webkit-scrollbar-thumb{background:#ffffff80!important}#axp-side-menu-drawer ax-content.axp-side-menu-scroll.axp-side-menu-scroll--on-dark::-webkit-scrollbar-thumb:hover{background:#ffffff80!important}#axp-side-menu-drawer ax-content.axp-side-menu-scroll[data-menu-appearance=brand-light]:not(.axp-side-menu-scroll--on-dark){--ax-sys-scroller-thumb-color: rgba(255, 255, 255, .5) !important;scrollbar-color:rgba(255,255,255,.5) transparent!important}#axp-side-menu-drawer ax-content.axp-side-menu-scroll[data-menu-appearance=brand-light]:not(.axp-side-menu-scroll--on-dark)::-webkit-scrollbar-thumb{background:#ffffff80!important}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$4.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.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: AXDropdownModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXImageModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$2.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "transition", "closeOnBackdropClick", "backdropClass", "collapsed", "singleOpenMode"], outputs: ["onBackdropClick", "collapsedStateChanged"] }, { kind: "component", type: i3$2.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXSideMenuModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "ngmodule", type: AXPAuthModule }, { kind: "directive", type: AXResizableDirective, selector: "[axResizable]", inputs: ["axResizable", "minWidth", "maxWidth", "dblClickAction", "width", "defaultWidth"], outputs: ["axResizableChange", "minWidthChange", "maxWidthChange", "dblClickActionChange", "widthChange", "defaultWidthChange", "onResizingStarted", "onResizingEnded", "onResizingDblClick"] }, { kind: "component", type: AXPRootLayoutFooterComponent, selector: "axp-dashboard-admin-footer" }, { kind: "component", type: AXPRootLayoutHeaderComponent, selector: "axp-dashboard-admin-header" }, { kind: "component", type: AXPRootLayoutMenuComponent, selector: "axp-side-menu" }, { kind: "ngmodule", type: AXPComponentSlotModule }, { kind: "directive", type: i1$3.AXPComponentSlotDirective, selector: "axp-component-slot", inputs: ["name", "host", "context"], exportAs: ["slot"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3824
3915
|
}
|
|
3825
3916
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRootVerticalLayoutComponent, decorators: [{
|
|
3826
3917
|
type: Component,
|
|
@@ -3845,7 +3936,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3845
3936
|
AXPRootLayoutHeaderComponent,
|
|
3846
3937
|
AXPRootLayoutMenuComponent,
|
|
3847
3938
|
AXPComponentSlotModule,
|
|
3848
|
-
], template: "<div id=\"axp-root-layout\" class=\"axp-root-layout\">\n <ax-drawer-container>\n @for (drawerKey of [sideMenuDrawerKey()]; track drawerKey) {\n <ax-drawer\n id=\"axp-side-menu-drawer\"\n [axResizable]=\"drawerKey === 'push'\"\n class=\"
|
|
3939
|
+
], template: "<div id=\"axp-root-layout\" class=\"axp-root-layout\">\n <ax-drawer-container class=\"min-h-0 flex-1\">\n @for (drawerKey of [sideMenuDrawerKey()]; track drawerKey) {\n <ax-drawer\n id=\"axp-side-menu-drawer\"\n [axResizable]=\"drawerKey === 'push'\"\n class=\"h-full flex! flex-col dark:border-e dark:border-default\"\n [width]=\"(drawerKey === 'push' ? store.sideMenuDrawerWidth() : undefined)!\"\n [defaultWidth]=\"(drawerKey === 'push' ? store.sideMenuDrawerWidth() : undefined)!\"\n location=\"start\"\n [collapsed]=\"!store.isSideMenuOpen()\"\n [closeOnBackdropClick]=\"false\"\n [mode]=\"drawerKey === 'overlay' ? 'overlay' : 'push'\"\n [dblClickAction]=\"'fit'\"\n (onResizingEnded)=\"handleResizingEnded($event)\"\n (onResizingDblClick)=\"handleResizingEnded($event)\"\n (onBackdropClick)=\"handleBackdropClick()\"\n backdropClass=\"bg-black/50\"\n [class.w-[80%]]=\"drawerKey === 'overlay'\"\n >\n <ax-header\n id=\"axp-side-menu-header\"\n [class]=\"sideMenuHeaderClass()\"\n >\n <axp-logo\n logoKey=\"platform\"\n appearance=\"onDark\"\n format=\"full\"\n [size]=\"200\"\n ></axp-logo>\n </ax-header>\n <ax-content\n [class]=\"sideMenuSurfaceClass()\"\n [class.axp-side-menu-scroll--on-dark]=\"sideMenuScrollUsesLightThumb()\"\n [attr.data-menu-appearance]=\"store.menuAppearance()\"\n >\n <axp-component-slot name=\"root-side-menu-header\"></axp-component-slot>\n <div>\n <axp-side-menu id=\"axp-side-menu\" class=\"block p-4\"></axp-side-menu>\n </div>\n <axp-component-slot name=\"root-side-menu-footer\"></axp-component-slot>\n </ax-content>\n </ax-drawer>\n }\n <ax-content\n class=\"flex min-h-0 flex-1 flex-col relative bg-lightest dark:bg-lighter overflow-hidden\"\n >\n @if (store.isNavigationLoading()) {\n <div class=\"axp-navigating-progress\">\n <div></div>\n </div>\n }\n <axp-dashboard-admin-header\n id=\"axp-main-header\"\n class=\"shrink-0\"\n ></axp-dashboard-admin-header>\n\n <div class=\"relative min-h-0 flex-1 overflow-auto\">\n <router-outlet></router-outlet>\n </div>\n\n <!-- ----- Footer aligned with main content (container width) ----- -->\n @if (!store.effectiveMainFooterFullWidth()) {\n <axp-dashboard-admin-footer\n id=\"axp-main-footer\"\n class=\"shrink-0\"\n ></axp-dashboard-admin-footer>\n }\n </ax-content>\n </ax-drawer-container>\n <axp-component-slot name=\"root-layout-overlay\"></axp-component-slot>\n\n <!-- ----- Full-width footer spans the entire viewport (vertical layout only) ----- -->\n @if (store.effectiveMainFooterFullWidth()) {\n <axp-dashboard-admin-footer id=\"axp-main-footer\"></axp-dashboard-admin-footer>\n }\n</div>\n", styles: [".axp-root-layout{display:flex;height:100%;width:100%;flex-direction:column;justify-content:space-between}#axp-side-menu-drawer{box-sizing:border-box}.axp-navigating-progress{position:absolute;top:0;height:var(--spacing, .25rem);width:100%;overflow:hidden;background-color:rgba(var(--ax-sys-color-primary-200))}@supports (color: color-mix(in lab,red,red)){.axp-navigating-progress{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-200)) 40%,transparent)}}.axp-navigating-progress>div{height:100%;width:100%;background-color:rgba(var(--ax-sys-color-primary-500));animation:indeterminateAnimation 1.5s infinite cubic-bezier(.65,.815,.735,.395);transform-origin:0% 50%}@keyframes indeterminateAnimation{0%{transform:translate(-100%) scaleX(.2)}50%{transform:translate(50%) scaleX(.6)}to{transform:translate(100%) scaleX(.4)}}.resize-handle{background-color:transparent!important}.resize-handle:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}#axp-side-menu-drawer ax-content.axp-side-menu-scroll{--axp-side-menu-scrollbar-size: 8px;--axp-side-menu-scrollbar-radius: 4px;scrollbar-gutter:stable;scrollbar-width:thin}#axp-side-menu-drawer ax-content.axp-side-menu-scroll::-webkit-scrollbar{width:var(--axp-side-menu-scrollbar-size);height:var(--axp-side-menu-scrollbar-size)}#axp-side-menu-drawer ax-content.axp-side-menu-scroll::-webkit-scrollbar-track{background:transparent;border-radius:var(--axp-side-menu-scrollbar-radius)}#axp-side-menu-drawer ax-content.axp-side-menu-scroll{--ax-sys-scroller-thumb-color: rgba(0, 0, 0, .35);--ax-sys-scroller-track-color: transparent;scrollbar-color:rgba(0,0,0,.35) transparent}#axp-side-menu-drawer ax-content.axp-side-menu-scroll::-webkit-scrollbar-thumb{background:#00000059!important;border-radius:var(--axp-side-menu-scrollbar-radius);min-height:2.5rem}#axp-side-menu-drawer ax-content.axp-side-menu-scroll.axp-side-menu-scroll--on-dark{--ax-sys-scroller-thumb-color: rgba(255, 255, 255, .5) !important;--ax-sys-scroller-track-color: transparent !important;scrollbar-color:rgba(255,255,255,.5) transparent!important}#axp-side-menu-drawer ax-content.axp-side-menu-scroll.axp-side-menu-scroll--on-dark::-webkit-scrollbar-thumb{background:#ffffff80!important}#axp-side-menu-drawer ax-content.axp-side-menu-scroll.axp-side-menu-scroll--on-dark::-webkit-scrollbar-thumb:hover{background:#ffffff80!important}#axp-side-menu-drawer ax-content.axp-side-menu-scroll[data-menu-appearance=brand-light]:not(.axp-side-menu-scroll--on-dark){--ax-sys-scroller-thumb-color: rgba(255, 255, 255, .5) !important;scrollbar-color:rgba(255,255,255,.5) transparent!important}#axp-side-menu-drawer ax-content.axp-side-menu-scroll[data-menu-appearance=brand-light]:not(.axp-side-menu-scroll--on-dark)::-webkit-scrollbar-thumb{background:#ffffff80!important}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
3849
3940
|
}], ctorParameters: () => [] });
|
|
3850
3941
|
|
|
3851
3942
|
class AXPRootLayoutComponent {
|
|
@@ -4289,7 +4380,7 @@ class AXPDefaultThemeModule {
|
|
|
4289
4380
|
viewers: {
|
|
4290
4381
|
root: () => Promise.resolve().then(function () { return rootLayout_component; }).then((c) => c.AXPRootLayoutComponent),
|
|
4291
4382
|
master: {
|
|
4292
|
-
single: () => import('./acorex-platform-framework-client-themes-default-entity-master-single-view.component-
|
|
4383
|
+
single: () => import('./acorex-platform-framework-client-themes-default-entity-master-single-view.component-DCpl6AXq.mjs').then((c) => c.AXPEntityMasterSingleViewComponent),
|
|
4293
4384
|
details: () => import('@acorex-platform/framework-client/layout/views').then((c) => c.AXPLayoutDetailsViewComponent),
|
|
4294
4385
|
///
|
|
4295
4386
|
create: () => import('./acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs').then((c) => c.AXPEntityMasterCreateViewComponent),
|
|
@@ -4326,7 +4417,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4326
4417
|
viewers: {
|
|
4327
4418
|
root: () => Promise.resolve().then(function () { return rootLayout_component; }).then((c) => c.AXPRootLayoutComponent),
|
|
4328
4419
|
master: {
|
|
4329
|
-
single: () => import('./acorex-platform-framework-client-themes-default-entity-master-single-view.component-
|
|
4420
|
+
single: () => import('./acorex-platform-framework-client-themes-default-entity-master-single-view.component-DCpl6AXq.mjs').then((c) => c.AXPEntityMasterSingleViewComponent),
|
|
4330
4421
|
details: () => import('@acorex-platform/framework-client/layout/views').then((c) => c.AXPLayoutDetailsViewComponent),
|
|
4331
4422
|
///
|
|
4332
4423
|
create: () => import('./acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs').then((c) => c.AXPEntityMasterCreateViewComponent),
|