@acorex-platform/framework-client 1.0.0 → 1.0.2
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-auth.mjs +113 -45
- package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs → acorex-platform-framework-client-common-common-settings.provider-Cyr1DaiD.mjs} +19 -2
- package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs.map → acorex-platform-framework-client-common-common-settings.provider-Cyr1DaiD.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-common.mjs +445 -191
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-core.mjs +7 -2
- package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs +399 -132
- 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-i9oZEXUR.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-D2kZxLOh.mjs} +616 -196
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-D2kZxLOh.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-DyrvSBEY.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-BManmr01.mjs} +10 -5
- package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-BManmr01.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-B8s_JEV8.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-B8XsnrnO.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-B8s_JEV8.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-B8XsnrnO.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-C0LgUzzv.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-DGZVS11E.mjs} +28 -12
- package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-DGZVS11E.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-fATD9Uax.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-Be348QCj.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-fATD9Uax.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-Be348QCj.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs +71 -10
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +147 -171
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-Drmmu4HQ.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-M8SZFPQx.mjs} +342 -60
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-M8SZFPQx.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BiuahYd8.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DsLgZbZA.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BiuahYd8.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DsLgZbZA.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-CU_5b_te.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Vpz3itLZ.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-CU_5b_te.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Vpz3itLZ.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-realtime.mjs +49 -7
- package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs +40 -20
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
- package/i18n/en-AU/general.json +16 -4
- package/i18n/en-AU/layout.json +2 -1
- package/i18n/en-US/general.json +16 -4
- package/i18n/en-US/layout.json +2 -1
- package/i18n/fa-IR/general.json +16 -4
- package/i18n/fa-IR/layout.json +2 -1
- package/layout/widget-core/README.md +1 -1
- package/layout/widgets/README.md +2 -2
- package/package.json +2 -2
- package/types/acorex-platform-framework-client-auth.d.ts +15 -1
- package/types/acorex-platform-framework-client-common.d.ts +73 -7
- package/types/acorex-platform-framework-client-layout-components.d.ts +38 -7
- package/types/acorex-platform-framework-client-layout-entity.d.ts +86 -34
- package/types/acorex-platform-framework-client-layout-views.d.ts +15 -0
- package/types/acorex-platform-framework-client-layout-widget-core.d.ts +38 -13
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +25 -7
- package/types/acorex-platform-framework-client-realtime.d.ts +5 -0
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-i9oZEXUR.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-DyrvSBEY.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-C0LgUzzv.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-Drmmu4HQ.mjs.map +0 -1
|
@@ -3,8 +3,8 @@ import { resolveEntityActionCommandInput, entityActionDataRecord, defineCommand,
|
|
|
3
3
|
import { AXToastService } from '@acorex/components/toast';
|
|
4
4
|
import * as i3$1 from '@acorex/core/translation';
|
|
5
5
|
import { AXTranslationService, AXTranslationModule, resolveMultiLanguageString, translateSync } from '@acorex/core/translation';
|
|
6
|
-
import * as i4$
|
|
7
|
-
import { AXPNotFoundError, AXPSettingsService, AXPCommonSettings, resolveEntityCreateListBehavior, platformErrorI18nKey, extractRequestErrorInfo, axpNavigateAppPath, AXPFileTypeProviderService, AXPFileStorageService, resolveFileTypeDisplay, resolveEntityRowDisplayTitle, resolveEntityModifyPopupTitle, commandMessageTextForError, resolveStoredImageDisplayUrl, isStoredImageFileId, AXPFilterOperatorMiddlewareService, AXP_ENTITY_LIST_DISPLAY_MODE_DEFAULT, ENTITY_LIST_DEFAULT_INSTANCE_ID, axpNormalizeEntityListInstanceId, axpGetEntityListInstanceIdFromParamMap, axpRedirectToNotFound, CONTAINS_OPER, toExecuteCommandFailureResult, AXPLocalEntityEngine, AXPLocalEntityRealtimeBridge, AXP_LOCAL_ENTITY_DEFAULT_MAX_ITEMS, resolveSearchableText, evaluateEntityDisplayTemplate, AXPCleanNestedFilters, AXPEntityDetailsNavTrailService, axpComposeEntityDetailsNavTrail, axpIsEntityRecordNotFound, coerceAXPSettingRawValueByKind, AXPDefaultMultiLanguageConfigService, withDefaultMultiLanguageOnWidgetNodeTree, axpIsEntityListPath, axpIsEntityDetailsPath, axpParseEntityListRoute, axpParseEntityDetailsRoute, axpSaveEntityListReturnUrl, AXPMenuRouteGuard, AXP_NOT_FOUND_ROUTE, AXP_PROTECTED_ROUTE_GUARDS, AXP_ENTITY_VIEW_ACCESS, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_DEFINITION_LAZY_RESOLVER } from '@acorex-platform/framework-client/common';
|
|
6
|
+
import * as i4$4 from '@acorex-platform/framework-client/common';
|
|
7
|
+
import { AXPNotFoundError, AXPSettingsService, AXPCommonSettings, resolveEntityCreateListBehavior, platformErrorI18nKey, extractRequestErrorInfo, axpNavigateAppPath, AXPFileTypeProviderService, AXPFileStorageService, resolveFileTypeDisplay, resolveEntityRowDisplayTitle, resolveEntityModifyPopupTitle, commandMessageTextForError, resolveStoredImageDisplayUrl, isStoredImageFileId, AXPFilterOperatorMiddlewareService, AXP_ENTITY_LIST_DISPLAY_MODE_DEFAULT, ENTITY_LIST_DEFAULT_INSTANCE_ID, axpNormalizeEntityListInstanceId, axpGetEntityListInstanceIdFromParamMap, axpRedirectToNotFound, CONTAINS_OPER, toExecuteCommandFailureResult, AXPLocalEntityEngine, AXPLocalEntityRealtimeBridge, AXP_LOCAL_ENTITY_DEFAULT_MAX_ITEMS, resolveSearchableText, evaluateEntityDisplayTemplate, AXPCleanNestedFilters, isPendingCascadeFilter, AXPEntityDetailsNavTrailService, axpComposeEntityDetailsNavTrail, axpIsEntityRecordNotFound, coerceAXPSettingRawValueByKind, AXPDefaultMultiLanguageConfigService, withDefaultMultiLanguageOnWidgetNodeTree, axpIsEntityListPath, axpIsEntityDetailsPath, axpParseEntityListRoute, axpParseEntityDetailsRoute, axpSaveEntityListReturnUrl, AXPMenuRouteGuard, AXP_NOT_FOUND_ROUTE, AXP_PROTECTED_ROUTE_GUARDS, AXP_ENTITY_VIEW_ACCESS, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_DEFINITION_LAZY_RESOLVER } from '@acorex-platform/framework-client/common';
|
|
8
8
|
import { AXPWidgetsCatalog, runtimeCommandPayloadData, createRandomUuid, AXPRequestError, runtimeQueryPayloadData, runtimeQueryCollectionData, runtimeQueryFailure, runtimeQuerySuccessObject, runtimeCommandFailure, runtimeCommandSuccessObject, resolveActionLook, listThemeSurfaceClasses, parseRuntimeHexSurface, AXP_THEME_SURFACE_STYLES, AXPWidgetsList, AXPSystemActionType, coerceFilterDisplayText, AXPPlatformScope, flattenQueryFilterUserGroups, AXP_QUERY_QUICK_SEARCH_FIELD, wrapQueryFilterRoot, isPersistableFilterQuery, collectQueryFilterLeaves, isCompleteFilterCondition, resolveFilterQueryIdentityField, extractValue, setSmart, getChangedPaths, isSelectionValueEqual, toAxpGridItemWidgetOptions, runtimeQuerySuccessCollection } from '@acorex-platform/framework-shared/core';
|
|
9
9
|
import { AXPDeviceService, AXPExpressionEvaluatorService, AXPEntityBroadcastService, AXPHookService, AXPDebugService, AXPDataGenerator, AXPContextEvalFactory, ensureRuntimeSurfaceClass, applyFilterArray, createCommandExpressionScope, toExpressionRecord, AXPDistributedEventListenerService, applySortArray, AXHighlightService, AXPColumnWidthService, objectKeyValueTransforms, setupPopupFooterKeyboardShortcuts, AXPContextStore, AXPModuleManifestRegistry, provideAppStartUpTask, AXP_APP_STARTUP_PRIORITY, defaultColumnWidthProvider, AXP_COLUMN_WIDTH_PROVIDER } from '@acorex-platform/framework-client/core';
|
|
10
10
|
import { AXPLayoutBuilderService, AXPDialogOpener, LayoutBuilderModule } from '@acorex-platform/framework-client/layout/builder';
|
|
@@ -18,17 +18,17 @@ import { AXDialogService } from '@acorex/components/dialog';
|
|
|
18
18
|
import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
|
|
19
19
|
import { AXPRealtimeConnectionPort, AXPRealtimeDispatcherService, AXP_REALTIME_TOPIC_ENTITY_MUTATION } from '@acorex-platform/framework-client/realtime';
|
|
20
20
|
import { AXPBulkCommandService, AXPBulkProgressChannel, AXPCommandExecutor, AXPCommandService, AXPQueryService, AXPQueryExecutor, provideCommandMiddleware, provideQueryMiddleware, provideCommandSetups, provideQuerySetups, AXPCommandRegistry, AXPQueryRegistry } from '@acorex-platform/framework-client/runtime';
|
|
21
|
-
import * as
|
|
21
|
+
import * as i4 from '@angular/common';
|
|
22
22
|
import { NgClass, AsyncPipe, CommonModule, DOCUMENT, NgTemplateOutlet } from '@angular/common';
|
|
23
23
|
import * as i1 from '@acorex/components/button';
|
|
24
24
|
import { AXButtonModule } from '@acorex/components/button';
|
|
25
|
-
import * as i4 from '@acorex/components/check-box';
|
|
25
|
+
import * as i4$1 from '@acorex/components/check-box';
|
|
26
26
|
import { AXCheckBoxModule } from '@acorex/components/check-box';
|
|
27
27
|
import * as i3 from '@acorex/components/decorators';
|
|
28
28
|
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
29
29
|
import * as i5 from '@acorex/components/form';
|
|
30
30
|
import { AXFormModule } from '@acorex/components/form';
|
|
31
|
-
import * as i4$
|
|
31
|
+
import * as i4$3 from '@acorex/components/label';
|
|
32
32
|
import { AXLabelModule } from '@acorex/components/label';
|
|
33
33
|
import * as i6$2 from '@acorex/components/text-box';
|
|
34
34
|
import { AXTextBoxModule } from '@acorex/components/text-box';
|
|
@@ -38,15 +38,15 @@ import { AXLoadingModule } from '@acorex/components/loading';
|
|
|
38
38
|
import * as i1$1 from '@acorex/components/popover';
|
|
39
39
|
import { AXPopoverModule, AXPopoverComponent } from '@acorex/components/popover';
|
|
40
40
|
import { AXFormatService } from '@acorex/core/format';
|
|
41
|
-
import * as i1$
|
|
42
|
-
import { AXPColumnWidgetComponent, AXPValueWidgetComponent, AXP_WIDGETS_ADVANCE_SUB_MEDIA, AXP_WIDGETS_ADVANCE_CATEGORY, AXPWidgetRegistryService, AXPWidgetColumnCellComponent, AXPWidgetRendererDirective, AXPWidgetCoreModule, AXPBaseWidgetComponent, AXP_WIDGETS_EDITOR_CATEGORY, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';
|
|
43
|
-
import * as i1$
|
|
41
|
+
import * as i1$5 from '@acorex-platform/framework-client/layout/widget-core';
|
|
42
|
+
import { AXPColumnWidgetComponent, AXPValueWidgetComponent, AXP_WIDGETS_ADVANCE_SUB_MEDIA, AXP_WIDGETS_ADVANCE_CATEGORY, AXPWidgetRegistryService, AXPWidgetColumnCellComponent, AXPWidgetRendererDirective, AXPWidgetCoreModule, AXPBaseWidgetComponent, resolveWidgetExposeHydrateWrites, AXP_WIDGETS_EDITOR_CATEGORY, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';
|
|
43
|
+
import * as i1$4 from '@angular/forms';
|
|
44
44
|
import { FormsModule } from '@angular/forms';
|
|
45
45
|
import { AXUploaderModule } from '@acorex/components/uploader';
|
|
46
46
|
import { createStringProperty, createBooleanProperty, createNumberProperty, AXPWidgetGroupEnum, AXPPageStatus, AXPWidgetStatus, createSelectProperty } from '@acorex-platform/framework-shared/widget-core';
|
|
47
|
-
import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_DOWNLOADABLE_PROPERTY, AXP_READONLY_PROPERTY, AXP_DESCRIPTION_PROPERTY, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_SELECT_COLUMN_RESOLVE_QUERY, AXP_DISABLED_PROPERTY, AXP_ALLOW_CLEAR_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_PLACEHOLDER_PROPERTY,
|
|
47
|
+
import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_DOWNLOADABLE_PROPERTY, AXP_READONLY_PROPERTY, AXP_DESCRIPTION_PROPERTY, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_SELECT_COLUMN_RESOLVE_QUERY, AXP_DISABLED_PROPERTY, AXP_ALLOW_CLEAR_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_PLACEHOLDER_PROPERTY, flattenDataListWidgetColumns, isDataListColumnBand, AXP_ROW_EXPR_PREFIX, applyLeafVisibilityToDataListColumnTree, AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from '@acorex-platform/framework-client/layout/widgets';
|
|
48
48
|
import { AXPopupService } from '@acorex/components/popup';
|
|
49
|
-
import * as i1$
|
|
49
|
+
import * as i1$3 from '@acorex/components/skeleton';
|
|
50
50
|
import { AXSkeletonModule } from '@acorex/components/skeleton';
|
|
51
51
|
import * as i2 from '@acorex/components/badge';
|
|
52
52
|
import { AXBadgeModule } from '@acorex/components/badge';
|
|
@@ -62,17 +62,17 @@ import { AXDataSource, NXValueComponent, AXComponent, AXClearableComponent, AXVa
|
|
|
62
62
|
import { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';
|
|
63
63
|
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
64
64
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
65
|
-
import * as i4$
|
|
65
|
+
import * as i4$2 from '@acorex/components/search-box';
|
|
66
66
|
import { AXSearchBoxModule } from '@acorex/components/search-box';
|
|
67
67
|
import { AXTreeViewComponent } from '@acorex/components/tree-view';
|
|
68
68
|
import * as i3$2 from '@acorex/components/tooltip';
|
|
69
|
-
import { AXTooltipModule } from '@acorex/components/tooltip';
|
|
69
|
+
import { AXTooltipModule, AXTooltipDirective } from '@acorex/components/tooltip';
|
|
70
70
|
import * as i6$1 from '@acorex/components/tag-box';
|
|
71
71
|
import { AXTagBoxModule } from '@acorex/components/tag-box';
|
|
72
72
|
import { AXValidationModule } from '@acorex/core/validation';
|
|
73
73
|
import { AXLookupComponent } from '@acorex/components/lookup';
|
|
74
74
|
import { AXHighlightTextComponent } from '@acorex/components/highlight';
|
|
75
|
-
import * as i1$
|
|
75
|
+
import * as i1$6 from '@acorex/components/data-table';
|
|
76
76
|
import { AXDataTableComponent, AXDataTableModule } from '@acorex/components/data-table';
|
|
77
77
|
import * as i2$1 from '@acorex/components/tabs';
|
|
78
78
|
import { AXTabsModule } from '@acorex/components/tabs';
|
|
@@ -1804,6 +1804,9 @@ class PropertyFilter {
|
|
|
1804
1804
|
customFilterDefinitions: relatedEntity.customFilterDefinitions,
|
|
1805
1805
|
...(foreignKeyField ? { foreignKeyField } : {}),
|
|
1806
1806
|
...(nestedCreateHiddenProperties?.length ? { nestedCreateHiddenProperties } : {}),
|
|
1807
|
+
...(relatedEntity.excludeProperties?.length
|
|
1808
|
+
? { excludeProperties: relatedEntity.excludeProperties }
|
|
1809
|
+
: {}),
|
|
1807
1810
|
...relatedEntityListViewWidgetOptions(relatedEntity),
|
|
1808
1811
|
...(syncRelatedFromRoot && relatedEntity.conditions?.length
|
|
1809
1812
|
? {
|
|
@@ -2544,11 +2547,91 @@ function buildEntityDetailsRoute(applicationName, entity, id) {
|
|
|
2544
2547
|
};
|
|
2545
2548
|
}
|
|
2546
2549
|
|
|
2550
|
+
/** History state key: property names hidden on a details page opened from a related list. */
|
|
2551
|
+
const AXP_RELATED_DETAIL_EXCLUDE_STATE_KEY = 'axpRelatedExcludeProperties';
|
|
2552
|
+
const AXP_RELATED_DETAIL_EXCLUDE_ENTITY_KEY = 'axpRelatedExcludeEntity';
|
|
2553
|
+
const AXP_RELATED_DETAIL_EXCLUDE_ID_KEY = 'axpRelatedExcludeId';
|
|
2554
|
+
const RELATED_LIST_FORM_COMMANDS = new Set([
|
|
2555
|
+
'Entity:Create',
|
|
2556
|
+
'Entity:Edit',
|
|
2557
|
+
'Entity:View',
|
|
2558
|
+
'Entity:OpenDetails',
|
|
2559
|
+
]);
|
|
2560
|
+
/** Create, edit, view dialog, and details page opened from a related list. */
|
|
2561
|
+
function isRelatedListExcludeFormCommand(command) {
|
|
2562
|
+
return RELATED_LIST_FORM_COMMANDS.has(command);
|
|
2563
|
+
}
|
|
2564
|
+
/** Exact property names only. Nested paths are left unchanged. */
|
|
2565
|
+
function normalizeRelatedExcludeProperties(value) {
|
|
2566
|
+
if (!Array.isArray(value)) {
|
|
2567
|
+
return [];
|
|
2568
|
+
}
|
|
2569
|
+
return [
|
|
2570
|
+
...new Set(value
|
|
2571
|
+
.filter((name) => typeof name === 'string')
|
|
2572
|
+
.map((name) => name.trim())
|
|
2573
|
+
.filter((name) => name.length > 0)),
|
|
2574
|
+
];
|
|
2575
|
+
}
|
|
2576
|
+
function readRelatedDetailExcludeProperties(entity, id) {
|
|
2577
|
+
if (typeof history === 'undefined' || history.state == null || typeof history.state !== 'object') {
|
|
2578
|
+
return [];
|
|
2579
|
+
}
|
|
2580
|
+
const state = history.state;
|
|
2581
|
+
if (state[AXP_RELATED_DETAIL_EXCLUDE_ENTITY_KEY] !== entity || state[AXP_RELATED_DETAIL_EXCLUDE_ID_KEY] !== id) {
|
|
2582
|
+
return [];
|
|
2583
|
+
}
|
|
2584
|
+
return normalizeRelatedExcludeProperties(state[AXP_RELATED_DETAIL_EXCLUDE_STATE_KEY]);
|
|
2585
|
+
}
|
|
2586
|
+
function relatedDetailExcludeNavigationState(entity, id, names) {
|
|
2587
|
+
const unique = normalizeRelatedExcludeProperties(names);
|
|
2588
|
+
if (unique.length === 0) {
|
|
2589
|
+
return undefined;
|
|
2590
|
+
}
|
|
2591
|
+
return {
|
|
2592
|
+
[AXP_RELATED_DETAIL_EXCLUDE_STATE_KEY]: unique,
|
|
2593
|
+
[AXP_RELATED_DETAIL_EXCLUDE_ENTITY_KEY]: entity,
|
|
2594
|
+
[AXP_RELATED_DETAIL_EXCLUDE_ID_KEY]: id,
|
|
2595
|
+
};
|
|
2596
|
+
}
|
|
2597
|
+
/**
|
|
2598
|
+
* In-memory copy of the details-page hide list.
|
|
2599
|
+
* Sidebar navigations replace history state; this keeps the same record hidden until
|
|
2600
|
+
* a later open of that record does not ask to hide fields.
|
|
2601
|
+
*/
|
|
2602
|
+
class AXPRelatedDetailExcludeSession {
|
|
2603
|
+
constructor() {
|
|
2604
|
+
this.byRecord = new Map();
|
|
2605
|
+
}
|
|
2606
|
+
remember(entity, id, names) {
|
|
2607
|
+
const unique = normalizeRelatedExcludeProperties(names);
|
|
2608
|
+
const key = this.key(entity, id);
|
|
2609
|
+
if (unique.length === 0) {
|
|
2610
|
+
this.byRecord.delete(key);
|
|
2611
|
+
return;
|
|
2612
|
+
}
|
|
2613
|
+
this.byRecord.set(key, unique);
|
|
2614
|
+
}
|
|
2615
|
+
read(entity, id) {
|
|
2616
|
+
return this.byRecord.get(this.key(entity, id)) ?? [];
|
|
2617
|
+
}
|
|
2618
|
+
key(entity, id) {
|
|
2619
|
+
return `${entity}:${id}`;
|
|
2620
|
+
}
|
|
2621
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRelatedDetailExcludeSession, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2622
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRelatedDetailExcludeSession, providedIn: 'root' }); }
|
|
2623
|
+
}
|
|
2624
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRelatedDetailExcludeSession, decorators: [{
|
|
2625
|
+
type: Injectable,
|
|
2626
|
+
args: [{ providedIn: 'root' }]
|
|
2627
|
+
}] });
|
|
2628
|
+
|
|
2547
2629
|
function resolveOpenEntityDetailsInput(input = {}) {
|
|
2548
2630
|
const context = resolveEntityActionCommandInput(input);
|
|
2549
2631
|
return {
|
|
2550
2632
|
entity: context.entity ?? '',
|
|
2551
2633
|
data: context.data,
|
|
2634
|
+
excludeProperties: normalizeRelatedExcludeProperties(context.options?.['excludeProperties']),
|
|
2552
2635
|
};
|
|
2553
2636
|
}
|
|
2554
2637
|
//#endregion
|
|
@@ -2564,6 +2647,7 @@ class AXPOpenEntityDetailsCommand {
|
|
|
2564
2647
|
this.router = inject(Router);
|
|
2565
2648
|
this.sessionService = inject(AXPSessionService);
|
|
2566
2649
|
this.detailsAccess = inject(AXPEntityDetailsAccessService);
|
|
2650
|
+
this.excludeSession = inject(AXPRelatedDetailExcludeSession);
|
|
2567
2651
|
}
|
|
2568
2652
|
//#endregion
|
|
2569
2653
|
//#region ---- Command Execution ----
|
|
@@ -2572,7 +2656,7 @@ class AXPOpenEntityDetailsCommand {
|
|
|
2572
2656
|
* @param input - Command input containing entity and data information
|
|
2573
2657
|
*/
|
|
2574
2658
|
async execute(input = {}) {
|
|
2575
|
-
const { entity, data } = resolveOpenEntityDetailsInput(input);
|
|
2659
|
+
const { entity, data, excludeProperties } = resolveOpenEntityDetailsInput(input);
|
|
2576
2660
|
if (!entity) {
|
|
2577
2661
|
return {
|
|
2578
2662
|
success: false,
|
|
@@ -2598,6 +2682,7 @@ class AXPOpenEntityDetailsCommand {
|
|
|
2598
2682
|
},
|
|
2599
2683
|
};
|
|
2600
2684
|
}
|
|
2685
|
+
this.excludeSession.remember(entity, String(data.id), excludeProperties);
|
|
2601
2686
|
const route = buildEntityDetailsRoute(applicationName, entity, String(data.id));
|
|
2602
2687
|
if (!route) {
|
|
2603
2688
|
return {
|
|
@@ -2615,7 +2700,11 @@ class AXPOpenEntityDetailsCommand {
|
|
|
2615
2700
|
}
|
|
2616
2701
|
// Explicit segments so IDs containing `/` (and `http:` prefixes) stay one route param.
|
|
2617
2702
|
// Primary page id is the entity name (`main-entity-content-builder`).
|
|
2618
|
-
const
|
|
2703
|
+
const navigationState = relatedDetailExcludeNavigationState(entity, String(data.id), excludeProperties);
|
|
2704
|
+
const navigated = await this.router.navigate(route.commands, {
|
|
2705
|
+
queryParams: route.queryParams,
|
|
2706
|
+
...(navigationState ? { state: navigationState } : {}),
|
|
2707
|
+
});
|
|
2619
2708
|
if (!navigated) {
|
|
2620
2709
|
return {
|
|
2621
2710
|
success: false,
|
|
@@ -3573,6 +3662,25 @@ function dispatchEntityModifiedSideEffects(entityEvents, entity, values, parentK
|
|
|
3573
3662
|
}
|
|
3574
3663
|
//#endregion
|
|
3575
3664
|
|
|
3665
|
+
/**
|
|
3666
|
+
* Shared attachments persistence for the attachments page and the list "Upload Files" action.
|
|
3667
|
+
* Both must call the entity update command so file middlewares run. `entityRuntime.updateOne`
|
|
3668
|
+
* skips that pipeline.
|
|
3669
|
+
*/
|
|
3670
|
+
function saveAttachmentsThroughEntityUpdate(updateExec, id, field, files) {
|
|
3671
|
+
return updateExec({ id, [field]: files });
|
|
3672
|
+
}
|
|
3673
|
+
/**
|
|
3674
|
+
* Widget context-changed events are cloneDeep'd and drop File/Blob bytes.
|
|
3675
|
+
* Read the live widget store first.
|
|
3676
|
+
*/
|
|
3677
|
+
function readLiveAttachmentValue(live, fallback, field) {
|
|
3678
|
+
if (live != null && get(live, field) != null) {
|
|
3679
|
+
return get(live, field);
|
|
3680
|
+
}
|
|
3681
|
+
return fallback != null ? get(fallback, field) : undefined;
|
|
3682
|
+
}
|
|
3683
|
+
|
|
3576
3684
|
const FileUploaderWebhookKeys = {
|
|
3577
3685
|
Actions: 'file-uploader.actions',
|
|
3578
3686
|
Configure: 'file-uploader.configure',
|
|
@@ -3918,6 +4026,9 @@ class AXPFileListComponent {
|
|
|
3918
4026
|
/** `rows`: file-type icons and action buttons; `links`: compact paperclip links (download on click). */
|
|
3919
4027
|
this.look = input('rows', /* @ts-ignore */
|
|
3920
4028
|
...(ngDevMode ? [{ debugName: "look" }] : /* istanbul ignore next */ []));
|
|
4029
|
+
/** When false, row look shows the file-type icon and name only. */
|
|
4030
|
+
this.showActions = input(true, /* @ts-ignore */
|
|
4031
|
+
...(ngDevMode ? [{ debugName: "showActions" }] : /* istanbul ignore next */ []));
|
|
3921
4032
|
/** i18n key for links look label (template adds trailing colon). */
|
|
3922
4033
|
this.titleKey = input('@general:widgets.file-uploader.attachments.title', /* @ts-ignore */
|
|
3923
4034
|
...(ngDevMode ? [{ debugName: "titleKey" }] : /* istanbul ignore next */ []));
|
|
@@ -4186,22 +4297,12 @@ class AXPFileListComponent {
|
|
|
4186
4297
|
case 'fileId':
|
|
4187
4298
|
if (typeof source.value === 'string') {
|
|
4188
4299
|
try {
|
|
4189
|
-
const
|
|
4190
|
-
|
|
4191
|
-
|
|
4192
|
-
|
|
4193
|
-
|
|
4194
|
-
|
|
4195
|
-
document.body.appendChild(link);
|
|
4196
|
-
link.click();
|
|
4197
|
-
document.body.removeChild(link);
|
|
4198
|
-
}
|
|
4199
|
-
else if (fileInfo && fileInfo.binary instanceof Blob) {
|
|
4200
|
-
triggerDownload(fileInfo.binary, resolved.name ?? fileInfo.name ?? 'download');
|
|
4201
|
-
}
|
|
4202
|
-
else {
|
|
4203
|
-
console.error('Could not retrieve file for download from fileId:', fileInfo);
|
|
4204
|
-
}
|
|
4300
|
+
const fileId = source.value.replace(/^file:/, '');
|
|
4301
|
+
const fileInfo = await this.fileStorageService.getInfo(fileId);
|
|
4302
|
+
const blob = fileInfo?.binary instanceof Blob
|
|
4303
|
+
? fileInfo.binary
|
|
4304
|
+
: await this.fileStorageService.download(fileId);
|
|
4305
|
+
triggerDownload(blob, resolved.name ?? fileInfo?.name ?? 'download');
|
|
4205
4306
|
}
|
|
4206
4307
|
catch (error) {
|
|
4207
4308
|
console.error('Error downloading file by fileId:', source.value, error);
|
|
@@ -4240,7 +4341,14 @@ class AXPFileListComponent {
|
|
|
4240
4341
|
fileInfo: undefined,
|
|
4241
4342
|
});
|
|
4242
4343
|
if (result?.fileInfo) {
|
|
4243
|
-
if (result.fileInfo.
|
|
4344
|
+
if (result.fileInfo.binary instanceof Blob) {
|
|
4345
|
+
triggerDownload(result.fileInfo.binary, resolved.name ?? result.fileInfo.name ?? 'download');
|
|
4346
|
+
}
|
|
4347
|
+
else if (typeof result.fileInfo.fileId === 'string' && result.fileInfo.fileId) {
|
|
4348
|
+
const blob = await this.fileStorageService.download(result.fileInfo.fileId);
|
|
4349
|
+
triggerDownload(blob, resolved.name ?? result.fileInfo.name ?? 'download');
|
|
4350
|
+
}
|
|
4351
|
+
else if (result.fileInfo.url) {
|
|
4244
4352
|
const link = document.createElement('a');
|
|
4245
4353
|
link.href = result.fileInfo.url;
|
|
4246
4354
|
link.download = resolved.name ?? result.fileInfo.name ?? 'download';
|
|
@@ -4249,9 +4357,6 @@ class AXPFileListComponent {
|
|
|
4249
4357
|
link.click();
|
|
4250
4358
|
document.body.removeChild(link);
|
|
4251
4359
|
}
|
|
4252
|
-
else if (result.fileInfo.binary instanceof Blob) {
|
|
4253
|
-
triggerDownload(result.fileInfo.binary, resolved.name ?? result.fileInfo.name ?? 'download');
|
|
4254
|
-
}
|
|
4255
4360
|
else {
|
|
4256
4361
|
console.error('Could not retrieve file for download from reference:', result.fileInfo);
|
|
4257
4362
|
}
|
|
@@ -4371,7 +4476,7 @@ class AXPFileListComponent {
|
|
|
4371
4476
|
return action.color ?? 'primary';
|
|
4372
4477
|
}
|
|
4373
4478
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFileListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4374
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPFileListComponent, isStandalone: true, selector: "axp-file-list", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, fileEditable: { classPropertyName: "fileEditable", publicName: "fileEditable", isSignal: true, isRequired: false, transformFunction: null }, enableTitleDescription: { classPropertyName: "enableTitleDescription", publicName: "enableTitleDescription", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, titleKey: { classPropertyName: "titleKey", publicName: "titleKey", isSignal: true, isRequired: false, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, linksLayout: { classPropertyName: "linksLayout", publicName: "linksLayout", isSignal: true, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, maxFileSize: { classPropertyName: "maxFileSize", publicName: "maxFileSize", isSignal: true, isRequired: false, transformFunction: null }, showUploadZoneHint: { classPropertyName: "showUploadZoneHint", publicName: "showUploadZoneHint", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: "plugins", publicName: "plugins", isSignal: true, isRequired: false, transformFunction: null }, excludePlugins: { classPropertyName: "excludePlugins", publicName: "excludePlugins", isSignal: true, isRequired: false, transformFunction: null }, capabilities: { classPropertyName: "capabilities", publicName: "capabilities", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onRemove: "onRemove", onRevert: "onRevert", onRename: "onRename" }, host: { properties: { "class.--look-rows": "look() === \"rows\"", "class.--look-links": "look() === \"links\"", "class.--links-inline": "look() === \"links\" && linksLayout() === \"inline\"" } }, providers: [], ngImport: i0, template: "@if (look() === 'links') {\n @if (displayFiles().length > 0) {\n <div class=\"__links\">\n @if (showLabel()) {\n <span class=\"__links-label\">{{ titleKey() | translate | async }}:</span>\n }\n <ul class=\"__links-list\">\n @for (file of displayFiles(); track file.id ?? $index) {\n <li>\n <button\n type=\"button\"\n class=\"__link-item\"\n (click)=\"handleFileDownload($event, file)\"\n (dblclick)=\"handleFileRowActivate($event, file)\"\n >\n <i class=\"fa-light fa-paperclip flex-shrink-0\"></i>\n <span class=\"min-w-0 break-all\">{{ file.name }}</span>\n </button>\n </li>\n }\n </ul>\n </div>\n } @else {\n <div class=\"__empty-state __empty-state--links\">\n <axp-state-message\n [icon]=\"emptyStateIcon()\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"emptyStateDescription().key\"\n [descriptionParams]=\"emptyStateDescription().params\"\n look=\"minimal\"\n />\n </div>\n }\n} @else {\n @for (file of displayFiles(); track $index) {\n <div\n class=\"__item\"\n [ngClass]=\"{\n '--removed': file.status === 'deleted',\n '--attached': file.status === 'attached',\n '--with-meta': enableTitleDescription(),\n '--item-readonly': file.readOnly === true,\n '--downloadable': file.status !== 'deleted',\n }\"\n (dblclick)=\"handleFileRowActivate($event, file)\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"__icon\">\n <i class=\"fa-fw {{ getFileInfo(file.name).icon }}\"></i>\n </div>\n @if (enableTitleDescription()) {\n <div class=\"__content\">\n <div class=\"__primary\">{{ file.name }}{{ file.title?.trim() ? ' - ' + file.title : '' }}</div>\n @if (file.description?.trim()) {\n <div class=\"__secondary\">{{ file.description }}</div>\n }\n </div>\n } @else {\n <div class=\"__name\">{{ file.name }}</div>\n }\n <div class=\"__actions\" (dblclick)=\"$event.stopPropagation()\">\n @if (file.status === 'deleted' && multiple() && !isItemInteractionLocked(file)) {\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"warning\" (onClick)=\"handleFileRevert($event, file)\">\n <ax-icon class=\"fa-light fa-rotate-left\"></ax-icon>\n </ax-button>\n } @else if (file.status !== 'deleted') {\n @for (action of actionsFor(file, $index); track action.id ?? action.textKey ?? action.text ?? $index) {\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"runAction(action)\"\n >\n @if (action.icon) {\n <ax-icon class=\"{{ action.icon }}\"></ax-icon>\n }\n </ax-button>\n }\n }\n </div>\n </div>\n } @empty {\n <div class=\"__empty-state\">\n <axp-state-message\n [icon]=\"emptyStateIcon()\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"emptyStateDescription().key\"\n [descriptionParams]=\"emptyStateDescription().params\"\n >\n </axp-state-message>\n </div>\n }\n}\n", styles: ["@layer properties;:host{display:flex;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}:host.--look-rows{padding-block:calc(var(--spacing, .25rem) * 2)}:host.--look-links{padding-block:0px}:host.--look-links .__links .__links-label{margin-inline-end:calc(var(--spacing, .25rem) * 2);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-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgb(var(--ax-sys-color-on-surface-variant))}:host.--look-links .__links .__links-list{margin:0;margin-top:var(--spacing, .25rem);list-style-type:none;padding:0}:host.--look-links .__links .__links-list li{margin:0;padding:0}:host.--look-links .__links .__links-list .__link-item{display:inline-flex;width:100%;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 3);border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);text-align:start;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));text-decoration-line:none;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;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));color:rgb(var(--ax-sys-color-primary))}:host.--look-links .__links .__links-list .__link-item:hover{background:rgb(var(--ax-sys-color-lighter-surface))}:host.--look-links.--links-inline .__links{margin-bottom:calc(var(--spacing, .25rem) * 4);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-surface));padding-bottom:calc(var(--spacing, .25rem) * 4)}:host.--look-links:not(.--links-inline) .__links-list{margin-top:0;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}:host .__item{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 3);border-left-style:var(--tw-border-style);border-left-width:4px;border-color:transparent;padding:calc(var(--spacing, .25rem) * 2)}:host .__item.--downloadable{cursor:pointer}:host .__item.--downloadable:hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}:host .__item:not(.--downloadable){cursor:default}:host .__item.--removed{border-color:rgba(var(--ax-sys-color-danger-500));background-color:rgba(var(--ax-sys-color-danger-50))}:host .__item.--attached{border-color:rgba(var(--ax-sys-color-success-500));animation:attached-flash 1s ease-out forwards}:host .__item.--item-readonly:not(.--removed){opacity:.85}:host .__item .__icon{width:calc(var(--spacing, .25rem) * 6);flex-shrink:0}:host .__item .__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;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-medium, 500);font-weight:var(--font-weight-medium, 500)}:host .__item .__content{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}:host .__item .__primary{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;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-medium, 500);font-weight:var(--font-weight-medium, 500)}:host .__item .__secondary{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;text-align:start;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--ax-sys-color-text-secondary)}:host .__item.--with-meta .__content{justify-content:center}:host .__item .__actions{margin-left:auto;display:flex;flex-shrink:0}@keyframes attached-flash{0%{background-color:rgb(var(--ax-sys-color-success-50))}to{background-color:transparent}}.__empty-state{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;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));--tw-duration: .2s;transition-duration:.2s}.__empty-state .axp-state-message .__description{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;text-overflow:ellipsis;word-break:break-word}.__empty-state:hover{opacity:80%}.__empty-state.__empty-state--links{padding-block:calc(var(--spacing, .25rem) * 2)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-duration{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-font-weight: initial;--tw-border-style: solid;--tw-duration: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type:
|
|
4479
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPFileListComponent, isStandalone: true, selector: "axp-file-list", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, fileEditable: { classPropertyName: "fileEditable", publicName: "fileEditable", isSignal: true, isRequired: false, transformFunction: null }, enableTitleDescription: { classPropertyName: "enableTitleDescription", publicName: "enableTitleDescription", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, titleKey: { classPropertyName: "titleKey", publicName: "titleKey", isSignal: true, isRequired: false, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, linksLayout: { classPropertyName: "linksLayout", publicName: "linksLayout", isSignal: true, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, maxFileSize: { classPropertyName: "maxFileSize", publicName: "maxFileSize", isSignal: true, isRequired: false, transformFunction: null }, showUploadZoneHint: { classPropertyName: "showUploadZoneHint", publicName: "showUploadZoneHint", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: "plugins", publicName: "plugins", isSignal: true, isRequired: false, transformFunction: null }, excludePlugins: { classPropertyName: "excludePlugins", publicName: "excludePlugins", isSignal: true, isRequired: false, transformFunction: null }, capabilities: { classPropertyName: "capabilities", publicName: "capabilities", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onRemove: "onRemove", onRevert: "onRevert", onRename: "onRename" }, host: { properties: { "class.--look-rows": "look() === \"rows\"", "class.--look-links": "look() === \"links\"", "class.--links-inline": "look() === \"links\" && linksLayout() === \"inline\"" } }, providers: [], ngImport: i0, template: "@if (look() === 'links') {\n @if (displayFiles().length > 0) {\n <div class=\"__links\">\n @if (showLabel()) {\n <span class=\"__links-label\">{{ titleKey() | translate | async }}:</span>\n }\n <ul class=\"__links-list\">\n @for (file of displayFiles(); track file.id ?? $index) {\n <li>\n <button\n type=\"button\"\n class=\"__link-item\"\n (click)=\"handleFileDownload($event, file)\"\n (dblclick)=\"handleFileRowActivate($event, file)\"\n >\n <i class=\"fa-light fa-paperclip flex-shrink-0\"></i>\n <span class=\"min-w-0 break-all\">{{ file.name }}</span>\n </button>\n </li>\n }\n </ul>\n </div>\n } @else {\n <div class=\"__empty-state __empty-state--links\">\n <axp-state-message\n [icon]=\"emptyStateIcon()\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"emptyStateDescription().key\"\n [descriptionParams]=\"emptyStateDescription().params\"\n look=\"minimal\"\n />\n </div>\n }\n} @else {\n @for (file of displayFiles(); track $index) {\n <div\n class=\"__item\"\n [ngClass]=\"{\n '--removed': file.status === 'deleted',\n '--attached': file.status === 'attached',\n '--with-meta': enableTitleDescription(),\n '--item-readonly': file.readOnly === true,\n '--downloadable': file.status !== 'deleted',\n }\"\n (dblclick)=\"handleFileRowActivate($event, file)\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"__icon\">\n <i class=\"fa-fw {{ getFileInfo(file.name).icon }}\"></i>\n </div>\n @if (enableTitleDescription()) {\n <div class=\"__content\">\n <div class=\"__primary\">{{ file.name }}{{ file.title?.trim() ? ' - ' + file.title : '' }}</div>\n @if (file.description?.trim()) {\n <div class=\"__secondary\">{{ file.description }}</div>\n }\n </div>\n } @else {\n <div class=\"__name\">{{ file.name }}</div>\n }\n <!-- ----- Download, edit, and delete for the row ----- -->\n @if (showActions()) {\n <div class=\"__actions\" (dblclick)=\"$event.stopPropagation()\">\n @if (file.status === 'deleted' && multiple() && !isItemInteractionLocked(file)) {\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"warning\" (onClick)=\"handleFileRevert($event, file)\">\n <ax-icon class=\"fa-light fa-rotate-left\"></ax-icon>\n </ax-button>\n } @else if (file.status !== 'deleted') {\n @for (action of actionsFor(file, $index); track action.id ?? action.textKey ?? action.text ?? $index) {\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"runAction(action)\"\n >\n @if (action.icon) {\n <ax-icon class=\"{{ action.icon }}\"></ax-icon>\n }\n </ax-button>\n }\n }\n </div>\n }\n </div>\n } @empty {\n <div class=\"__empty-state\">\n <axp-state-message\n [icon]=\"emptyStateIcon()\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"emptyStateDescription().key\"\n [descriptionParams]=\"emptyStateDescription().params\"\n >\n </axp-state-message>\n </div>\n }\n}\n", styles: ["@layer properties;:host{display:flex;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}:host.--look-rows{padding-block:calc(var(--spacing, .25rem) * 2)}:host.--look-links{padding-block:0px}:host.--look-links .__links .__links-label{margin-inline-end:calc(var(--spacing, .25rem) * 2);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-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgb(var(--ax-sys-color-on-surface-variant))}:host.--look-links .__links .__links-list{margin:0;margin-top:var(--spacing, .25rem);list-style-type:none;padding:0}:host.--look-links .__links .__links-list li{margin:0;padding:0}:host.--look-links .__links .__links-list .__link-item{display:inline-flex;width:100%;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 3);border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);text-align:start;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));text-decoration-line:none;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;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));color:rgb(var(--ax-sys-color-primary))}:host.--look-links .__links .__links-list .__link-item:hover{background:rgb(var(--ax-sys-color-lighter-surface))}:host.--look-links.--links-inline .__links{margin-bottom:calc(var(--spacing, .25rem) * 4);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-surface));padding-bottom:calc(var(--spacing, .25rem) * 4)}:host.--look-links:not(.--links-inline) .__links-list{margin-top:0;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}:host .__item{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 3);border-left-style:var(--tw-border-style);border-left-width:4px;border-color:transparent;padding:calc(var(--spacing, .25rem) * 2)}:host .__item.--downloadable{cursor:pointer}:host .__item.--downloadable:hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}:host .__item:not(.--downloadable){cursor:default}:host .__item.--removed{border-color:rgba(var(--ax-sys-color-danger-500));background-color:rgba(var(--ax-sys-color-danger-50))}:host .__item.--attached{border-color:rgba(var(--ax-sys-color-success-500));animation:attached-flash 1s ease-out forwards}:host .__item.--item-readonly:not(.--removed){opacity:.85}:host .__item .__icon{width:calc(var(--spacing, .25rem) * 6);flex-shrink:0}:host .__item .__name{min-width:0px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;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-medium, 500);font-weight:var(--font-weight-medium, 500)}:host .__item .__content{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}:host .__item .__primary{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;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-medium, 500);font-weight:var(--font-weight-medium, 500)}:host .__item .__secondary{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;text-align:start;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--ax-sys-color-text-secondary)}:host .__item.--with-meta .__content{justify-content:center}:host .__item .__actions{margin-left:auto;display:flex;flex-shrink:0}@keyframes attached-flash{0%{background-color:rgb(var(--ax-sys-color-success-50))}to{background-color:transparent}}.__empty-state{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;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));--tw-duration: .2s;transition-duration:.2s}.__empty-state .axp-state-message .__description{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;text-overflow:ellipsis;word-break:break-word}.__empty-state:hover{opacity:80%}.__empty-state.__empty-state--links{padding-block:calc(var(--spacing, .25rem) * 2)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-duration{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-font-weight: initial;--tw-border-style: solid;--tw-duration: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type:
|
|
4375
4480
|
// ACoreX
|
|
4376
4481
|
AXFormModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXLabelModule }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type:
|
|
4377
4482
|
// Platform
|
|
@@ -4399,8 +4504,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4399
4504
|
AXTranslationModule,
|
|
4400
4505
|
// Platform
|
|
4401
4506
|
AXPStateMessageComponent,
|
|
4402
|
-
], changeDetection: ChangeDetectionStrategy.Eager, providers: [], template: "@if (look() === 'links') {\n @if (displayFiles().length > 0) {\n <div class=\"__links\">\n @if (showLabel()) {\n <span class=\"__links-label\">{{ titleKey() | translate | async }}:</span>\n }\n <ul class=\"__links-list\">\n @for (file of displayFiles(); track file.id ?? $index) {\n <li>\n <button\n type=\"button\"\n class=\"__link-item\"\n (click)=\"handleFileDownload($event, file)\"\n (dblclick)=\"handleFileRowActivate($event, file)\"\n >\n <i class=\"fa-light fa-paperclip flex-shrink-0\"></i>\n <span class=\"min-w-0 break-all\">{{ file.name }}</span>\n </button>\n </li>\n }\n </ul>\n </div>\n } @else {\n <div class=\"__empty-state __empty-state--links\">\n <axp-state-message\n [icon]=\"emptyStateIcon()\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"emptyStateDescription().key\"\n [descriptionParams]=\"emptyStateDescription().params\"\n look=\"minimal\"\n />\n </div>\n }\n} @else {\n @for (file of displayFiles(); track $index) {\n <div\n class=\"__item\"\n [ngClass]=\"{\n '--removed': file.status === 'deleted',\n '--attached': file.status === 'attached',\n '--with-meta': enableTitleDescription(),\n '--item-readonly': file.readOnly === true,\n '--downloadable': file.status !== 'deleted',\n }\"\n (dblclick)=\"handleFileRowActivate($event, file)\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"__icon\">\n <i class=\"fa-fw {{ getFileInfo(file.name).icon }}\"></i>\n </div>\n @if (enableTitleDescription()) {\n <div class=\"__content\">\n <div class=\"__primary\">{{ file.name }}{{ file.title?.trim() ? ' - ' + file.title : '' }}</div>\n @if (file.description?.trim()) {\n <div class=\"__secondary\">{{ file.description }}</div>\n }\n </div>\n } @else {\n <div class=\"__name\">{{ file.name }}</div>\n }\n <div class=\"__actions\" (dblclick)=\"$event.stopPropagation()\">\n @if (file.status === 'deleted' && multiple() && !isItemInteractionLocked(file)) {\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"warning\" (onClick)=\"handleFileRevert($event, file)\">\n <ax-icon class=\"fa-light fa-rotate-left\"></ax-icon>\n </ax-button>\n } @else if (file.status !== 'deleted') {\n @for (action of actionsFor(file, $index); track action.id ?? action.textKey ?? action.text ?? $index) {\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"runAction(action)\"\n >\n @if (action.icon) {\n <ax-icon class=\"{{ action.icon }}\"></ax-icon>\n }\n </ax-button>\n }\n }\n </div>\n </div>\n } @empty {\n <div class=\"__empty-state\">\n <axp-state-message\n [icon]=\"emptyStateIcon()\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"emptyStateDescription().key\"\n [descriptionParams]=\"emptyStateDescription().params\"\n >\n </axp-state-message>\n </div>\n }\n}\n", styles: ["@layer properties;:host{display:flex;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}:host.--look-rows{padding-block:calc(var(--spacing, .25rem) * 2)}:host.--look-links{padding-block:0px}:host.--look-links .__links .__links-label{margin-inline-end:calc(var(--spacing, .25rem) * 2);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-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgb(var(--ax-sys-color-on-surface-variant))}:host.--look-links .__links .__links-list{margin:0;margin-top:var(--spacing, .25rem);list-style-type:none;padding:0}:host.--look-links .__links .__links-list li{margin:0;padding:0}:host.--look-links .__links .__links-list .__link-item{display:inline-flex;width:100%;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 3);border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);text-align:start;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));text-decoration-line:none;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;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));color:rgb(var(--ax-sys-color-primary))}:host.--look-links .__links .__links-list .__link-item:hover{background:rgb(var(--ax-sys-color-lighter-surface))}:host.--look-links.--links-inline .__links{margin-bottom:calc(var(--spacing, .25rem) * 4);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-surface));padding-bottom:calc(var(--spacing, .25rem) * 4)}:host.--look-links:not(.--links-inline) .__links-list{margin-top:0;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}:host .__item{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 3);border-left-style:var(--tw-border-style);border-left-width:4px;border-color:transparent;padding:calc(var(--spacing, .25rem) * 2)}:host .__item.--downloadable{cursor:pointer}:host .__item.--downloadable:hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}:host .__item:not(.--downloadable){cursor:default}:host .__item.--removed{border-color:rgba(var(--ax-sys-color-danger-500));background-color:rgba(var(--ax-sys-color-danger-50))}:host .__item.--attached{border-color:rgba(var(--ax-sys-color-success-500));animation:attached-flash 1s ease-out forwards}:host .__item.--item-readonly:not(.--removed){opacity:.85}:host .__item .__icon{width:calc(var(--spacing, .25rem) * 6);flex-shrink:0}:host .__item .__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;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-medium, 500);font-weight:var(--font-weight-medium, 500)}:host .__item .__content{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}:host .__item .__primary{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;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-medium, 500);font-weight:var(--font-weight-medium, 500)}:host .__item .__secondary{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;text-align:start;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--ax-sys-color-text-secondary)}:host .__item.--with-meta .__content{justify-content:center}:host .__item .__actions{margin-left:auto;display:flex;flex-shrink:0}@keyframes attached-flash{0%{background-color:rgb(var(--ax-sys-color-success-50))}to{background-color:transparent}}.__empty-state{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;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));--tw-duration: .2s;transition-duration:.2s}.__empty-state .axp-state-message .__description{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;text-overflow:ellipsis;word-break:break-word}.__empty-state:hover{opacity:80%}.__empty-state.__empty-state--links{padding-block:calc(var(--spacing, .25rem) * 2)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-duration{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-font-weight: initial;--tw-border-style: solid;--tw-duration: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
4403
|
-
}], propDecorators: { onRemove: [{ type: i0.Output, args: ["onRemove"] }], onRevert: [{ type: i0.Output, args: ["onRevert"] }], onRename: [{ type: i0.Output, args: ["onRename"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], fileEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileEditable", required: false }] }], enableTitleDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTitleDescription", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }], titleKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "titleKey", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], linksLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "linksLayout", required: false }] }], files: [{ type: i0.Input, args: [{ isSignal: true, alias: "files", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], maxFileSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFileSize", required: false }] }], showUploadZoneHint: [{ type: i0.Input, args: [{ isSignal: true, alias: "showUploadZoneHint", required: false }] }], plugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "plugins", required: false }] }], excludePlugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludePlugins", required: false }] }], capabilities: [{ type: i0.Input, args: [{ isSignal: true, alias: "capabilities", required: false }] }] } });
|
|
4507
|
+
], changeDetection: ChangeDetectionStrategy.Eager, providers: [], template: "@if (look() === 'links') {\n @if (displayFiles().length > 0) {\n <div class=\"__links\">\n @if (showLabel()) {\n <span class=\"__links-label\">{{ titleKey() | translate | async }}:</span>\n }\n <ul class=\"__links-list\">\n @for (file of displayFiles(); track file.id ?? $index) {\n <li>\n <button\n type=\"button\"\n class=\"__link-item\"\n (click)=\"handleFileDownload($event, file)\"\n (dblclick)=\"handleFileRowActivate($event, file)\"\n >\n <i class=\"fa-light fa-paperclip flex-shrink-0\"></i>\n <span class=\"min-w-0 break-all\">{{ file.name }}</span>\n </button>\n </li>\n }\n </ul>\n </div>\n } @else {\n <div class=\"__empty-state __empty-state--links\">\n <axp-state-message\n [icon]=\"emptyStateIcon()\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"emptyStateDescription().key\"\n [descriptionParams]=\"emptyStateDescription().params\"\n look=\"minimal\"\n />\n </div>\n }\n} @else {\n @for (file of displayFiles(); track $index) {\n <div\n class=\"__item\"\n [ngClass]=\"{\n '--removed': file.status === 'deleted',\n '--attached': file.status === 'attached',\n '--with-meta': enableTitleDescription(),\n '--item-readonly': file.readOnly === true,\n '--downloadable': file.status !== 'deleted',\n }\"\n (dblclick)=\"handleFileRowActivate($event, file)\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"__icon\">\n <i class=\"fa-fw {{ getFileInfo(file.name).icon }}\"></i>\n </div>\n @if (enableTitleDescription()) {\n <div class=\"__content\">\n <div class=\"__primary\">{{ file.name }}{{ file.title?.trim() ? ' - ' + file.title : '' }}</div>\n @if (file.description?.trim()) {\n <div class=\"__secondary\">{{ file.description }}</div>\n }\n </div>\n } @else {\n <div class=\"__name\">{{ file.name }}</div>\n }\n <!-- ----- Download, edit, and delete for the row ----- -->\n @if (showActions()) {\n <div class=\"__actions\" (dblclick)=\"$event.stopPropagation()\">\n @if (file.status === 'deleted' && multiple() && !isItemInteractionLocked(file)) {\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"warning\" (onClick)=\"handleFileRevert($event, file)\">\n <ax-icon class=\"fa-light fa-rotate-left\"></ax-icon>\n </ax-button>\n } @else if (file.status !== 'deleted') {\n @for (action of actionsFor(file, $index); track action.id ?? action.textKey ?? action.text ?? $index) {\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"runAction(action)\"\n >\n @if (action.icon) {\n <ax-icon class=\"{{ action.icon }}\"></ax-icon>\n }\n </ax-button>\n }\n }\n </div>\n }\n </div>\n } @empty {\n <div class=\"__empty-state\">\n <axp-state-message\n [icon]=\"emptyStateIcon()\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"emptyStateDescription().key\"\n [descriptionParams]=\"emptyStateDescription().params\"\n >\n </axp-state-message>\n </div>\n }\n}\n", styles: ["@layer properties;:host{display:flex;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}:host.--look-rows{padding-block:calc(var(--spacing, .25rem) * 2)}:host.--look-links{padding-block:0px}:host.--look-links .__links .__links-label{margin-inline-end:calc(var(--spacing, .25rem) * 2);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-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgb(var(--ax-sys-color-on-surface-variant))}:host.--look-links .__links .__links-list{margin:0;margin-top:var(--spacing, .25rem);list-style-type:none;padding:0}:host.--look-links .__links .__links-list li{margin:0;padding:0}:host.--look-links .__links .__links-list .__link-item{display:inline-flex;width:100%;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 3);border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2.5);text-align:start;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));text-decoration-line:none;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;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));color:rgb(var(--ax-sys-color-primary))}:host.--look-links .__links .__links-list .__link-item:hover{background:rgb(var(--ax-sys-color-lighter-surface))}:host.--look-links.--links-inline .__links{margin-bottom:calc(var(--spacing, .25rem) * 4);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-surface));padding-bottom:calc(var(--spacing, .25rem) * 4)}:host.--look-links:not(.--links-inline) .__links-list{margin-top:0;display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}:host .__item{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 3);border-left-style:var(--tw-border-style);border-left-width:4px;border-color:transparent;padding:calc(var(--spacing, .25rem) * 2)}:host .__item.--downloadable{cursor:pointer}:host .__item.--downloadable:hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}:host .__item:not(.--downloadable){cursor:default}:host .__item.--removed{border-color:rgba(var(--ax-sys-color-danger-500));background-color:rgba(var(--ax-sys-color-danger-50))}:host .__item.--attached{border-color:rgba(var(--ax-sys-color-success-500));animation:attached-flash 1s ease-out forwards}:host .__item.--item-readonly:not(.--removed){opacity:.85}:host .__item .__icon{width:calc(var(--spacing, .25rem) * 6);flex-shrink:0}:host .__item .__name{min-width:0px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;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-medium, 500);font-weight:var(--font-weight-medium, 500)}:host .__item .__content{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * .5)}:host .__item .__primary{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;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-medium, 500);font-weight:var(--font-weight-medium, 500)}:host .__item .__secondary{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;text-align:start;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--ax-sys-color-text-secondary)}:host .__item.--with-meta .__content{justify-content:center}:host .__item .__actions{margin-left:auto;display:flex;flex-shrink:0}@keyframes attached-flash{0%{background-color:rgb(var(--ax-sys-color-success-50))}to{background-color:transparent}}.__empty-state{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;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));--tw-duration: .2s;transition-duration:.2s}.__empty-state .axp-state-message .__description{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;text-overflow:ellipsis;word-break:break-word}.__empty-state:hover{opacity:80%}.__empty-state.__empty-state--links{padding-block:calc(var(--spacing, .25rem) * 2)}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-duration{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-font-weight: initial;--tw-border-style: solid;--tw-duration: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
4508
|
+
}], propDecorators: { onRemove: [{ type: i0.Output, args: ["onRemove"] }], onRevert: [{ type: i0.Output, args: ["onRevert"] }], onRename: [{ type: i0.Output, args: ["onRename"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], fileEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileEditable", required: false }] }], enableTitleDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTitleDescription", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }], showActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "showActions", required: false }] }], titleKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "titleKey", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], linksLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "linksLayout", required: false }] }], files: [{ type: i0.Input, args: [{ isSignal: true, alias: "files", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], maxFileSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFileSize", required: false }] }], showUploadZoneHint: [{ type: i0.Input, args: [{ isSignal: true, alias: "showUploadZoneHint", required: false }] }], plugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "plugins", required: false }] }], excludePlugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludePlugins", required: false }] }], capabilities: [{ type: i0.Input, args: [{ isSignal: true, alias: "capabilities", required: false }] }] } });
|
|
4404
4509
|
|
|
4405
4510
|
//#region ---- Attachment fingerprint (no blob comparison) ----
|
|
4406
4511
|
/** Stable fingerprint for one file row; ignores Blob binary content. */
|
|
@@ -5193,11 +5298,11 @@ class AXPFileUploaderWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
5193
5298
|
return false;
|
|
5194
5299
|
}
|
|
5195
5300
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFileUploaderWidgetColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5196
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPFileUploaderWidgetColumnComponent, isStandalone: true, selector: "axp-file-uploader-widget-column", inputs: { rawValue: "rawValue", rowData: "rowData" }, viewQueries: [{ propertyName: "fileListTrigger", first: true, predicate: ["fileListTrigger"], descendants: true, isSignal: true }, { propertyName: "fileListPopover", first: true, predicate: ["fileListPopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (fileCount() > 0) {\n <span\n class=\"cursor-pointer text-primary underline\"\n (click)=\"openFileListPopover(); $event.stopPropagation()\"\n #fileListTrigger\n >\n {{\n '@general:widgets.file-uploader.column.files-count'\n | translate: { params: { count: fileCount() } }\n | async\n }}\n </span>\n} @else if (showAttachmentsLink()) {\n <span\n class=\"cursor-pointer text-primary underline\"\n (click)=\"openFileListPopover(); $event.stopPropagation()\"\n #fileListTrigger\n >\n {{ '@general:widgets.file-uploader.attachments.title' | translate | async }}\n </span>\n} @else {\n <span class=\"text-muted\">---</span>\n}\n\n<ax-popover [openOn]=\"'manual'\" #fileListPopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[17.5rem] max-w-[26rem] overflow-hidden\">\n <div class=\"border-b border-surface px-4 py-3\">\n <h3 class=\"m-0 text-sm font-semibold leading-normal text-on-lightest-surface\">\n {{ popoverTitle() | translate | async }}\n </h3>\n </div>\n <div class=\"max-h-64 overflow-y-auto px-3 py-3\" style=\"max-height: max(30dvh, 12rem)\">\n @if (loadStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (loadStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ loadError() }}</div>\n } @else if (popoverFiles().length === 0) {\n <p class=\"axp-file-uploader-column-popover__empty\">\n {{ '@general:widgets.file-uploader.empty-state.title' | translate | async }}\n </p>\n } @else {\n <axp-file-list\n [files]=\"popoverFiles()\"\n look=\"
|
|
5301
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPFileUploaderWidgetColumnComponent, isStandalone: true, selector: "axp-file-uploader-widget-column", inputs: { rawValue: "rawValue", rowData: "rowData" }, viewQueries: [{ propertyName: "fileListTrigger", first: true, predicate: ["fileListTrigger"], descendants: true, isSignal: true }, { propertyName: "fileListPopover", first: true, predicate: ["fileListPopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (fileCount() > 0) {\n <span\n class=\"cursor-pointer text-primary underline\"\n (click)=\"openFileListPopover(); $event.stopPropagation()\"\n #fileListTrigger\n >\n {{\n '@general:widgets.file-uploader.column.files-count'\n | translate: { params: { count: fileCount() } }\n | async\n }}\n </span>\n} @else if (showAttachmentsLink()) {\n <span\n class=\"cursor-pointer text-primary underline\"\n (click)=\"openFileListPopover(); $event.stopPropagation()\"\n #fileListTrigger\n >\n {{ '@general:widgets.file-uploader.attachments.title' | translate | async }}\n </span>\n} @else {\n <span class=\"text-muted\">---</span>\n}\n\n<ax-popover [openOn]=\"'manual'\" #fileListPopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[17.5rem] max-w-[26rem] overflow-hidden\">\n <div class=\"border-b border-surface px-4 py-3\">\n <h3 class=\"m-0 text-sm font-semibold leading-normal text-on-lightest-surface\">\n {{ popoverTitle() | translate | async }}\n </h3>\n </div>\n <div class=\"max-h-64 overflow-y-auto px-3 py-3\" style=\"max-height: max(30dvh, 12rem)\">\n @if (loadStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (loadStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ loadError() }}</div>\n } @else if (popoverFiles().length === 0) {\n <p class=\"axp-file-uploader-column-popover__empty\">\n {{ '@general:widgets.file-uploader.empty-state.title' | translate | async }}\n </p>\n } @else {\n <axp-file-list\n [files]=\"popoverFiles()\"\n look=\"rows\"\n [showActions]=\"false\"\n />\n }\n </div>\n </div>\n</ax-popover>\n", styles: ["@layer properties;.axp-file-uploader-column-popover__empty{margin:0;padding-block:calc(var(--spacing, .25rem) * 2);text-align:center;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:rgb(var(--ax-sys-color-on-lighter-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: AXTranslationModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i1$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "restoreFocusOnClose", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "enableTitleDescription", "multiple", "look", "showActions", "titleKey", "showLabel", "linksLayout", "files", "accept", "maxFileSize", "showUploadZoneHint", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5197
5302
|
}
|
|
5198
5303
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFileUploaderWidgetColumnComponent, decorators: [{
|
|
5199
5304
|
type: Component,
|
|
5200
|
-
args: [{ selector: 'axp-file-uploader-widget-column', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXTranslationModule, AsyncPipe, AXPopoverModule, AXLoadingModule, AXPFileListComponent], inputs: ['rawValue', 'rowData'], template: "@if (fileCount() > 0) {\n <span\n class=\"cursor-pointer text-primary underline\"\n (click)=\"openFileListPopover(); $event.stopPropagation()\"\n #fileListTrigger\n >\n {{\n '@general:widgets.file-uploader.column.files-count'\n | translate: { params: { count: fileCount() } }\n | async\n }}\n </span>\n} @else if (showAttachmentsLink()) {\n <span\n class=\"cursor-pointer text-primary underline\"\n (click)=\"openFileListPopover(); $event.stopPropagation()\"\n #fileListTrigger\n >\n {{ '@general:widgets.file-uploader.attachments.title' | translate | async }}\n </span>\n} @else {\n <span class=\"text-muted\">---</span>\n}\n\n<ax-popover [openOn]=\"'manual'\" #fileListPopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[17.5rem] max-w-[26rem] overflow-hidden\">\n <div class=\"border-b border-surface px-4 py-3\">\n <h3 class=\"m-0 text-sm font-semibold leading-normal text-on-lightest-surface\">\n {{ popoverTitle() | translate | async }}\n </h3>\n </div>\n <div class=\"max-h-64 overflow-y-auto px-3 py-3\" style=\"max-height: max(30dvh, 12rem)\">\n @if (loadStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (loadStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ loadError() }}</div>\n } @else if (popoverFiles().length === 0) {\n <p class=\"axp-file-uploader-column-popover__empty\">\n {{ '@general:widgets.file-uploader.empty-state.title' | translate | async }}\n </p>\n } @else {\n <axp-file-list\n [files]=\"popoverFiles()\"\n look=\"
|
|
5305
|
+
args: [{ selector: 'axp-file-uploader-widget-column', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXTranslationModule, AsyncPipe, AXPopoverModule, AXLoadingModule, AXPFileListComponent], inputs: ['rawValue', 'rowData'], template: "@if (fileCount() > 0) {\n <span\n class=\"cursor-pointer text-primary underline\"\n (click)=\"openFileListPopover(); $event.stopPropagation()\"\n #fileListTrigger\n >\n {{\n '@general:widgets.file-uploader.column.files-count'\n | translate: { params: { count: fileCount() } }\n | async\n }}\n </span>\n} @else if (showAttachmentsLink()) {\n <span\n class=\"cursor-pointer text-primary underline\"\n (click)=\"openFileListPopover(); $event.stopPropagation()\"\n #fileListTrigger\n >\n {{ '@general:widgets.file-uploader.attachments.title' | translate | async }}\n </span>\n} @else {\n <span class=\"text-muted\">---</span>\n}\n\n<ax-popover [openOn]=\"'manual'\" #fileListPopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[17.5rem] max-w-[26rem] overflow-hidden\">\n <div class=\"border-b border-surface px-4 py-3\">\n <h3 class=\"m-0 text-sm font-semibold leading-normal text-on-lightest-surface\">\n {{ popoverTitle() | translate | async }}\n </h3>\n </div>\n <div class=\"max-h-64 overflow-y-auto px-3 py-3\" style=\"max-height: max(30dvh, 12rem)\">\n @if (loadStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (loadStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ loadError() }}</div>\n } @else if (popoverFiles().length === 0) {\n <p class=\"axp-file-uploader-column-popover__empty\">\n {{ '@general:widgets.file-uploader.empty-state.title' | translate | async }}\n </p>\n } @else {\n <axp-file-list\n [files]=\"popoverFiles()\"\n look=\"rows\"\n [showActions]=\"false\"\n />\n }\n </div>\n </div>\n</ax-popover>\n", styles: ["@layer properties;.axp-file-uploader-column-popover__empty{margin:0;padding-block:calc(var(--spacing, .25rem) * 2);text-align:center;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:rgb(var(--ax-sys-color-on-lighter-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"] }]
|
|
5201
5306
|
}], ctorParameters: () => [], propDecorators: { fileListTrigger: [{ type: i0.ViewChild, args: ['fileListTrigger', { isSignal: true }] }], fileListPopover: [{ type: i0.ViewChild, args: ['fileListPopover', { isSignal: true }] }] } });
|
|
5202
5307
|
|
|
5203
5308
|
var fileUploaderWidgetColumn_component = /*#__PURE__*/Object.freeze({
|
|
@@ -5212,6 +5317,8 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5212
5317
|
this.chooserService = inject(AXPFileChooserService);
|
|
5213
5318
|
this.settingsService = inject(AXPSettingsService);
|
|
5214
5319
|
this.commandExecutor = inject(AXPCommandExecutor);
|
|
5320
|
+
this.queryExecutor = inject(AXPQueryExecutor);
|
|
5321
|
+
this.debug = inject(AXPDebugService);
|
|
5215
5322
|
this.toastService = inject(AXToastService);
|
|
5216
5323
|
this.translateService = inject(AXTranslationService);
|
|
5217
5324
|
//#region ---- Dirty tracking (deferred save pages) ----
|
|
@@ -5230,18 +5337,44 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5230
5337
|
this.statusBeforeDelete = new Map();
|
|
5231
5338
|
this.autoBaselineSynced = signal(false, /* @ts-ignore */
|
|
5232
5339
|
...(ngDevMode ? [{ debugName: "autoBaselineSynced" }] : /* istanbul ignore next */ []));
|
|
5340
|
+
this.entityFilesHydrateGeneration = 0;
|
|
5233
5341
|
/** Sync baseline from context when not wired by a deferred-save page (section layout). */
|
|
5234
5342
|
this.baselineInitEffect = effect(() => {
|
|
5235
5343
|
if (this.autoBaselineSynced()) {
|
|
5236
5344
|
return;
|
|
5237
5345
|
}
|
|
5238
5346
|
const value = this.getValue();
|
|
5239
|
-
if (value == null) {
|
|
5347
|
+
if (value == null || attachmentNeedsHydration(value)) {
|
|
5240
5348
|
return;
|
|
5241
5349
|
}
|
|
5242
5350
|
this.syncBaseline(value);
|
|
5243
5351
|
}, /* @ts-ignore */
|
|
5244
5352
|
...(ngDevMode ? [{ debugName: "baselineInitEffect" }] : /* istanbul ignore next */ []));
|
|
5353
|
+
/**
|
|
5354
|
+
* Storage refs (including `reference:edms-lazy`) are not file rows.
|
|
5355
|
+
* Load them through FileUploader:LoadFiles without marking the form dirty.
|
|
5356
|
+
*/
|
|
5357
|
+
this.entityFilesHydrateEffect = effect(() => {
|
|
5358
|
+
const value = this.getValue();
|
|
5359
|
+
const options = this.options();
|
|
5360
|
+
if (!attachmentNeedsHydration(value)) {
|
|
5361
|
+
return;
|
|
5362
|
+
}
|
|
5363
|
+
untracked(() => {
|
|
5364
|
+
const scope = resolveFileUploaderEntityScope(options, this.contextService.data(), typeof this.path === 'string' ? this.path : undefined);
|
|
5365
|
+
if (!scope) {
|
|
5366
|
+
return;
|
|
5367
|
+
}
|
|
5368
|
+
const scopeKey = `${scope.name}:${scope.id}:${scope.field}`;
|
|
5369
|
+
if (this.hydratedScopeKey === scopeKey) {
|
|
5370
|
+
return;
|
|
5371
|
+
}
|
|
5372
|
+
this.hydratedScopeKey = scopeKey;
|
|
5373
|
+
const generation = ++this.entityFilesHydrateGeneration;
|
|
5374
|
+
void this.hydrateEntityFiles(scope, scopeKey, generation);
|
|
5375
|
+
});
|
|
5376
|
+
}, /* @ts-ignore */
|
|
5377
|
+
...(ngDevMode ? [{ debugName: "entityFilesHydrateEffect" }] : /* istanbul ignore next */ []));
|
|
5245
5378
|
//#endregion
|
|
5246
5379
|
this.multiple = computed(() => this.options()['multiple'], /* @ts-ignore */
|
|
5247
5380
|
...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
@@ -5279,7 +5412,7 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5279
5412
|
if (this.readonly()) {
|
|
5280
5413
|
return false;
|
|
5281
5414
|
}
|
|
5282
|
-
if (!this.multiple() &&
|
|
5415
|
+
if (!this.multiple() && this.files().length > 0) {
|
|
5283
5416
|
return false;
|
|
5284
5417
|
}
|
|
5285
5418
|
return true;
|
|
@@ -5295,9 +5428,9 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5295
5428
|
items: this.getValue() ?? [],
|
|
5296
5429
|
}), /* @ts-ignore */
|
|
5297
5430
|
...(ngDevMode ? [{ debugName: "chooserContext" }] : /* istanbul ignore next */ []));
|
|
5298
|
-
this.files = computed(() => (this.getValue() ?? []).map((file) => ({
|
|
5431
|
+
this.files = computed(() => (this.getValue() ?? []).filter(isFileListItem).map((file) => ({
|
|
5299
5432
|
...file,
|
|
5300
|
-
}))
|
|
5433
|
+
})), /* @ts-ignore */
|
|
5301
5434
|
...(ngDevMode ? [{ debugName: "files" }] : /* istanbul ignore next */ []));
|
|
5302
5435
|
this.capabilities = {
|
|
5303
5436
|
getFiles: () => this.files(),
|
|
@@ -5343,6 +5476,39 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5343
5476
|
const base = this.acceptOverride() ?? this.options()['accept'];
|
|
5344
5477
|
this.acceptOverride.set(resolveFileChooserAccept(base, true));
|
|
5345
5478
|
}
|
|
5479
|
+
async hydrateEntityFiles(scope, scopeKey, generation) {
|
|
5480
|
+
this.beginHydration();
|
|
5481
|
+
try {
|
|
5482
|
+
const result = await this.queryExecutor.fetch('FileUploader:LoadFiles', scope);
|
|
5483
|
+
if (generation !== this.entityFilesHydrateGeneration) {
|
|
5484
|
+
return;
|
|
5485
|
+
}
|
|
5486
|
+
const data = runtimeQueryPayloadData(result);
|
|
5487
|
+
if (!data) {
|
|
5488
|
+
this.debug.warn(FILE_UPLOADER_TRACE_NS, 'edit-hydrate', 'FileUploader:LoadFiles returned no files', () => ({
|
|
5489
|
+
scope,
|
|
5490
|
+
message: result?.message?.text,
|
|
5491
|
+
}));
|
|
5492
|
+
return;
|
|
5493
|
+
}
|
|
5494
|
+
const files = (data.files ?? []).filter(isFileListItem);
|
|
5495
|
+
this.hydratedScopeKey = scopeKey;
|
|
5496
|
+
this.applyDefaultValue(files);
|
|
5497
|
+
this.syncBaseline(files);
|
|
5498
|
+
}
|
|
5499
|
+
catch (error) {
|
|
5500
|
+
if (generation !== this.entityFilesHydrateGeneration) {
|
|
5501
|
+
return;
|
|
5502
|
+
}
|
|
5503
|
+
this.debug.warn(FILE_UPLOADER_TRACE_NS, 'edit-hydrate', 'FileUploader:LoadFiles failed', () => ({
|
|
5504
|
+
scope,
|
|
5505
|
+
error: error instanceof Error ? error.message : String(error),
|
|
5506
|
+
}));
|
|
5507
|
+
}
|
|
5508
|
+
finally {
|
|
5509
|
+
this.endHydration();
|
|
5510
|
+
}
|
|
5511
|
+
}
|
|
5346
5512
|
setValue(value) {
|
|
5347
5513
|
super.setValue(value);
|
|
5348
5514
|
if (this.skipDirtyEvaluation) {
|
|
@@ -5741,6 +5907,13 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5741
5907
|
}
|
|
5742
5908
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFileUploaderWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
5743
5909
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPFileUploaderWidgetEditComponent, isStandalone: true, selector: "axp-file-uploader-widget-edit", host: { properties: { "class.axp-file-uploader-widget-edit--borderless": "!showBorder()", "class.block": "true", "class.flex-1": "true", "class.border": "showBorder()", "class.rounded-md": "showBorder()", "class.lightest-surface": "showBorder()" } }, usesInheritance: true, ngImport: i0, template: `
|
|
5910
|
+
@if (isHydrating()) {
|
|
5911
|
+
<!-- ----- Loading indicator while stored attachments are fetched ----- -->
|
|
5912
|
+
<ax-loading></ax-loading>
|
|
5913
|
+
}
|
|
5914
|
+
<!-- ----- File list after stored attachments are loaded ----- -->
|
|
5915
|
+
@else {
|
|
5916
|
+
<!-- ----- Add button when the uploader is ready for new files ----- -->
|
|
5744
5917
|
@if (showAddItemButton() && !readonly()) {
|
|
5745
5918
|
<div class="flex justify-end pb-2">
|
|
5746
5919
|
<ax-button
|
|
@@ -5748,7 +5921,7 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5748
5921
|
class="ax-sm"
|
|
5749
5922
|
color="primary"
|
|
5750
5923
|
[text]="'@general:actions.add-item.title' | translate | async"
|
|
5751
|
-
[disabled]="!multiple() && (
|
|
5924
|
+
[disabled]="!multiple() && files().length > 0"
|
|
5752
5925
|
[context]="chooserContext()"
|
|
5753
5926
|
[items]="files()"
|
|
5754
5927
|
[busy]="isChoosing()"
|
|
@@ -5788,11 +5961,19 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
5788
5961
|
(onRename)="handleFileRename($event)"
|
|
5789
5962
|
></axp-file-list>
|
|
5790
5963
|
</div>
|
|
5791
|
-
|
|
5964
|
+
}
|
|
5965
|
+
`, isInline: true, styles: [":host.axp-file-uploader-widget-edit--borderless{border:none!important}.__drop-zone--interactive{cursor:pointer;padding-top:.5rem;border:2px dashed rgb(var(--ax-sys-color-border-lighter-surface));border-radius:.5rem;transition:border-color .15s ease,background-color .15s ease}.__drop-zone--interactive:hover{border-color:rgb(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-50),.08)}.__drop-zone--drag-over{border-color:rgb(var(--ax-sys-color-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-50),.16)!important;box-shadow:0 0 0 3px rgba(var(--ax-sys-color-primary-50),.35)}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "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: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: AXPFileChooserDirective, selector: "[axpFileChooser]", inputs: ["context", "disabled", "items", "busy"], outputs: ["itemsChange", "busyChange"] }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "enableTitleDescription", "multiple", "look", "showActions", "titleKey", "showLabel", "linksLayout", "files", "accept", "maxFileSize", "showUploadZoneHint", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5792
5966
|
}
|
|
5793
5967
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFileUploaderWidgetEditComponent, decorators: [{
|
|
5794
5968
|
type: Component,
|
|
5795
5969
|
args: [{ selector: 'axp-file-uploader-widget-edit', template: `
|
|
5970
|
+
@if (isHydrating()) {
|
|
5971
|
+
<!-- ----- Loading indicator while stored attachments are fetched ----- -->
|
|
5972
|
+
<ax-loading></ax-loading>
|
|
5973
|
+
}
|
|
5974
|
+
<!-- ----- File list after stored attachments are loaded ----- -->
|
|
5975
|
+
@else {
|
|
5976
|
+
<!-- ----- Add button when the uploader is ready for new files ----- -->
|
|
5796
5977
|
@if (showAddItemButton() && !readonly()) {
|
|
5797
5978
|
<div class="flex justify-end pb-2">
|
|
5798
5979
|
<ax-button
|
|
@@ -5800,7 +5981,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
5800
5981
|
class="ax-sm"
|
|
5801
5982
|
color="primary"
|
|
5802
5983
|
[text]="'@general:actions.add-item.title' | translate | async"
|
|
5803
|
-
[disabled]="!multiple() && (
|
|
5984
|
+
[disabled]="!multiple() && files().length > 0"
|
|
5804
5985
|
[context]="chooserContext()"
|
|
5805
5986
|
[items]="files()"
|
|
5806
5987
|
[busy]="isChoosing()"
|
|
@@ -5840,6 +6021,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
5840
6021
|
(onRename)="handleFileRename($event)"
|
|
5841
6022
|
></axp-file-list>
|
|
5842
6023
|
</div>
|
|
6024
|
+
}
|
|
5843
6025
|
`, host: {
|
|
5844
6026
|
'[class.axp-file-uploader-widget-edit--borderless]': '!showBorder()',
|
|
5845
6027
|
'[class.block]': 'true',
|
|
@@ -5870,7 +6052,7 @@ class AXPFileUploaderWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
5870
6052
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFileUploaderWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
5871
6053
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPFileUploaderWidgetViewComponent, isStandalone: true, selector: "axp-file-uploader-widget-view", host: { properties: { "class": "this.__class" } }, usesInheritance: true, ngImport: i0, template: `
|
|
5872
6054
|
<axp-file-list [files]="files()" [readonly]="true"></axp-file-list>
|
|
5873
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXUploaderModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "enableTitleDescription", "multiple", "look", "titleKey", "showLabel", "linksLayout", "files", "accept", "maxFileSize", "showUploadZoneHint", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6055
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXUploaderModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "enableTitleDescription", "multiple", "look", "showActions", "titleKey", "showLabel", "linksLayout", "files", "accept", "maxFileSize", "showUploadZoneHint", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5874
6056
|
}
|
|
5875
6057
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFileUploaderWidgetViewComponent, decorators: [{
|
|
5876
6058
|
type: Component,
|
|
@@ -5983,7 +6165,6 @@ class AXPFileUploaderWidgetService {
|
|
|
5983
6165
|
this.popupService = inject(AXPopupService);
|
|
5984
6166
|
this.dialogOpener = inject(AXPDialogOpener);
|
|
5985
6167
|
this.translate = inject(AXTranslationService);
|
|
5986
|
-
this.commandExecutor = inject(AXPCommandExecutor);
|
|
5987
6168
|
this.queryExecutor = inject(AXPQueryExecutor);
|
|
5988
6169
|
}
|
|
5989
6170
|
//#endregion
|
|
@@ -6002,17 +6183,17 @@ class AXPFileUploaderWidgetService {
|
|
|
6002
6183
|
const resolved = {
|
|
6003
6184
|
files: files ?? [],
|
|
6004
6185
|
readonly: options?.readonly ?? false,
|
|
6005
|
-
multiple: options?.multiple ??
|
|
6006
|
-
accept: options?.accept
|
|
6186
|
+
multiple: options?.multiple ?? true,
|
|
6187
|
+
accept: options?.accept,
|
|
6007
6188
|
fileEditable: options?.fileEditable ?? true,
|
|
6008
|
-
maxFileSize: options?.maxFileSize ??
|
|
6189
|
+
maxFileSize: options?.maxFileSize ?? 0,
|
|
6009
6190
|
showAddItemButton: options?.showAddItemButton ?? true,
|
|
6010
6191
|
plugins: options?.plugins ?? [],
|
|
6011
6192
|
editDialog: options?.editDialog,
|
|
6012
6193
|
};
|
|
6013
6194
|
let title = '';
|
|
6014
6195
|
const result = await this.dialogOpener.openPopup({
|
|
6015
|
-
load: () => import('./acorex-platform-framework-client-layout-entity-file-list-popup.component-
|
|
6196
|
+
load: () => import('./acorex-platform-framework-client-layout-entity-file-list-popup.component-DGZVS11E.mjs').then((m) => m.AXPFileListPopupComponent),
|
|
6016
6197
|
data: {
|
|
6017
6198
|
entity: entity ?? null,
|
|
6018
6199
|
readonly: resolved.readonly,
|
|
@@ -6034,6 +6215,9 @@ class AXPFileUploaderWidgetService {
|
|
|
6034
6215
|
showAddItemButton: signal(resolved.showAddItemButton),
|
|
6035
6216
|
plugins: signal(resolved.plugins),
|
|
6036
6217
|
editDialog: signal(resolved.editDialog),
|
|
6218
|
+
entityName: signal(entity?.name),
|
|
6219
|
+
entityId: signal(entity?.id),
|
|
6220
|
+
entityField: signal(entity?.field),
|
|
6037
6221
|
},
|
|
6038
6222
|
}),
|
|
6039
6223
|
});
|
|
@@ -6041,16 +6225,6 @@ class AXPFileUploaderWidgetService {
|
|
|
6041
6225
|
if (!updatedFiles) {
|
|
6042
6226
|
return undefined;
|
|
6043
6227
|
}
|
|
6044
|
-
if (!entity) {
|
|
6045
|
-
return updatedFiles;
|
|
6046
|
-
}
|
|
6047
|
-
const saveResult = await this.commandExecutor.execute('FileUploader:SaveFiles', {
|
|
6048
|
-
...entity,
|
|
6049
|
-
files: updatedFiles,
|
|
6050
|
-
});
|
|
6051
|
-
if (!saveResult?.success) {
|
|
6052
|
-
return undefined;
|
|
6053
|
-
}
|
|
6054
6228
|
return updatedFiles;
|
|
6055
6229
|
}
|
|
6056
6230
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFileUploaderWidgetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -6089,9 +6263,11 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
6089
6263
|
isFileUploaderEditDialogAuto: isFileUploaderEditDialogAuto,
|
|
6090
6264
|
normalizeEntityFieldToFileList: normalizeEntityFieldToFileList,
|
|
6091
6265
|
persistedAttachments: persistedAttachments,
|
|
6266
|
+
readLiveAttachmentValue: readLiveAttachmentValue,
|
|
6092
6267
|
resolveAttachmentFieldPath: resolveAttachmentFieldPath,
|
|
6093
6268
|
resolveFileUploaderEditDialog: resolveFileUploaderEditDialog,
|
|
6094
|
-
resolveFileUploaderEntityScope: resolveFileUploaderEntityScope
|
|
6269
|
+
resolveFileUploaderEntityScope: resolveFileUploaderEntityScope,
|
|
6270
|
+
saveAttachmentsThroughEntityUpdate: saveAttachmentsThroughEntityUpdate
|
|
6095
6271
|
});
|
|
6096
6272
|
|
|
6097
6273
|
//#endregion
|
|
@@ -6132,6 +6308,7 @@ class AXPShowFileUploaderPopupCommand {
|
|
|
6132
6308
|
this.translationService = inject(AXTranslationService);
|
|
6133
6309
|
this.settingsService = inject(AXPSettingsService);
|
|
6134
6310
|
this.entityEvents = inject(AXPEntityBroadcastService);
|
|
6311
|
+
this.entityRegistry = inject(AXPEntityDefinitionRegistryService);
|
|
6135
6312
|
}
|
|
6136
6313
|
async execute(input = {}) {
|
|
6137
6314
|
const resolved = resolveShowFileUploaderPopupInput(input);
|
|
@@ -6153,6 +6330,10 @@ class AXPShowFileUploaderPopupCommand {
|
|
|
6153
6330
|
if (!files) {
|
|
6154
6331
|
return { success: false };
|
|
6155
6332
|
}
|
|
6333
|
+
const saved = await this.saveLikeAttachmentsPage(entityRef, entityId, field, files);
|
|
6334
|
+
if (!saved) {
|
|
6335
|
+
return { success: false };
|
|
6336
|
+
}
|
|
6156
6337
|
const updatedData = cloneDeep({ id: entityId, [field]: files });
|
|
6157
6338
|
const enableOperationToasts = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);
|
|
6158
6339
|
if (enableOperationToasts) {
|
|
@@ -6170,6 +6351,32 @@ class AXPShowFileUploaderPopupCommand {
|
|
|
6170
6351
|
data: updatedData,
|
|
6171
6352
|
};
|
|
6172
6353
|
}
|
|
6354
|
+
/** Same persistence as the attachments page: the entity update command, not FileUploader:SaveFiles. */
|
|
6355
|
+
async saveLikeAttachmentsPage(entityRef, entityId, field, files) {
|
|
6356
|
+
const dot = entityRef.indexOf('.');
|
|
6357
|
+
const moduleName = dot > 0 ? entityRef.slice(0, dot) : '';
|
|
6358
|
+
const entityName = dot > 0 ? entityRef.slice(dot + 1) : '';
|
|
6359
|
+
if (!moduleName || !entityName) {
|
|
6360
|
+
return false;
|
|
6361
|
+
}
|
|
6362
|
+
try {
|
|
6363
|
+
const entity = await this.entityRegistry.resolve(moduleName, entityName);
|
|
6364
|
+
const updateExec = entity?.commands?.update?.execute;
|
|
6365
|
+
if (typeof updateExec !== 'function') {
|
|
6366
|
+
return false;
|
|
6367
|
+
}
|
|
6368
|
+
await saveAttachmentsThroughEntityUpdate(updateExec, entityId, field, files);
|
|
6369
|
+
return true;
|
|
6370
|
+
}
|
|
6371
|
+
catch {
|
|
6372
|
+
this.toastService.show({
|
|
6373
|
+
color: 'danger',
|
|
6374
|
+
title: await this.translationService.translateAsync('@general:messages.error.title'),
|
|
6375
|
+
content: await this.translationService.translateAsync('@general:messages.entity.update-failed'),
|
|
6376
|
+
});
|
|
6377
|
+
return false;
|
|
6378
|
+
}
|
|
6379
|
+
}
|
|
6173
6380
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPShowFileUploaderPopupCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6174
6381
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPShowFileUploaderPopupCommand, providedIn: 'root' }); }
|
|
6175
6382
|
}
|
|
@@ -7582,7 +7789,7 @@ class AXPEntityCardSkeletonComponent {
|
|
|
7582
7789
|
...(ngDevMode ? [{ debugName: "badgePlaceholders" }] : /* istanbul ignore next */ []));
|
|
7583
7790
|
}
|
|
7584
7791
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityCardSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7585
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityCardSkeletonComponent, isStandalone: true, selector: "axp-entity-card-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 }, rowLayout: { classPropertyName: "rowLayout", publicName: "rowLayout", isSignal: true, isRequired: false, transformFunction: null }, showAvatar: { classPropertyName: "showAvatar", publicName: "showAvatar", isSignal: true, isRequired: false, transformFunction: null }, fillHost: { classPropertyName: "fillHost", publicName: "fillHost", isSignal: true, isRequired: false, transformFunction: null }, embedded: { classPropertyName: "embedded", publicName: "embedded", isSignal: true, isRequired: false, transformFunction: null }, elevated: { classPropertyName: "elevated", publicName: "elevated", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.axp-entity-card-host--fill": "fillHost()", "class.axp-entity-card-host--elevated": "elevated()" } }, ngImport: i0, template: "<article\n class=\"axp-entity-card-skeleton\"\n [class.axp-entity-card-skeleton--with-body]=\"showContent() && fieldPlaceholders().length && !rowLayout()\"\n [class.axp-entity-card-skeleton--with-footer]=\"showFooter()\"\n [class.axp-entity-card-skeleton--row]=\"rowLayout()\"\n [class.axp-entity-card-skeleton--embedded]=\"embedded()\"\n [class.axp-entity-card-skeleton--elevated]=\"elevated()\"\n aria-hidden=\"true\"\n>\n <!-- ----- Card header placeholders ----- -->\n <div class=\"axp-entity-card-skeleton__identity\">\n <div class=\"axp-entity-card-skeleton__identity-main\">\n @if (showAvatar()) {\n <!-- ----- Avatar placeholder only when the layout has an avatar field ----- -->\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__avatar\"></ax-skeleton>\n }\n <div class=\"axp-entity-card-skeleton__identity-text\">\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__title\"></ax-skeleton>\n @if (showContent()) {\n <!-- ----- Description or inline fact placeholders ----- -->\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 <!-- ----- Overflow menu placeholder ----- -->\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__menu\"></ax-skeleton>\n }\n </div>\n\n @if (showContent() && !rowLayout()) {\n <!-- ----- Fact placeholders when card content is shown ----- -->\n <!--------------------------------------------------------------->\n @if (fieldPlaceholders().length) {\n <div class=\"axp-entity-card-skeleton__fields\">\n @for (index of fieldPlaceholders(); track index) {\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__fact\"></ax-skeleton>\n }\n </div>\n }\n }\n\n @if (showFooter()) {\n <!-- ----- Primary action placeholder ----- -->\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;width:100%;min-width:0px}:host.axp-entity-card-host--fill{display:flex;width:100%;min-width:0;flex:1 1 auto;flex-direction:column}:host.axp-entity-card-host--elevated{border-radius:var(--radius-md, .375rem);box-shadow:0 8px 16px #00000029,0 24px 48px #00000038,0 48px 96px #00000047}.axp-entity-card-skeleton{display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));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-skeleton .axp-entity-card-skeleton__identity{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3)}.axp-entity-card-skeleton .axp-entity-card-skeleton__identity-main{display:flex;min-width:0px;flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 3)}.axp-entity-card-skeleton .axp-entity-card-skeleton__avatar{height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 12);flex-shrink:0;border-radius:var(--radius-lg, .5rem)}.axp-entity-card-skeleton .axp-entity-card-skeleton__identity-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) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3)}.axp-entity-card-skeleton .axp-entity-card-skeleton__fact{height:calc(var(--spacing, .25rem) * 4);width:calc(var(--spacing, .25rem) * 40);border-radius:.25rem}.axp-entity-card-skeleton .axp-entity-card-skeleton__footer{margin-top:auto;border-bottom-right-radius:var(--radius-md, .375rem);border-bottom-left-radius:var(--radius-md, .375rem);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-light-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block: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)}.axp-entity-card-skeleton.axp-entity-card-skeleton--row .axp-entity-card-skeleton__avatar{height:calc(var(--spacing, .25rem) * 10);width:calc(var(--spacing, .25rem) * 10)}.axp-entity-card-skeleton.axp-entity-card-skeleton--elevated{--tw-shadow: 0 0 #0000;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-skeleton.axp-entity-card-skeleton--embedded{border-radius:0;border-style:var(--tw-border-style);border-width:0px;--tw-shadow: 0 0 #0000;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-skeleton.axp-entity-card-skeleton--embedded .axp-entity-card-skeleton__identity,.axp-entity-card-skeleton.axp-entity-card-skeleton--embedded .axp-entity-card-skeleton__fields{padding-inline:0px}.axp-entity-card-skeleton.axp-entity-card-skeleton--embedded .axp-entity-card-skeleton__identity{padding-block:0px}:host.axp-entity-card-host--fill .axp-entity-card-skeleton{display:flex;width:100%;min-height:0;flex:1 1 auto;flex-direction:column}@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;}@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}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$4.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7792
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityCardSkeletonComponent, isStandalone: true, selector: "axp-entity-card-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 }, rowLayout: { classPropertyName: "rowLayout", publicName: "rowLayout", isSignal: true, isRequired: false, transformFunction: null }, showAvatar: { classPropertyName: "showAvatar", publicName: "showAvatar", isSignal: true, isRequired: false, transformFunction: null }, fillHost: { classPropertyName: "fillHost", publicName: "fillHost", isSignal: true, isRequired: false, transformFunction: null }, embedded: { classPropertyName: "embedded", publicName: "embedded", isSignal: true, isRequired: false, transformFunction: null }, elevated: { classPropertyName: "elevated", publicName: "elevated", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.axp-entity-card-host--fill": "fillHost()", "class.axp-entity-card-host--elevated": "elevated()" } }, ngImport: i0, template: "<article\n class=\"axp-entity-card-skeleton\"\n [class.axp-entity-card-skeleton--with-body]=\"showContent() && fieldPlaceholders().length && !rowLayout()\"\n [class.axp-entity-card-skeleton--with-footer]=\"showFooter()\"\n [class.axp-entity-card-skeleton--row]=\"rowLayout()\"\n [class.axp-entity-card-skeleton--embedded]=\"embedded()\"\n [class.axp-entity-card-skeleton--elevated]=\"elevated()\"\n aria-hidden=\"true\"\n>\n <!-- ----- Card header placeholders ----- -->\n <div class=\"axp-entity-card-skeleton__identity\">\n <div class=\"axp-entity-card-skeleton__identity-main\">\n @if (showAvatar()) {\n <!-- ----- Avatar placeholder only when the layout has an avatar field ----- -->\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__avatar\"></ax-skeleton>\n }\n <div class=\"axp-entity-card-skeleton__identity-text\">\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__title\"></ax-skeleton>\n @if (showContent()) {\n <!-- ----- Description or inline fact placeholders ----- -->\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 <!-- ----- Overflow menu placeholder ----- -->\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__menu\"></ax-skeleton>\n }\n </div>\n\n @if (showContent() && !rowLayout()) {\n <!-- ----- Fact placeholders when card content is shown ----- -->\n <!--------------------------------------------------------------->\n @if (fieldPlaceholders().length) {\n <div class=\"axp-entity-card-skeleton__fields\">\n @for (index of fieldPlaceholders(); track index) {\n <ax-skeleton [animated]=\"true\" class=\"axp-entity-card-skeleton__fact\"></ax-skeleton>\n }\n </div>\n }\n }\n\n @if (showFooter()) {\n <!-- ----- Primary action placeholder ----- -->\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;width:100%;min-width:0px}:host.axp-entity-card-host--fill{display:flex;width:100%;min-width:0;flex:1 1 auto;flex-direction:column}:host.axp-entity-card-host--elevated{border-radius:var(--radius-md, .375rem);box-shadow:0 8px 16px #00000029,0 24px 48px #00000038,0 48px 96px #00000047}.axp-entity-card-skeleton{display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));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-skeleton .axp-entity-card-skeleton__identity{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3)}.axp-entity-card-skeleton .axp-entity-card-skeleton__identity-main{display:flex;min-width:0px;flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 3)}.axp-entity-card-skeleton .axp-entity-card-skeleton__avatar{height:calc(var(--spacing, .25rem) * 12);width:calc(var(--spacing, .25rem) * 12);flex-shrink:0;border-radius:var(--radius-lg, .5rem)}.axp-entity-card-skeleton .axp-entity-card-skeleton__identity-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) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3)}.axp-entity-card-skeleton .axp-entity-card-skeleton__fact{height:calc(var(--spacing, .25rem) * 4);width:calc(var(--spacing, .25rem) * 40);border-radius:.25rem}.axp-entity-card-skeleton .axp-entity-card-skeleton__footer{margin-top:auto;border-bottom-right-radius:var(--radius-md, .375rem);border-bottom-left-radius:var(--radius-md, .375rem);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-light-surface));padding-inline:calc(var(--spacing, .25rem) * 4);padding-block: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)}.axp-entity-card-skeleton.axp-entity-card-skeleton--row .axp-entity-card-skeleton__avatar{height:calc(var(--spacing, .25rem) * 10);width:calc(var(--spacing, .25rem) * 10)}.axp-entity-card-skeleton.axp-entity-card-skeleton--elevated{--tw-shadow: 0 0 #0000;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-skeleton.axp-entity-card-skeleton--embedded{border-radius:0;border-style:var(--tw-border-style);border-width:0px;--tw-shadow: 0 0 #0000;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-skeleton.axp-entity-card-skeleton--embedded .axp-entity-card-skeleton__identity,.axp-entity-card-skeleton.axp-entity-card-skeleton--embedded .axp-entity-card-skeleton__fields{padding-inline:0px}.axp-entity-card-skeleton.axp-entity-card-skeleton--embedded .axp-entity-card-skeleton__identity{padding-block:0px}:host.axp-entity-card-host--fill .axp-entity-card-skeleton{display:flex;width:100%;min-height:0;flex:1 1 auto;flex-direction:column}@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;}@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}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$3.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7586
7793
|
}
|
|
7587
7794
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityCardSkeletonComponent, decorators: [{
|
|
7588
7795
|
type: Component,
|
|
@@ -8231,7 +8438,7 @@ class AXPEntityCardComponent {
|
|
|
8231
8438
|
}
|
|
8232
8439
|
}
|
|
8233
8440
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8234
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityCardComponent, isStandalone: true, selector: "axp-entity-card", inputs: { entity: { classPropertyName: "entity", publicName: "entity", isSignal: true, isRequired: true, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, row: { classPropertyName: "row", publicName: "row", isSignal: true, isRequired: true, transformFunction: null }, fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null }, userStylingRules: { classPropertyName: "userStylingRules", publicName: "userStylingRules", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, embedded: { classPropertyName: "embedded", publicName: "embedded", isSignal: true, isRequired: false, transformFunction: null }, elevated: { classPropertyName: "elevated", publicName: "elevated", isSignal: true, isRequired: false, transformFunction: null }, disableLookupPopover: { classPropertyName: "disableLookupPopover", publicName: "disableLookupPopover", isSignal: true, isRequired: false, transformFunction: null }, fillHost: { classPropertyName: "fillHost", publicName: "fillHost", isSignal: true, isRequired: false, transformFunction: null }, extraExpanded: { classPropertyName: "extraExpanded", publicName: "extraExpanded", isSignal: true, isRequired: false, 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 }, showClose: { classPropertyName: "showClose", publicName: "showClose", isSignal: true, isRequired: false, transformFunction: null }, primaryActions: { classPropertyName: "primaryActions", publicName: "primaryActions", isSignal: true, isRequired: false, transformFunction: null }, primaryActionLook: { classPropertyName: "primaryActionLook", publicName: "primaryActionLook", isSignal: true, isRequired: false, transformFunction: null }, secondaryActionLoader: { classPropertyName: "secondaryActionLoader", publicName: "secondaryActionLoader", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { extraExpanded: "extraExpandedChange", selectionChange: "selectionChange", commandClick: "commandClick", closeClick: "closeClick" }, host: { properties: { "class.axp-entity-card-host--fill": "fillHost()", "class.axp-entity-card-host--elevated": "elevated()" } }, ngImport: i0, template: "<article\n class=\"axp-entity-card\"\n [ngClass]=\"recordStylingClass()\"\n [class.axp-entity-card--selected]=\"selected()\"\n [class.axp-entity-card--new]=\"showNewBadge()\"\n [class.axp-entity-card--row]=\"isRowLayout()\"\n [class.axp-entity-card--compact]=\"variant() === 'compact'\"\n [class.axp-entity-card--embedded]=\"embedded()\"\n [class.axp-entity-card--elevated]=\"elevated()\"\n [class.axp-entity-card--static]=\"!interactive()\"\n [class.axp-entity-card--with-body]=\"hasCardBody()\"\n [class.axp-entity-card--with-footer]=\"hasCardFooter()\"\n [class.axp-entity-card--expandable]=\"canShowMore()\"\n [class.axp-entity-card--expanded]=\"extraExpanded()\"\n [attr.role]=\"interactive() ? 'button' : undefined\"\n [attr.tabindex]=\"interactive() ? 0 : undefined\"\n [attr.aria-selected]=\"interactive() ? selected() : undefined\"\n (click)=\"onCardClick($event)\"\n (dblclick)=\"onCardDblClick($event)\"\n (keydown)=\"onCardKeydown($event)\"\n>\n <div class=\"axp-entity-card__content\">\n <!-- ----- Identity row: optional avatar, title, status, and actions ----- -->\n <div class=\"axp-entity-card__identity\">\n <div class=\"axp-entity-card__identity-main\">\n @if (showUserAvatar()) {\n <!-- ----- Person or user identity uses the user avatar ----- -->\n <axp-user-avatar class=\"axp-entity-card__avatar\" [size]=\"avatarSize()\" [userId]=\"userAvatarId()\" [displayName]=\"toDisplayName(titleText())\" [displayAvatar]=\"avatarSrc()\" [showPresence]=\"false\" [axpUserCard]=\"userAvatarId()\" />\n }\n <!--------------------------------------------------------------->\n @if (showIdentityImage()) {\n <!-- ----- Logo or company image for entities that store an image/logo ----- -->\n <div class=\"axp-entity-card__logo\" [style.width.px]=\"avatarSize()\" [style.height.px]=\"avatarSize()\">\n <img [src]=\"avatarSrc()\" [alt]=\"toDisplayName(titleText())\" />\n </div>\n }\n <!--------------------------------------------------------------->\n @if (identityQrField(); as field) {\n <!-- ----- QR widget occupies the identity visual slot when there is no avatar or logo ----- -->\n <div class=\"axp-entity-card__qr\" [style.width.px]=\"avatarSize()\" [style.height.px]=\"avatarSize()\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n }\n\n <div class=\"axp-entity-card__identity-text\">\n <div class=\"axp-entity-card__title-row\">\n @if (iconClass(); as icon) {\n <!-- ----- Optional header icon from the card layout ----- -->\n <i [class]=\"icon + ' axp-entity-card__icon'\" aria-hidden=\"true\"></i>\n }\n\n <h3 class=\"axp-entity-card__title\">\n {{ titleText() | translate | async }}\n </h3>\n\n @if (showNewBadge()) {\n <!-- ----- New-row highlight badge ----- -->\n <ax-badge class=\"axp-entity-card__header-badge\" [text]=\"('@acorex:dataTable.rowHighlight.new' | translate | async) || ''\" color=\"success\" />\n }\n\n @for (field of headerBadgeFields(); track field.name) {\n <!--------------------------------------------------------------->\n @if (isStatusBadgeField(field)) {\n <!-- ----- Status widget rendered in the header ----- -->\n <div class=\"axp-entity-card__header-badge\" [ngClass]=\"fieldStylingClass(field.name)\">\n <axp-widget-column-cell [node]=\"fieldHeaderBadgeNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n }\n <!-- ----- Non-status field rendered as a simple badge ----- -->\n @else if (resolveBadgeText(field)) {\n <ax-badge class=\"axp-entity-card__header-badge\" [ngClass]=\"fieldStylingClass(field.name)\" [text]=\"resolveBadgeText(field)\" [color]=\"resolveBadgeColor(field)\" />\n }\n }\n </div>\n\n @if (descriptionText()) {\n <!-- ----- Optional description under the title ----- -->\n <p class=\"axp-entity-card__description\">\n {{ descriptionText() | translate | async }}\n </p>\n }\n\n @if (headerMetaFields().length) {\n <!-- ----- Unlabeled header extra (identifier or contact) ----- -->\n <div class=\"axp-entity-card__facts axp-entity-card__facts--inline\">\n @for (field of headerMetaFields(); track field.name) {\n <div class=\"axp-entity-card__fact\" [ngClass]=\"fieldStylingClass(field.name)\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (hasIdentityActions()) {\n <!-- ----- Selection, overflow actions, or popover dismiss ----- -->\n <div class=\"axp-entity-card__identity-actions\">\n @if (showSelection()) {\n <!-- ----- Multi-select checkbox ----- -->\n <ax-check-box class=\"axp-entity-card__select-checkbox\" [value]=\"selected()\" (onValueChanged)=\"onSelectionCheckboxChange($event)\" (click)=\"onSelectionCheckboxClick($event)\" />\n }\n <!-- ----- Row actions menu when the card is not in selection mode ----- -->\n @else if (secondaryActions().length) {\n <ax-button [look]=\"'blank'\" [color]=\"'default'\" class=\"ax-sm\" (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 <!-- ----- Divider before this overflow action ----- -->\n <ax-divider />\n }\n <ax-button-item [text]=\"(item.title | translate | async)!\" [color]=\"item.color\" [disabled]=\"item.disabled\" (onClick)=\"onSecondaryActionClick(item, $event)\">\n @if (item.icon) {\n <!-- ----- Overflow action 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 <!-- ----- Close when hosted as a lookup / detail popover ----- -->\n @if (showClose()) {\n <ax-button\n class=\"axp-entity-card__close ax-sm\"\n [look]=\"'blank'\"\n [color]=\"'default'\"\n [iconOnly]=\"true\"\n [attr.title]=\"'@general:actions.close.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.close.title' | translate | async\"\n (onClick)=\"onCloseClick($event)\"\n >\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-button>\n }\n </div>\n }\n </div>\n\n @if (hasLabeledBody()) {\n <!-- ----- Divider between unlabeled identity header and labeled body facts ----- -->\n <div class=\"axp-entity-card__divider\"></div>\n <div class=\"axp-entity-card__body\">\n <div class=\"axp-entity-card__fields\">\n @for (field of previewFields(); track field.name) {\n <div class=\"axp-entity-card__field-row\" [ngClass]=\"fieldStylingClass(field.name)\">\n <span class=\"axp-entity-card__field-label\">\n @if (resolveFieldIcon(field); as icon) {\n <!-- ----- Field icon from lookup entity or widget definition ----- -->\n <i class=\"axp-entity-card__field-icon {{ icon }}\" aria-hidden=\"true\"></i>\n }\n {{ field.title | translate | async }}\n </span>\n <div class=\"axp-entity-card__field-value\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n </div>\n }\n <!--------------------------------------------------------------->\n @if (extraFields().length) {\n <!-- ----- Extra fields stay mounted; collapse hides them without a body fade ----- -->\n <div class=\"axp-entity-card__extra\" [class.axp-entity-card__extra--collapsed]=\"!extraExpanded()\">\n @for (field of extraFields(); track field.name) {\n <div class=\"axp-entity-card__field-row\" [ngClass]=\"fieldStylingClass(field.name)\">\n <span class=\"axp-entity-card__field-label\">\n @if (resolveFieldIcon(field); as icon) {\n <!-- ----- Field icon from lookup entity or widget definition ----- -->\n <i class=\"axp-entity-card__field-icon {{ icon }}\" aria-hidden=\"true\"></i>\n }\n {{ field.title | translate | async }}\n </span>\n <div class=\"axp-entity-card__field-value\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n @if (showInlineMore()) {\n <!-- ----- Quiet More/Less under the fields when the card has no action footer ----- -->\n <button type=\"button\" class=\"axp-entity-card__more axp-entity-card__more--inline\" [attr.aria-expanded]=\"extraExpanded()\" (click)=\"onToggleExtra($event)\">\n <span>\n {{ (extraExpanded() ? '@general:terms.interface.less-card' : '@general:terms.interface.more-card') | translate | async }}\n </span>\n <i class=\"fa-light\" [class.fa-chevron-down]=\"!extraExpanded()\" [class.fa-chevron-up]=\"extraExpanded()\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n @if (hasCardFooter()) {\n <!-- ----- One footer row: optional More on the left, primary actions on the right ----- -->\n <footer class=\"axp-entity-card__footer\">\n <!-- ----- More/Less shares the footer with the action button ----- -->\n @if (showFooterMore()) {\n <button type=\"button\" class=\"axp-entity-card__more axp-entity-card__more--footer\" [attr.aria-expanded]=\"extraExpanded()\" (click)=\"onToggleExtra($event)\">\n <span>\n {{ (extraExpanded() ? '@general:terms.interface.less-card' : '@general:terms.interface.more-card') | translate | async }}\n </span>\n <i class=\"fa-light\" [class.fa-chevron-down]=\"!extraExpanded()\" [class.fa-chevron-up]=\"extraExpanded()\" aria-hidden=\"true\"></i>\n </button>\n }\n <div class=\"axp-entity-card__footer-actions\">\n @for (action of primaryActions(); track $index) {\n <ax-button\n class=\"axp-entity-card__primary-action ax-sm\"\n [look]=\"primaryActionLook()\"\n [color]=\"action.color\"\n [disabled]=\"action.disabled\"\n [text]=\"(action.title | translate | async)!\"\n (onClick)=\"onPrimaryActionClick(action.name, $event)\"\n >\n @if (action.icon) {\n <!-- ----- Primary action icon ----- -->\n <ax-prefix>\n <i class=\"fa-light {{ action.icon }}\"></i>\n </ax-prefix>\n }\n </ax-button>\n }\n </div>\n </footer>\n }\n</article>\n", styles: ["@layer properties;:host{display:block;width:100%;min-width:0px}:host.axp-entity-card-host--fill{display:flex;width:100%;min-width:0;flex:1 1 auto;flex-direction:column}:host.axp-entity-card-host--elevated{border-radius:var(--radius-md, .375rem);box-shadow:0 8px 16px #00000029,0 24px 48px #00000038,0 48px 96px #00000047}.axp-entity-card{--axp-entity-card-surface: rgb(var(--ax-sys-color-lightest-surface));--axp-entity-card-border: rgb(var(--ax-sys-color-border-light-surface));--axp-entity-card-gutter: 1rem;position:relative;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);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));background-color:var(--axp-entity-card-surface);border-color:var(--axp-entity-card-border)}.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.primary{--axp-entity-card-surface: rgb(var(--ax-sys-color-primary-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-primary-lightest-surface))}.axp-entity-card.secondary{--axp-entity-card-surface: rgb(var(--ax-sys-color-secondary-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-secondary-lightest-surface))}.axp-entity-card.success{--axp-entity-card-surface: rgb(var(--ax-sys-color-success-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-success-lightest-surface))}.axp-entity-card.warning{--axp-entity-card-surface: rgb(var(--ax-sys-color-warning-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-warning-lightest-surface))}.axp-entity-card.danger{--axp-entity-card-surface: rgb(var(--ax-sys-color-danger-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-danger-lightest-surface))}.axp-entity-card.accent1{--axp-entity-card-surface: rgb(var(--ax-sys-color-accent1-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-accent1-lightest-surface))}.axp-entity-card.accent2{--axp-entity-card-surface: rgb(var(--ax-sys-color-accent2-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-accent2-lightest-surface))}.axp-entity-card.accent3{--axp-entity-card-surface: rgb(var(--ax-sys-color-accent3-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-accent3-lightest-surface))}.axp-entity-card.primary,.axp-entity-card.secondary,.axp-entity-card.success,.axp-entity-card.warning,.axp-entity-card.danger,.axp-entity-card.accent1,.axp-entity-card.accent2,.axp-entity-card.accent3{background-color:var(--axp-entity-card-surface)}:is(.axp-entity-card.primary,.axp-entity-card.secondary,.axp-entity-card.success,.axp-entity-card.warning,.axp-entity-card.danger,.axp-entity-card.accent1,.axp-entity-card.accent2,.axp-entity-card.accent3) .axp-entity-card__footer{background-color:transparent}.axp-entity-card:not(.axp-entity-card--static){cursor:pointer}.axp-entity-card.axp-entity-card--static{cursor:default}.axp-entity-card.axp-entity-card--elevated{--axp-entity-card-surface: rgb(var(--ax-sys-color-lightest-surface));background-color:rgb(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 0 #0000;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.axp-entity-card--elevated:hover{--tw-shadow: 0 0 #0000;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.axp-entity-card--elevated .axp-entity-card__footer{background-color:rgb(var(--ax-sys-color-lightest-surface))}.axp-entity-card.axp-entity-card--embedded{border-radius:0;border-style:var(--tw-border-style);border-width:0px;--tw-shadow: 0 0 #0000;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-surface: transparent;background-color:transparent}.axp-entity-card.axp-entity-card--embedded:hover{--tw-shadow: 0 0 #0000;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.axp-entity-card--embedded .axp-entity-card__identity{padding-inline:0px;padding-block:0px}.axp-entity-card.axp-entity-card--embedded .axp-entity-card__fields{padding-inline:0px;padding-top:calc(var(--spacing, .25rem) * 2);padding-bottom:0}.axp-entity-card.axp-entity-card--embedded .axp-entity-card__divider{margin-inline:0px}.axp-entity-card .axp-entity-card__identity{display:flex;align-items:flex-start;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__identity-main{display:flex;min-width:0px;flex:1;align-items:flex-start;gap:calc(var(--spacing, .25rem) * 3)}.axp-entity-card .axp-entity-card__avatar{flex-shrink:0}.axp-entity-card .axp-entity-card__logo{flex-shrink:0;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-light-surface));background-color:rgba(var(--ax-sys-color-surface))}.axp-entity-card .axp-entity-card__logo img{width:100%;height:100%;object-fit:contain}.axp-entity-card .axp-entity-card__qr{display:flex;flex-shrink:0;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-light-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__qr axp-widget-column-cell{display:block;max-width:100%}.axp-entity-card .axp-entity-card__identity-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;flex-wrap:wrap;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__identity-actions{display:flex;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__close{margin-inline-end:calc(var(--spacing, .25rem) * -1);margin-top:calc(var(--spacing, .25rem) * -.5)}.axp-entity-card .axp-entity-card__content{position:relative;flex:1}.axp-entity-card .axp-entity-card__more{display:inline-flex;min-height:calc(var(--spacing, .25rem) * 8);flex-shrink:0;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:var(--spacing, .25rem);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-on-lightest-surface))}.axp-entity-card .axp-entity-card__more span,.axp-entity-card .axp-entity-card__more i{pointer-events:none}.axp-entity-card .axp-entity-card__more i{font-size:10px;--tw-leading: 1;line-height:1}.axp-entity-card .axp-entity-card__more:hover,.axp-entity-card .axp-entity-card__more:focus-visible{color:rgba(var(--ax-sys-color-on-surface))}.axp-entity-card .axp-entity-card__more: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__more--footer{margin-block:calc(var(--spacing, .25rem) * -2.5);margin-inline-start:calc(var(--spacing, .25rem) * -1);min-height:calc(var(--spacing, .25rem) * 10);align-self:stretch;padding-inline:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__more--inline{margin-inline:var(--axp-entity-card-gutter);margin-top:calc(var(--spacing, .25rem) * .5);margin-bottom:calc(var(--spacing, .25rem) * 2);padding-inline:var(--spacing, .25rem);padding-block:calc(var(--spacing, .25rem) * 2)}.axp-entity-card.axp-entity-card--expanded .axp-entity-card__more{color:rgba(var(--ax-sys-color-on-surface))}.axp-entity-card .axp-entity-card__title{min-width:0px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: var(--leading-relaxed, 1.625);line-height:var(--leading-relaxed, 1.625);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-entity-card .axp-entity-card__icon{flex-shrink:0;font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));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-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);opacity:65%}.axp-entity-card .axp-entity-card__facts{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2);padding-bottom:calc(var(--spacing, .25rem) * 3);padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__facts--inline{flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:calc(var(--spacing, .25rem) * 4);row-gap:var(--spacing, .25rem);padding-inline:0px;padding-block:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__fact{min-width:0px;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))}.axp-entity-card .axp-entity-card__fact axp-widget-column-cell{display:block;max-width:100%}.axp-entity-card .axp-entity-card__divider{margin-inline:var(--axp-entity-card-gutter);border-top:1px solid var(--axp-entity-card-border)}.axp-entity-card .axp-entity-card__body{position:relative;overflow:hidden}.axp-entity-card .axp-entity-card__extra{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__extra--collapsed{display:none}.axp-entity-card .axp-entity-card__fields{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 3);padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__field-row.primary,.axp-entity-card .axp-entity-card__field-row.secondary,.axp-entity-card .axp-entity-card__field-row.success,.axp-entity-card .axp-entity-card__field-row.warning,.axp-entity-card .axp-entity-card__field-row.danger,.axp-entity-card .axp-entity-card__field-row.accent1,.axp-entity-card .axp-entity-card__field-row.accent2,.axp-entity-card .axp-entity-card__field-row.accent3{width:auto;margin-inline:calc(-1 * var(--axp-entity-card-gutter));padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__fact.primary,.axp-entity-card .axp-entity-card__header-badge.primary,.axp-entity-card .axp-entity-card__field-row.primary{--axp-entity-styling-border: var(--ax-sys-color-border-primary-lightest-surface);background-color:rgb(var(--ax-sys-color-primary-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-primary-lightest-surface))}.axp-entity-card .axp-entity-card__fact.secondary,.axp-entity-card .axp-entity-card__header-badge.secondary,.axp-entity-card .axp-entity-card__field-row.secondary{--axp-entity-styling-border: var(--ax-sys-color-border-secondary-lightest-surface);background-color:rgb(var(--ax-sys-color-secondary-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-secondary-lightest-surface))}.axp-entity-card .axp-entity-card__fact.success,.axp-entity-card .axp-entity-card__header-badge.success,.axp-entity-card .axp-entity-card__field-row.success{--axp-entity-styling-border: var(--ax-sys-color-border-success-lightest-surface);background-color:rgb(var(--ax-sys-color-success-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-success-lightest-surface))}.axp-entity-card .axp-entity-card__fact.warning,.axp-entity-card .axp-entity-card__header-badge.warning,.axp-entity-card .axp-entity-card__field-row.warning{--axp-entity-styling-border: var(--ax-sys-color-border-warning-lightest-surface);background-color:rgb(var(--ax-sys-color-warning-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-warning-lightest-surface))}.axp-entity-card .axp-entity-card__fact.danger,.axp-entity-card .axp-entity-card__header-badge.danger,.axp-entity-card .axp-entity-card__field-row.danger{--axp-entity-styling-border: var(--ax-sys-color-border-danger-lightest-surface);background-color:rgb(var(--ax-sys-color-danger-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-danger-lightest-surface))}.axp-entity-card .axp-entity-card__fact.accent1,.axp-entity-card .axp-entity-card__header-badge.accent1,.axp-entity-card .axp-entity-card__field-row.accent1{--axp-entity-styling-border: var(--ax-sys-color-border-accent1-lightest-surface);background-color:rgb(var(--ax-sys-color-accent1-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-accent1-lightest-surface))}.axp-entity-card .axp-entity-card__fact.accent2,.axp-entity-card .axp-entity-card__header-badge.accent2,.axp-entity-card .axp-entity-card__field-row.accent2{--axp-entity-styling-border: var(--ax-sys-color-border-accent2-lightest-surface);background-color:rgb(var(--ax-sys-color-accent2-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-accent2-lightest-surface))}.axp-entity-card .axp-entity-card__fact.accent3,.axp-entity-card .axp-entity-card__header-badge.accent3,.axp-entity-card .axp-entity-card__field-row.accent3{--axp-entity-styling-border: var(--ax-sys-color-border-accent3-lightest-surface);background-color:rgb(var(--ax-sys-color-accent3-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-accent3-lightest-surface))}.axp-entity-card .axp-entity-card__fact.primary,.axp-entity-card .axp-entity-card__fact.secondary,.axp-entity-card .axp-entity-card__fact.success,.axp-entity-card .axp-entity-card__fact.warning,.axp-entity-card .axp-entity-card__fact.danger,.axp-entity-card .axp-entity-card__fact.accent1,.axp-entity-card .axp-entity-card__fact.accent2,.axp-entity-card .axp-entity-card__fact.accent3,.axp-entity-card .axp-entity-card__header-badge.primary,.axp-entity-card .axp-entity-card__header-badge.secondary,.axp-entity-card .axp-entity-card__header-badge.success,.axp-entity-card .axp-entity-card__header-badge.warning,.axp-entity-card .axp-entity-card__header-badge.danger,.axp-entity-card .axp-entity-card__header-badge.accent1,.axp-entity-card .axp-entity-card__header-badge.accent2,.axp-entity-card .axp-entity-card__header-badge.accent3{border-radius:var(--radius-sm, .25rem);padding-inline:var(--spacing, .25rem)}.axp-entity-card .axp-entity-card__field-row{display:flex;width:100%;align-items:flex-start;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3)}.axp-entity-card .axp-entity-card__field-label{display:inline-flex;min-width:0px;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5);text-align:start;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);color:var(--color-gray-500, oklch(55.1% .027 264.364))}.axp-entity-card .axp-entity-card__field-value{margin-inline-start:auto;max-width:60%;min-width:0px;overflow:hidden;text-align:start;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);--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);overflow-wrap:break-word;color:rgba(var(--ax-sys-color-on-surface))}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;width:100%;max-width:100%;min-width:0px;overflow:hidden;text-align:start;overflow-wrap:break-word}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell *{text-align:start}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell .flex{justify-content:flex-start}.axp-entity-card .axp-entity-card__field-value :is(.truncate,.whitespace-nowrap){max-width:100%;min-width:0px;overflow-wrap:break-word;white-space:normal;overflow:visible;text-overflow:unset}:is(.axp-entity-card .axp-entity-card__field-row.primary,.axp-entity-card .axp-entity-card__field-row.secondary,.axp-entity-card .axp-entity-card__field-row.success,.axp-entity-card .axp-entity-card__field-row.warning,.axp-entity-card .axp-entity-card__field-row.danger,.axp-entity-card .axp-entity-card__field-row.accent1,.axp-entity-card .axp-entity-card__field-row.accent2,.axp-entity-card .axp-entity-card__field-row.accent3) .axp-entity-card__field-label,:is(.axp-entity-card .axp-entity-card__field-row.primary,.axp-entity-card .axp-entity-card__field-row.secondary,.axp-entity-card .axp-entity-card__field-row.success,.axp-entity-card .axp-entity-card__field-row.warning,.axp-entity-card .axp-entity-card__field-row.danger,.axp-entity-card .axp-entity-card__field-row.accent1,.axp-entity-card .axp-entity-card__field-row.accent2,.axp-entity-card .axp-entity-card__field-row.accent3) .axp-entity-card__field-value{color:inherit}.axp-entity-card .axp-entity-card__field-icon{flex-shrink:0;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-gray-400, oklch(70.7% .022 261.325))}.axp-entity-card .axp-entity-card__footer{margin-top:auto;display:flex;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;padding-block:calc(var(--spacing, .25rem) * 2.5);padding-inline:var(--axp-entity-card-gutter);border-top-color:var(--axp-entity-card-border);background-color:var(--axp-entity-card-surface)}.axp-entity-card .axp-entity-card__footer-actions{margin-inline-start:auto;display:flex;min-width:0px;align-items:center;justify-content:flex-end;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__primary-action{min-width:0px}:is(.axp-entity-card.axp-entity-card--row,.axp-entity-card.axp-entity-card--compact):not(.axp-entity-card--embedded) .axp-entity-card__identity{padding-block:calc(var(--spacing, .25rem) * 2.5)}:is(.axp-entity-card.axp-entity-card--row,.axp-entity-card.axp-entity-card--compact) .axp-entity-card__title{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}:is(.axp-entity-card.axp-entity-card--row,.axp-entity-card.axp-entity-card--compact).axp-entity-card--expandable.axp-entity-card--expanded .axp-entity-card__identity{padding-bottom:calc(var(--spacing, .25rem) * 2.5)}:host.axp-entity-card-host--fill .axp-entity-card{display:flex;width:100%;min-height:0;flex:1 1 auto;flex-direction:column}@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-font-weight{syntax: \"*\"; inherits: false;}@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-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-font-weight: initial;--tw-leading: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i4.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: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i6.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "directive", type: AXPUserCardDirective, selector: "[axpUserCard]", inputs: ["axpUserCard", "axpUserCardDisabled", "axpUserCardTrigger"] }, { kind: "component", type: AXPWidgetColumnCellComponent, selector: "axp-widget-column-cell", inputs: ["node", "rowData", "caption"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8441
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityCardComponent, isStandalone: true, selector: "axp-entity-card", inputs: { entity: { classPropertyName: "entity", publicName: "entity", isSignal: true, isRequired: true, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, row: { classPropertyName: "row", publicName: "row", isSignal: true, isRequired: true, transformFunction: null }, fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null }, userStylingRules: { classPropertyName: "userStylingRules", publicName: "userStylingRules", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, embedded: { classPropertyName: "embedded", publicName: "embedded", isSignal: true, isRequired: false, transformFunction: null }, elevated: { classPropertyName: "elevated", publicName: "elevated", isSignal: true, isRequired: false, transformFunction: null }, disableLookupPopover: { classPropertyName: "disableLookupPopover", publicName: "disableLookupPopover", isSignal: true, isRequired: false, transformFunction: null }, fillHost: { classPropertyName: "fillHost", publicName: "fillHost", isSignal: true, isRequired: false, transformFunction: null }, extraExpanded: { classPropertyName: "extraExpanded", publicName: "extraExpanded", isSignal: true, isRequired: false, 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 }, showClose: { classPropertyName: "showClose", publicName: "showClose", isSignal: true, isRequired: false, transformFunction: null }, primaryActions: { classPropertyName: "primaryActions", publicName: "primaryActions", isSignal: true, isRequired: false, transformFunction: null }, primaryActionLook: { classPropertyName: "primaryActionLook", publicName: "primaryActionLook", isSignal: true, isRequired: false, transformFunction: null }, secondaryActionLoader: { classPropertyName: "secondaryActionLoader", publicName: "secondaryActionLoader", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { extraExpanded: "extraExpandedChange", selectionChange: "selectionChange", commandClick: "commandClick", closeClick: "closeClick" }, host: { properties: { "class.axp-entity-card-host--fill": "fillHost()", "class.axp-entity-card-host--elevated": "elevated()" } }, ngImport: i0, template: "<article\n class=\"axp-entity-card\"\n [ngClass]=\"recordStylingClass()\"\n [class.axp-entity-card--selected]=\"selected()\"\n [class.axp-entity-card--new]=\"showNewBadge()\"\n [class.axp-entity-card--row]=\"isRowLayout()\"\n [class.axp-entity-card--compact]=\"variant() === 'compact'\"\n [class.axp-entity-card--embedded]=\"embedded()\"\n [class.axp-entity-card--elevated]=\"elevated()\"\n [class.axp-entity-card--static]=\"!interactive()\"\n [class.axp-entity-card--with-body]=\"hasCardBody()\"\n [class.axp-entity-card--with-footer]=\"hasCardFooter()\"\n [class.axp-entity-card--expandable]=\"canShowMore()\"\n [class.axp-entity-card--expanded]=\"extraExpanded()\"\n [attr.role]=\"interactive() ? 'button' : undefined\"\n [attr.tabindex]=\"interactive() ? 0 : undefined\"\n [attr.aria-selected]=\"interactive() ? selected() : undefined\"\n (click)=\"onCardClick($event)\"\n (dblclick)=\"onCardDblClick($event)\"\n (keydown)=\"onCardKeydown($event)\"\n>\n <div class=\"axp-entity-card__content\">\n <!-- ----- Identity row: optional avatar, title, status, and actions ----- -->\n <div class=\"axp-entity-card__identity\">\n <div class=\"axp-entity-card__identity-main\">\n @if (showUserAvatar()) {\n <!-- ----- Person or user identity uses the user avatar ----- -->\n <axp-user-avatar class=\"axp-entity-card__avatar\" [size]=\"avatarSize()\" [userId]=\"userAvatarId()\" [displayName]=\"toDisplayName(titleText())\" [displayAvatar]=\"avatarSrc()\" [showPresence]=\"false\" [axpUserCard]=\"userAvatarId()\" />\n }\n <!--------------------------------------------------------------->\n @if (showIdentityImage()) {\n <!-- ----- Logo or company image for entities that store an image/logo ----- -->\n <div class=\"axp-entity-card__logo\" [style.width.px]=\"avatarSize()\" [style.height.px]=\"avatarSize()\">\n <img [src]=\"avatarSrc()\" [alt]=\"toDisplayName(titleText())\" />\n </div>\n }\n <!--------------------------------------------------------------->\n @if (identityQrField(); as field) {\n <!-- ----- QR widget occupies the identity visual slot when there is no avatar or logo ----- -->\n <div class=\"axp-entity-card__qr\" [style.width.px]=\"avatarSize()\" [style.height.px]=\"avatarSize()\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n }\n\n <div class=\"axp-entity-card__identity-text\">\n <div class=\"axp-entity-card__title-row\">\n @if (iconClass(); as icon) {\n <!-- ----- Optional header icon from the card layout ----- -->\n <i [class]=\"icon + ' axp-entity-card__icon'\" aria-hidden=\"true\"></i>\n }\n\n <h3 class=\"axp-entity-card__title\">\n {{ titleText() | translate | async }}\n </h3>\n\n @if (showNewBadge()) {\n <!-- ----- New-row highlight badge ----- -->\n <ax-badge class=\"axp-entity-card__header-badge\" [text]=\"('@acorex:dataTable.rowHighlight.new' | translate | async) || ''\" color=\"success\" />\n }\n\n @for (field of headerBadgeFields(); track field.name) {\n <!--------------------------------------------------------------->\n @if (isStatusBadgeField(field)) {\n <!-- ----- Status widget rendered in the header ----- -->\n <div class=\"axp-entity-card__header-badge\" [ngClass]=\"fieldStylingClass(field.name)\">\n <axp-widget-column-cell [node]=\"fieldHeaderBadgeNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n }\n <!-- ----- Non-status field rendered as a simple badge ----- -->\n @else if (resolveBadgeText(field)) {\n <ax-badge class=\"axp-entity-card__header-badge\" [ngClass]=\"fieldStylingClass(field.name)\" [text]=\"resolveBadgeText(field)\" [color]=\"resolveBadgeColor(field)\" />\n }\n }\n </div>\n\n @if (descriptionText()) {\n <!-- ----- Optional description under the title ----- -->\n <p class=\"axp-entity-card__description\">\n {{ descriptionText() | translate | async }}\n </p>\n }\n\n @if (headerMetaFields().length) {\n <!-- ----- Unlabeled header extra (identifier or contact) ----- -->\n <div class=\"axp-entity-card__facts axp-entity-card__facts--inline\">\n @for (field of headerMetaFields(); track field.name) {\n <div class=\"axp-entity-card__fact\" [ngClass]=\"fieldStylingClass(field.name)\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (hasIdentityActions()) {\n <!-- ----- Selection, overflow actions, or popover dismiss ----- -->\n <div class=\"axp-entity-card__identity-actions\">\n @if (showSelection()) {\n <!-- ----- Multi-select checkbox ----- -->\n <ax-check-box class=\"axp-entity-card__select-checkbox\" [value]=\"selected()\" (onValueChanged)=\"onSelectionCheckboxChange($event)\" (click)=\"onSelectionCheckboxClick($event)\" />\n }\n <!-- ----- Row actions menu when the card is not in selection mode ----- -->\n @else if (secondaryActions().length) {\n <ax-button [look]=\"'blank'\" [color]=\"'default'\" class=\"ax-sm\" (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 <!-- ----- Divider before this overflow action ----- -->\n <ax-divider />\n }\n <ax-button-item [text]=\"(item.title | translate | async)!\" [color]=\"item.color\" [disabled]=\"item.disabled\" (onClick)=\"onSecondaryActionClick(item, $event)\">\n @if (item.icon) {\n <!-- ----- Overflow action 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 <!-- ----- Close when hosted as a lookup / detail popover ----- -->\n @if (showClose()) {\n <ax-button\n class=\"axp-entity-card__close ax-sm\"\n [look]=\"'blank'\"\n [color]=\"'default'\"\n [iconOnly]=\"true\"\n [attr.title]=\"'@general:actions.close.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.close.title' | translate | async\"\n (onClick)=\"onCloseClick($event)\"\n >\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-button>\n }\n </div>\n }\n </div>\n\n @if (hasLabeledBody()) {\n <!-- ----- Divider between unlabeled identity header and labeled body facts ----- -->\n <div class=\"axp-entity-card__divider\"></div>\n <div class=\"axp-entity-card__body\">\n <div class=\"axp-entity-card__fields\">\n @for (field of previewFields(); track field.name) {\n <div class=\"axp-entity-card__field-row\" [ngClass]=\"fieldStylingClass(field.name)\">\n <span class=\"axp-entity-card__field-label\">\n @if (resolveFieldIcon(field); as icon) {\n <!-- ----- Field icon from lookup entity or widget definition ----- -->\n <i class=\"axp-entity-card__field-icon {{ icon }}\" aria-hidden=\"true\"></i>\n }\n {{ field.title | translate | async }}\n </span>\n <div class=\"axp-entity-card__field-value\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n </div>\n }\n <!--------------------------------------------------------------->\n @if (extraFields().length) {\n <!-- ----- Extra fields stay mounted; collapse hides them without a body fade ----- -->\n <div class=\"axp-entity-card__extra\" [class.axp-entity-card__extra--collapsed]=\"!extraExpanded()\">\n @for (field of extraFields(); track field.name) {\n <div class=\"axp-entity-card__field-row\" [ngClass]=\"fieldStylingClass(field.name)\">\n <span class=\"axp-entity-card__field-label\">\n @if (resolveFieldIcon(field); as icon) {\n <!-- ----- Field icon from lookup entity or widget definition ----- -->\n <i class=\"axp-entity-card__field-icon {{ icon }}\" aria-hidden=\"true\"></i>\n }\n {{ field.title | translate | async }}\n </span>\n <div class=\"axp-entity-card__field-value\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n @if (showInlineMore()) {\n <!-- ----- Quiet More/Less under the fields when the card has no action footer ----- -->\n <button type=\"button\" class=\"axp-entity-card__more axp-entity-card__more--inline\" [attr.aria-expanded]=\"extraExpanded()\" (click)=\"onToggleExtra($event)\">\n <span>\n {{ (extraExpanded() ? '@general:terms.interface.less-card' : '@general:terms.interface.more-card') | translate | async }}\n </span>\n <i class=\"fa-light\" [class.fa-chevron-down]=\"!extraExpanded()\" [class.fa-chevron-up]=\"extraExpanded()\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n @if (hasCardFooter()) {\n <!-- ----- One footer row: optional More on the left, primary actions on the right ----- -->\n <footer class=\"axp-entity-card__footer\">\n <!-- ----- More/Less shares the footer with the action button ----- -->\n @if (showFooterMore()) {\n <button type=\"button\" class=\"axp-entity-card__more axp-entity-card__more--footer\" [attr.aria-expanded]=\"extraExpanded()\" (click)=\"onToggleExtra($event)\">\n <span>\n {{ (extraExpanded() ? '@general:terms.interface.less-card' : '@general:terms.interface.more-card') | translate | async }}\n </span>\n <i class=\"fa-light\" [class.fa-chevron-down]=\"!extraExpanded()\" [class.fa-chevron-up]=\"extraExpanded()\" aria-hidden=\"true\"></i>\n </button>\n }\n <div class=\"axp-entity-card__footer-actions\">\n @for (action of primaryActions(); track $index) {\n <ax-button\n class=\"axp-entity-card__primary-action ax-sm\"\n [look]=\"primaryActionLook()\"\n [color]=\"action.color\"\n [disabled]=\"action.disabled\"\n [text]=\"(action.title | translate | async)!\"\n (onClick)=\"onPrimaryActionClick(action.name, $event)\"\n >\n @if (action.icon) {\n <!-- ----- Primary action icon ----- -->\n <ax-prefix>\n <i class=\"fa-light {{ action.icon }}\"></i>\n </ax-prefix>\n }\n </ax-button>\n }\n </div>\n </footer>\n }\n</article>\n", styles: ["@layer properties;:host{display:block;width:100%;min-width:0px}:host.axp-entity-card-host--fill{display:flex;width:100%;min-width:0;flex:1 1 auto;flex-direction:column}:host.axp-entity-card-host--elevated{border-radius:var(--radius-md, .375rem);box-shadow:0 8px 16px #00000029,0 24px 48px #00000038,0 48px 96px #00000047}.axp-entity-card{--axp-entity-card-surface: rgb(var(--ax-sys-color-lightest-surface));--axp-entity-card-border: rgb(var(--ax-sys-color-border-light-surface));--axp-entity-card-gutter: 1rem;position:relative;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);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));background-color:var(--axp-entity-card-surface);border-color:var(--axp-entity-card-border)}.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.primary{--axp-entity-card-surface: rgb(var(--ax-sys-color-primary-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-primary-lightest-surface))}.axp-entity-card.secondary{--axp-entity-card-surface: rgb(var(--ax-sys-color-secondary-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-secondary-lightest-surface))}.axp-entity-card.success{--axp-entity-card-surface: rgb(var(--ax-sys-color-success-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-success-lightest-surface))}.axp-entity-card.warning{--axp-entity-card-surface: rgb(var(--ax-sys-color-warning-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-warning-lightest-surface))}.axp-entity-card.danger{--axp-entity-card-surface: rgb(var(--ax-sys-color-danger-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-danger-lightest-surface))}.axp-entity-card.accent1{--axp-entity-card-surface: rgb(var(--ax-sys-color-accent1-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-accent1-lightest-surface))}.axp-entity-card.accent2{--axp-entity-card-surface: rgb(var(--ax-sys-color-accent2-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-accent2-lightest-surface))}.axp-entity-card.accent3{--axp-entity-card-surface: rgb(var(--ax-sys-color-accent3-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-accent3-lightest-surface))}.axp-entity-card.primary,.axp-entity-card.secondary,.axp-entity-card.success,.axp-entity-card.warning,.axp-entity-card.danger,.axp-entity-card.accent1,.axp-entity-card.accent2,.axp-entity-card.accent3{background-color:var(--axp-entity-card-surface)}:is(.axp-entity-card.primary,.axp-entity-card.secondary,.axp-entity-card.success,.axp-entity-card.warning,.axp-entity-card.danger,.axp-entity-card.accent1,.axp-entity-card.accent2,.axp-entity-card.accent3) .axp-entity-card__footer{background-color:transparent}.axp-entity-card:not(.axp-entity-card--static){cursor:pointer}.axp-entity-card.axp-entity-card--static{cursor:default}.axp-entity-card.axp-entity-card--elevated{--axp-entity-card-surface: rgb(var(--ax-sys-color-lightest-surface));background-color:rgb(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 0 #0000;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.axp-entity-card--elevated:hover{--tw-shadow: 0 0 #0000;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.axp-entity-card--elevated .axp-entity-card__footer{background-color:rgb(var(--ax-sys-color-lightest-surface))}.axp-entity-card.axp-entity-card--embedded{border-radius:0;border-style:var(--tw-border-style);border-width:0px;--tw-shadow: 0 0 #0000;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-surface: transparent;background-color:transparent}.axp-entity-card.axp-entity-card--embedded:hover{--tw-shadow: 0 0 #0000;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.axp-entity-card--embedded .axp-entity-card__identity{padding-inline:0px;padding-block:0px}.axp-entity-card.axp-entity-card--embedded .axp-entity-card__fields{padding-inline:0px;padding-top:calc(var(--spacing, .25rem) * 2);padding-bottom:0}.axp-entity-card.axp-entity-card--embedded .axp-entity-card__divider{margin-inline:0px}.axp-entity-card .axp-entity-card__identity{display:flex;align-items:flex-start;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__identity-main{display:flex;min-width:0px;flex:1;align-items:flex-start;gap:calc(var(--spacing, .25rem) * 3)}.axp-entity-card .axp-entity-card__avatar{flex-shrink:0}.axp-entity-card .axp-entity-card__logo{flex-shrink:0;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-light-surface));background-color:rgba(var(--ax-sys-color-surface))}.axp-entity-card .axp-entity-card__logo img{width:100%;height:100%;object-fit:contain}.axp-entity-card .axp-entity-card__qr{display:flex;flex-shrink:0;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-light-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__qr axp-widget-column-cell{display:block;max-width:100%}.axp-entity-card .axp-entity-card__identity-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;flex-wrap:wrap;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__identity-actions{display:flex;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__close{margin-inline-end:calc(var(--spacing, .25rem) * -1);margin-top:calc(var(--spacing, .25rem) * -.5)}.axp-entity-card .axp-entity-card__content{position:relative;flex:1}.axp-entity-card .axp-entity-card__more{display:inline-flex;min-height:calc(var(--spacing, .25rem) * 8);flex-shrink:0;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:var(--spacing, .25rem);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-on-lightest-surface))}.axp-entity-card .axp-entity-card__more span,.axp-entity-card .axp-entity-card__more i{pointer-events:none}.axp-entity-card .axp-entity-card__more i{font-size:10px;--tw-leading: 1;line-height:1}.axp-entity-card .axp-entity-card__more:hover,.axp-entity-card .axp-entity-card__more:focus-visible{color:rgba(var(--ax-sys-color-on-surface))}.axp-entity-card .axp-entity-card__more: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__more--footer{margin-block:calc(var(--spacing, .25rem) * -2.5);margin-inline-start:calc(var(--spacing, .25rem) * -1);min-height:calc(var(--spacing, .25rem) * 10);align-self:stretch;padding-inline:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__more--inline{margin-inline:var(--axp-entity-card-gutter);margin-top:calc(var(--spacing, .25rem) * .5);margin-bottom:calc(var(--spacing, .25rem) * 2);padding-inline:var(--spacing, .25rem);padding-block:calc(var(--spacing, .25rem) * 2)}.axp-entity-card.axp-entity-card--expanded .axp-entity-card__more{color:rgba(var(--ax-sys-color-on-surface))}.axp-entity-card .axp-entity-card__title{min-width:0px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: var(--leading-relaxed, 1.625);line-height:var(--leading-relaxed, 1.625);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-entity-card .axp-entity-card__icon{flex-shrink:0;font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));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-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);opacity:65%}.axp-entity-card .axp-entity-card__facts{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2);padding-bottom:calc(var(--spacing, .25rem) * 3);padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__facts--inline{flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:calc(var(--spacing, .25rem) * 4);row-gap:var(--spacing, .25rem);padding-inline:0px;padding-block:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__fact{min-width:0px;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))}.axp-entity-card .axp-entity-card__fact axp-widget-column-cell{display:block;max-width:100%}.axp-entity-card .axp-entity-card__divider{margin-inline:var(--axp-entity-card-gutter);border-top:1px solid var(--axp-entity-card-border)}.axp-entity-card .axp-entity-card__body{position:relative;overflow:hidden}.axp-entity-card .axp-entity-card__extra{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__extra--collapsed{display:none}.axp-entity-card .axp-entity-card__fields{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 3);padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__field-row.primary,.axp-entity-card .axp-entity-card__field-row.secondary,.axp-entity-card .axp-entity-card__field-row.success,.axp-entity-card .axp-entity-card__field-row.warning,.axp-entity-card .axp-entity-card__field-row.danger,.axp-entity-card .axp-entity-card__field-row.accent1,.axp-entity-card .axp-entity-card__field-row.accent2,.axp-entity-card .axp-entity-card__field-row.accent3{width:auto;margin-inline:calc(-1 * var(--axp-entity-card-gutter));padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__fact.primary,.axp-entity-card .axp-entity-card__header-badge.primary,.axp-entity-card .axp-entity-card__field-row.primary{--axp-entity-styling-border: var(--ax-sys-color-border-primary-lightest-surface);background-color:rgb(var(--ax-sys-color-primary-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-primary-lightest-surface))}.axp-entity-card .axp-entity-card__fact.secondary,.axp-entity-card .axp-entity-card__header-badge.secondary,.axp-entity-card .axp-entity-card__field-row.secondary{--axp-entity-styling-border: var(--ax-sys-color-border-secondary-lightest-surface);background-color:rgb(var(--ax-sys-color-secondary-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-secondary-lightest-surface))}.axp-entity-card .axp-entity-card__fact.success,.axp-entity-card .axp-entity-card__header-badge.success,.axp-entity-card .axp-entity-card__field-row.success{--axp-entity-styling-border: var(--ax-sys-color-border-success-lightest-surface);background-color:rgb(var(--ax-sys-color-success-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-success-lightest-surface))}.axp-entity-card .axp-entity-card__fact.warning,.axp-entity-card .axp-entity-card__header-badge.warning,.axp-entity-card .axp-entity-card__field-row.warning{--axp-entity-styling-border: var(--ax-sys-color-border-warning-lightest-surface);background-color:rgb(var(--ax-sys-color-warning-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-warning-lightest-surface))}.axp-entity-card .axp-entity-card__fact.danger,.axp-entity-card .axp-entity-card__header-badge.danger,.axp-entity-card .axp-entity-card__field-row.danger{--axp-entity-styling-border: var(--ax-sys-color-border-danger-lightest-surface);background-color:rgb(var(--ax-sys-color-danger-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-danger-lightest-surface))}.axp-entity-card .axp-entity-card__fact.accent1,.axp-entity-card .axp-entity-card__header-badge.accent1,.axp-entity-card .axp-entity-card__field-row.accent1{--axp-entity-styling-border: var(--ax-sys-color-border-accent1-lightest-surface);background-color:rgb(var(--ax-sys-color-accent1-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-accent1-lightest-surface))}.axp-entity-card .axp-entity-card__fact.accent2,.axp-entity-card .axp-entity-card__header-badge.accent2,.axp-entity-card .axp-entity-card__field-row.accent2{--axp-entity-styling-border: var(--ax-sys-color-border-accent2-lightest-surface);background-color:rgb(var(--ax-sys-color-accent2-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-accent2-lightest-surface))}.axp-entity-card .axp-entity-card__fact.accent3,.axp-entity-card .axp-entity-card__header-badge.accent3,.axp-entity-card .axp-entity-card__field-row.accent3{--axp-entity-styling-border: var(--ax-sys-color-border-accent3-lightest-surface);background-color:rgb(var(--ax-sys-color-accent3-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-accent3-lightest-surface))}.axp-entity-card .axp-entity-card__fact.primary,.axp-entity-card .axp-entity-card__fact.secondary,.axp-entity-card .axp-entity-card__fact.success,.axp-entity-card .axp-entity-card__fact.warning,.axp-entity-card .axp-entity-card__fact.danger,.axp-entity-card .axp-entity-card__fact.accent1,.axp-entity-card .axp-entity-card__fact.accent2,.axp-entity-card .axp-entity-card__fact.accent3,.axp-entity-card .axp-entity-card__header-badge.primary,.axp-entity-card .axp-entity-card__header-badge.secondary,.axp-entity-card .axp-entity-card__header-badge.success,.axp-entity-card .axp-entity-card__header-badge.warning,.axp-entity-card .axp-entity-card__header-badge.danger,.axp-entity-card .axp-entity-card__header-badge.accent1,.axp-entity-card .axp-entity-card__header-badge.accent2,.axp-entity-card .axp-entity-card__header-badge.accent3{border-radius:var(--radius-sm, .25rem);padding-inline:var(--spacing, .25rem)}.axp-entity-card .axp-entity-card__field-row{display:flex;width:100%;align-items:flex-start;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3)}.axp-entity-card .axp-entity-card__field-label{display:inline-flex;min-width:0px;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5);text-align:start;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);color:var(--color-gray-500, oklch(55.1% .027 264.364))}.axp-entity-card .axp-entity-card__field-value{margin-inline-start:auto;max-width:60%;min-width:0px;overflow:hidden;text-align:start;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);--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);overflow-wrap:break-word;color:rgba(var(--ax-sys-color-on-surface))}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;width:100%;max-width:100%;min-width:0px;overflow:hidden;text-align:start;overflow-wrap:break-word}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell *{text-align:start}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell .flex{justify-content:flex-start}.axp-entity-card .axp-entity-card__field-value :is(.truncate,.whitespace-nowrap){max-width:100%;min-width:0px;overflow-wrap:break-word;white-space:normal;overflow:visible;text-overflow:unset}:is(.axp-entity-card .axp-entity-card__field-row.primary,.axp-entity-card .axp-entity-card__field-row.secondary,.axp-entity-card .axp-entity-card__field-row.success,.axp-entity-card .axp-entity-card__field-row.warning,.axp-entity-card .axp-entity-card__field-row.danger,.axp-entity-card .axp-entity-card__field-row.accent1,.axp-entity-card .axp-entity-card__field-row.accent2,.axp-entity-card .axp-entity-card__field-row.accent3) .axp-entity-card__field-label,:is(.axp-entity-card .axp-entity-card__field-row.primary,.axp-entity-card .axp-entity-card__field-row.secondary,.axp-entity-card .axp-entity-card__field-row.success,.axp-entity-card .axp-entity-card__field-row.warning,.axp-entity-card .axp-entity-card__field-row.danger,.axp-entity-card .axp-entity-card__field-row.accent1,.axp-entity-card .axp-entity-card__field-row.accent2,.axp-entity-card .axp-entity-card__field-row.accent3) .axp-entity-card__field-value{color:inherit}.axp-entity-card .axp-entity-card__field-icon{flex-shrink:0;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-gray-400, oklch(70.7% .022 261.325))}.axp-entity-card .axp-entity-card__footer{margin-top:auto;display:flex;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;padding-block:calc(var(--spacing, .25rem) * 2.5);padding-inline:var(--axp-entity-card-gutter);border-top-color:var(--axp-entity-card-border);background-color:var(--axp-entity-card-surface)}.axp-entity-card .axp-entity-card__footer-actions{margin-inline-start:auto;display:flex;min-width:0px;align-items:center;justify-content:flex-end;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__primary-action{min-width:0px}:is(.axp-entity-card.axp-entity-card--row,.axp-entity-card.axp-entity-card--compact):not(.axp-entity-card--embedded) .axp-entity-card__identity{padding-block:calc(var(--spacing, .25rem) * 2.5)}:is(.axp-entity-card.axp-entity-card--row,.axp-entity-card.axp-entity-card--compact) .axp-entity-card__title{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}:is(.axp-entity-card.axp-entity-card--row,.axp-entity-card.axp-entity-card--compact).axp-entity-card--expandable.axp-entity-card--expanded .axp-entity-card__identity{padding-bottom:calc(var(--spacing, .25rem) * 2.5)}:host.axp-entity-card-host--fill .axp-entity-card{display:flex;width:100%;min-height:0;flex:1 1 auto;flex-direction:column}@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-font-weight{syntax: \"*\"; inherits: false;}@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-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-font-weight: initial;--tw-leading: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i4$1.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: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i6.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "directive", type: AXPUserCardDirective, selector: "[axpUserCard]", inputs: ["axpUserCard", "axpUserCardDisabled", "axpUserCardTrigger"] }, { kind: "component", type: AXPWidgetColumnCellComponent, selector: "axp-widget-column-cell", inputs: ["node", "rowData", "caption"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8235
8442
|
}
|
|
8236
8443
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityCardComponent, decorators: [{
|
|
8237
8444
|
type: Component,
|
|
@@ -8252,6 +8459,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
8252
8459
|
], template: "<article\n class=\"axp-entity-card\"\n [ngClass]=\"recordStylingClass()\"\n [class.axp-entity-card--selected]=\"selected()\"\n [class.axp-entity-card--new]=\"showNewBadge()\"\n [class.axp-entity-card--row]=\"isRowLayout()\"\n [class.axp-entity-card--compact]=\"variant() === 'compact'\"\n [class.axp-entity-card--embedded]=\"embedded()\"\n [class.axp-entity-card--elevated]=\"elevated()\"\n [class.axp-entity-card--static]=\"!interactive()\"\n [class.axp-entity-card--with-body]=\"hasCardBody()\"\n [class.axp-entity-card--with-footer]=\"hasCardFooter()\"\n [class.axp-entity-card--expandable]=\"canShowMore()\"\n [class.axp-entity-card--expanded]=\"extraExpanded()\"\n [attr.role]=\"interactive() ? 'button' : undefined\"\n [attr.tabindex]=\"interactive() ? 0 : undefined\"\n [attr.aria-selected]=\"interactive() ? selected() : undefined\"\n (click)=\"onCardClick($event)\"\n (dblclick)=\"onCardDblClick($event)\"\n (keydown)=\"onCardKeydown($event)\"\n>\n <div class=\"axp-entity-card__content\">\n <!-- ----- Identity row: optional avatar, title, status, and actions ----- -->\n <div class=\"axp-entity-card__identity\">\n <div class=\"axp-entity-card__identity-main\">\n @if (showUserAvatar()) {\n <!-- ----- Person or user identity uses the user avatar ----- -->\n <axp-user-avatar class=\"axp-entity-card__avatar\" [size]=\"avatarSize()\" [userId]=\"userAvatarId()\" [displayName]=\"toDisplayName(titleText())\" [displayAvatar]=\"avatarSrc()\" [showPresence]=\"false\" [axpUserCard]=\"userAvatarId()\" />\n }\n <!--------------------------------------------------------------->\n @if (showIdentityImage()) {\n <!-- ----- Logo or company image for entities that store an image/logo ----- -->\n <div class=\"axp-entity-card__logo\" [style.width.px]=\"avatarSize()\" [style.height.px]=\"avatarSize()\">\n <img [src]=\"avatarSrc()\" [alt]=\"toDisplayName(titleText())\" />\n </div>\n }\n <!--------------------------------------------------------------->\n @if (identityQrField(); as field) {\n <!-- ----- QR widget occupies the identity visual slot when there is no avatar or logo ----- -->\n <div class=\"axp-entity-card__qr\" [style.width.px]=\"avatarSize()\" [style.height.px]=\"avatarSize()\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n }\n\n <div class=\"axp-entity-card__identity-text\">\n <div class=\"axp-entity-card__title-row\">\n @if (iconClass(); as icon) {\n <!-- ----- Optional header icon from the card layout ----- -->\n <i [class]=\"icon + ' axp-entity-card__icon'\" aria-hidden=\"true\"></i>\n }\n\n <h3 class=\"axp-entity-card__title\">\n {{ titleText() | translate | async }}\n </h3>\n\n @if (showNewBadge()) {\n <!-- ----- New-row highlight badge ----- -->\n <ax-badge class=\"axp-entity-card__header-badge\" [text]=\"('@acorex:dataTable.rowHighlight.new' | translate | async) || ''\" color=\"success\" />\n }\n\n @for (field of headerBadgeFields(); track field.name) {\n <!--------------------------------------------------------------->\n @if (isStatusBadgeField(field)) {\n <!-- ----- Status widget rendered in the header ----- -->\n <div class=\"axp-entity-card__header-badge\" [ngClass]=\"fieldStylingClass(field.name)\">\n <axp-widget-column-cell [node]=\"fieldHeaderBadgeNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n }\n <!-- ----- Non-status field rendered as a simple badge ----- -->\n @else if (resolveBadgeText(field)) {\n <ax-badge class=\"axp-entity-card__header-badge\" [ngClass]=\"fieldStylingClass(field.name)\" [text]=\"resolveBadgeText(field)\" [color]=\"resolveBadgeColor(field)\" />\n }\n }\n </div>\n\n @if (descriptionText()) {\n <!-- ----- Optional description under the title ----- -->\n <p class=\"axp-entity-card__description\">\n {{ descriptionText() | translate | async }}\n </p>\n }\n\n @if (headerMetaFields().length) {\n <!-- ----- Unlabeled header extra (identifier or contact) ----- -->\n <div class=\"axp-entity-card__facts axp-entity-card__facts--inline\">\n @for (field of headerMetaFields(); track field.name) {\n <div class=\"axp-entity-card__fact\" [ngClass]=\"fieldStylingClass(field.name)\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (hasIdentityActions()) {\n <!-- ----- Selection, overflow actions, or popover dismiss ----- -->\n <div class=\"axp-entity-card__identity-actions\">\n @if (showSelection()) {\n <!-- ----- Multi-select checkbox ----- -->\n <ax-check-box class=\"axp-entity-card__select-checkbox\" [value]=\"selected()\" (onValueChanged)=\"onSelectionCheckboxChange($event)\" (click)=\"onSelectionCheckboxClick($event)\" />\n }\n <!-- ----- Row actions menu when the card is not in selection mode ----- -->\n @else if (secondaryActions().length) {\n <ax-button [look]=\"'blank'\" [color]=\"'default'\" class=\"ax-sm\" (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 <!-- ----- Divider before this overflow action ----- -->\n <ax-divider />\n }\n <ax-button-item [text]=\"(item.title | translate | async)!\" [color]=\"item.color\" [disabled]=\"item.disabled\" (onClick)=\"onSecondaryActionClick(item, $event)\">\n @if (item.icon) {\n <!-- ----- Overflow action 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 <!-- ----- Close when hosted as a lookup / detail popover ----- -->\n @if (showClose()) {\n <ax-button\n class=\"axp-entity-card__close ax-sm\"\n [look]=\"'blank'\"\n [color]=\"'default'\"\n [iconOnly]=\"true\"\n [attr.title]=\"'@general:actions.close.title' | translate | async\"\n [attr.aria-label]=\"'@general:actions.close.title' | translate | async\"\n (onClick)=\"onCloseClick($event)\"\n >\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-button>\n }\n </div>\n }\n </div>\n\n @if (hasLabeledBody()) {\n <!-- ----- Divider between unlabeled identity header and labeled body facts ----- -->\n <div class=\"axp-entity-card__divider\"></div>\n <div class=\"axp-entity-card__body\">\n <div class=\"axp-entity-card__fields\">\n @for (field of previewFields(); track field.name) {\n <div class=\"axp-entity-card__field-row\" [ngClass]=\"fieldStylingClass(field.name)\">\n <span class=\"axp-entity-card__field-label\">\n @if (resolveFieldIcon(field); as icon) {\n <!-- ----- Field icon from lookup entity or widget definition ----- -->\n <i class=\"axp-entity-card__field-icon {{ icon }}\" aria-hidden=\"true\"></i>\n }\n {{ field.title | translate | async }}\n </span>\n <div class=\"axp-entity-card__field-value\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n </div>\n }\n <!--------------------------------------------------------------->\n @if (extraFields().length) {\n <!-- ----- Extra fields stay mounted; collapse hides them without a body fade ----- -->\n <div class=\"axp-entity-card__extra\" [class.axp-entity-card__extra--collapsed]=\"!extraExpanded()\">\n @for (field of extraFields(); track field.name) {\n <div class=\"axp-entity-card__field-row\" [ngClass]=\"fieldStylingClass(field.name)\">\n <span class=\"axp-entity-card__field-label\">\n @if (resolveFieldIcon(field); as icon) {\n <!-- ----- Field icon from lookup entity or widget definition ----- -->\n <i class=\"axp-entity-card__field-icon {{ icon }}\" aria-hidden=\"true\"></i>\n }\n {{ field.title | translate | async }}\n </span>\n <div class=\"axp-entity-card__field-value\">\n <axp-widget-column-cell [node]=\"fieldColumnNode(field)\" [rowData]=\"row()\" [caption]=\"field.title\" />\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n @if (showInlineMore()) {\n <!-- ----- Quiet More/Less under the fields when the card has no action footer ----- -->\n <button type=\"button\" class=\"axp-entity-card__more axp-entity-card__more--inline\" [attr.aria-expanded]=\"extraExpanded()\" (click)=\"onToggleExtra($event)\">\n <span>\n {{ (extraExpanded() ? '@general:terms.interface.less-card' : '@general:terms.interface.more-card') | translate | async }}\n </span>\n <i class=\"fa-light\" [class.fa-chevron-down]=\"!extraExpanded()\" [class.fa-chevron-up]=\"extraExpanded()\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n @if (hasCardFooter()) {\n <!-- ----- One footer row: optional More on the left, primary actions on the right ----- -->\n <footer class=\"axp-entity-card__footer\">\n <!-- ----- More/Less shares the footer with the action button ----- -->\n @if (showFooterMore()) {\n <button type=\"button\" class=\"axp-entity-card__more axp-entity-card__more--footer\" [attr.aria-expanded]=\"extraExpanded()\" (click)=\"onToggleExtra($event)\">\n <span>\n {{ (extraExpanded() ? '@general:terms.interface.less-card' : '@general:terms.interface.more-card') | translate | async }}\n </span>\n <i class=\"fa-light\" [class.fa-chevron-down]=\"!extraExpanded()\" [class.fa-chevron-up]=\"extraExpanded()\" aria-hidden=\"true\"></i>\n </button>\n }\n <div class=\"axp-entity-card__footer-actions\">\n @for (action of primaryActions(); track $index) {\n <ax-button\n class=\"axp-entity-card__primary-action ax-sm\"\n [look]=\"primaryActionLook()\"\n [color]=\"action.color\"\n [disabled]=\"action.disabled\"\n [text]=\"(action.title | translate | async)!\"\n (onClick)=\"onPrimaryActionClick(action.name, $event)\"\n >\n @if (action.icon) {\n <!-- ----- Primary action icon ----- -->\n <ax-prefix>\n <i class=\"fa-light {{ action.icon }}\"></i>\n </ax-prefix>\n }\n </ax-button>\n }\n </div>\n </footer>\n }\n</article>\n", styles: ["@layer properties;:host{display:block;width:100%;min-width:0px}:host.axp-entity-card-host--fill{display:flex;width:100%;min-width:0;flex:1 1 auto;flex-direction:column}:host.axp-entity-card-host--elevated{border-radius:var(--radius-md, .375rem);box-shadow:0 8px 16px #00000029,0 24px 48px #00000038,0 48px 96px #00000047}.axp-entity-card{--axp-entity-card-surface: rgb(var(--ax-sys-color-lightest-surface));--axp-entity-card-border: rgb(var(--ax-sys-color-border-light-surface));--axp-entity-card-gutter: 1rem;position:relative;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);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));background-color:var(--axp-entity-card-surface);border-color:var(--axp-entity-card-border)}.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.primary{--axp-entity-card-surface: rgb(var(--ax-sys-color-primary-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-primary-lightest-surface))}.axp-entity-card.secondary{--axp-entity-card-surface: rgb(var(--ax-sys-color-secondary-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-secondary-lightest-surface))}.axp-entity-card.success{--axp-entity-card-surface: rgb(var(--ax-sys-color-success-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-success-lightest-surface))}.axp-entity-card.warning{--axp-entity-card-surface: rgb(var(--ax-sys-color-warning-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-warning-lightest-surface))}.axp-entity-card.danger{--axp-entity-card-surface: rgb(var(--ax-sys-color-danger-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-danger-lightest-surface))}.axp-entity-card.accent1{--axp-entity-card-surface: rgb(var(--ax-sys-color-accent1-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-accent1-lightest-surface))}.axp-entity-card.accent2{--axp-entity-card-surface: rgb(var(--ax-sys-color-accent2-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-accent2-lightest-surface))}.axp-entity-card.accent3{--axp-entity-card-surface: rgb(var(--ax-sys-color-accent3-50));--axp-entity-card-border: rgb(var(--ax-sys-color-border-accent3-lightest-surface))}.axp-entity-card.primary,.axp-entity-card.secondary,.axp-entity-card.success,.axp-entity-card.warning,.axp-entity-card.danger,.axp-entity-card.accent1,.axp-entity-card.accent2,.axp-entity-card.accent3{background-color:var(--axp-entity-card-surface)}:is(.axp-entity-card.primary,.axp-entity-card.secondary,.axp-entity-card.success,.axp-entity-card.warning,.axp-entity-card.danger,.axp-entity-card.accent1,.axp-entity-card.accent2,.axp-entity-card.accent3) .axp-entity-card__footer{background-color:transparent}.axp-entity-card:not(.axp-entity-card--static){cursor:pointer}.axp-entity-card.axp-entity-card--static{cursor:default}.axp-entity-card.axp-entity-card--elevated{--axp-entity-card-surface: rgb(var(--ax-sys-color-lightest-surface));background-color:rgb(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 0 #0000;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.axp-entity-card--elevated:hover{--tw-shadow: 0 0 #0000;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.axp-entity-card--elevated .axp-entity-card__footer{background-color:rgb(var(--ax-sys-color-lightest-surface))}.axp-entity-card.axp-entity-card--embedded{border-radius:0;border-style:var(--tw-border-style);border-width:0px;--tw-shadow: 0 0 #0000;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-surface: transparent;background-color:transparent}.axp-entity-card.axp-entity-card--embedded:hover{--tw-shadow: 0 0 #0000;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.axp-entity-card--embedded .axp-entity-card__identity{padding-inline:0px;padding-block:0px}.axp-entity-card.axp-entity-card--embedded .axp-entity-card__fields{padding-inline:0px;padding-top:calc(var(--spacing, .25rem) * 2);padding-bottom:0}.axp-entity-card.axp-entity-card--embedded .axp-entity-card__divider{margin-inline:0px}.axp-entity-card .axp-entity-card__identity{display:flex;align-items:flex-start;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__identity-main{display:flex;min-width:0px;flex:1;align-items:flex-start;gap:calc(var(--spacing, .25rem) * 3)}.axp-entity-card .axp-entity-card__avatar{flex-shrink:0}.axp-entity-card .axp-entity-card__logo{flex-shrink:0;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-light-surface));background-color:rgba(var(--ax-sys-color-surface))}.axp-entity-card .axp-entity-card__logo img{width:100%;height:100%;object-fit:contain}.axp-entity-card .axp-entity-card__qr{display:flex;flex-shrink:0;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-light-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__qr axp-widget-column-cell{display:block;max-width:100%}.axp-entity-card .axp-entity-card__identity-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;flex-wrap:wrap;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__identity-actions{display:flex;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__close{margin-inline-end:calc(var(--spacing, .25rem) * -1);margin-top:calc(var(--spacing, .25rem) * -.5)}.axp-entity-card .axp-entity-card__content{position:relative;flex:1}.axp-entity-card .axp-entity-card__more{display:inline-flex;min-height:calc(var(--spacing, .25rem) * 8);flex-shrink:0;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:var(--spacing, .25rem);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);color:rgba(var(--ax-sys-color-on-lightest-surface))}.axp-entity-card .axp-entity-card__more span,.axp-entity-card .axp-entity-card__more i{pointer-events:none}.axp-entity-card .axp-entity-card__more i{font-size:10px;--tw-leading: 1;line-height:1}.axp-entity-card .axp-entity-card__more:hover,.axp-entity-card .axp-entity-card__more:focus-visible{color:rgba(var(--ax-sys-color-on-surface))}.axp-entity-card .axp-entity-card__more: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__more--footer{margin-block:calc(var(--spacing, .25rem) * -2.5);margin-inline-start:calc(var(--spacing, .25rem) * -1);min-height:calc(var(--spacing, .25rem) * 10);align-self:stretch;padding-inline:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__more--inline{margin-inline:var(--axp-entity-card-gutter);margin-top:calc(var(--spacing, .25rem) * .5);margin-bottom:calc(var(--spacing, .25rem) * 2);padding-inline:var(--spacing, .25rem);padding-block:calc(var(--spacing, .25rem) * 2)}.axp-entity-card.axp-entity-card--expanded .axp-entity-card__more{color:rgba(var(--ax-sys-color-on-surface))}.axp-entity-card .axp-entity-card__title{min-width:0px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: var(--leading-relaxed, 1.625);line-height:var(--leading-relaxed, 1.625);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axp-entity-card .axp-entity-card__icon{flex-shrink:0;font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));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-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);opacity:65%}.axp-entity-card .axp-entity-card__facts{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2);padding-bottom:calc(var(--spacing, .25rem) * 3);padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__facts--inline{flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:calc(var(--spacing, .25rem) * 4);row-gap:var(--spacing, .25rem);padding-inline:0px;padding-block:calc(var(--spacing, .25rem) * .5)}.axp-entity-card .axp-entity-card__fact{min-width:0px;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))}.axp-entity-card .axp-entity-card__fact axp-widget-column-cell{display:block;max-width:100%}.axp-entity-card .axp-entity-card__divider{margin-inline:var(--axp-entity-card-gutter);border-top:1px solid var(--axp-entity-card-border)}.axp-entity-card .axp-entity-card__body{position:relative;overflow:hidden}.axp-entity-card .axp-entity-card__extra{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__extra--collapsed{display:none}.axp-entity-card .axp-entity-card__fields{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 3);padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__field-row.primary,.axp-entity-card .axp-entity-card__field-row.secondary,.axp-entity-card .axp-entity-card__field-row.success,.axp-entity-card .axp-entity-card__field-row.warning,.axp-entity-card .axp-entity-card__field-row.danger,.axp-entity-card .axp-entity-card__field-row.accent1,.axp-entity-card .axp-entity-card__field-row.accent2,.axp-entity-card .axp-entity-card__field-row.accent3{width:auto;margin-inline:calc(-1 * var(--axp-entity-card-gutter));padding-inline:var(--axp-entity-card-gutter)}.axp-entity-card .axp-entity-card__fact.primary,.axp-entity-card .axp-entity-card__header-badge.primary,.axp-entity-card .axp-entity-card__field-row.primary{--axp-entity-styling-border: var(--ax-sys-color-border-primary-lightest-surface);background-color:rgb(var(--ax-sys-color-primary-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-primary-lightest-surface))}.axp-entity-card .axp-entity-card__fact.secondary,.axp-entity-card .axp-entity-card__header-badge.secondary,.axp-entity-card .axp-entity-card__field-row.secondary{--axp-entity-styling-border: var(--ax-sys-color-border-secondary-lightest-surface);background-color:rgb(var(--ax-sys-color-secondary-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-secondary-lightest-surface))}.axp-entity-card .axp-entity-card__fact.success,.axp-entity-card .axp-entity-card__header-badge.success,.axp-entity-card .axp-entity-card__field-row.success{--axp-entity-styling-border: var(--ax-sys-color-border-success-lightest-surface);background-color:rgb(var(--ax-sys-color-success-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-success-lightest-surface))}.axp-entity-card .axp-entity-card__fact.warning,.axp-entity-card .axp-entity-card__header-badge.warning,.axp-entity-card .axp-entity-card__field-row.warning{--axp-entity-styling-border: var(--ax-sys-color-border-warning-lightest-surface);background-color:rgb(var(--ax-sys-color-warning-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-warning-lightest-surface))}.axp-entity-card .axp-entity-card__fact.danger,.axp-entity-card .axp-entity-card__header-badge.danger,.axp-entity-card .axp-entity-card__field-row.danger{--axp-entity-styling-border: var(--ax-sys-color-border-danger-lightest-surface);background-color:rgb(var(--ax-sys-color-danger-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-danger-lightest-surface))}.axp-entity-card .axp-entity-card__fact.accent1,.axp-entity-card .axp-entity-card__header-badge.accent1,.axp-entity-card .axp-entity-card__field-row.accent1{--axp-entity-styling-border: var(--ax-sys-color-border-accent1-lightest-surface);background-color:rgb(var(--ax-sys-color-accent1-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-accent1-lightest-surface))}.axp-entity-card .axp-entity-card__fact.accent2,.axp-entity-card .axp-entity-card__header-badge.accent2,.axp-entity-card .axp-entity-card__field-row.accent2{--axp-entity-styling-border: var(--ax-sys-color-border-accent2-lightest-surface);background-color:rgb(var(--ax-sys-color-accent2-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-accent2-lightest-surface))}.axp-entity-card .axp-entity-card__fact.accent3,.axp-entity-card .axp-entity-card__header-badge.accent3,.axp-entity-card .axp-entity-card__field-row.accent3{--axp-entity-styling-border: var(--ax-sys-color-border-accent3-lightest-surface);background-color:rgb(var(--ax-sys-color-accent3-100));box-shadow:inset 0 0 0 1px rgb(var(--axp-entity-styling-border) / .35);color:rgb(var(--ax-sys-color-on-accent3-lightest-surface))}.axp-entity-card .axp-entity-card__fact.primary,.axp-entity-card .axp-entity-card__fact.secondary,.axp-entity-card .axp-entity-card__fact.success,.axp-entity-card .axp-entity-card__fact.warning,.axp-entity-card .axp-entity-card__fact.danger,.axp-entity-card .axp-entity-card__fact.accent1,.axp-entity-card .axp-entity-card__fact.accent2,.axp-entity-card .axp-entity-card__fact.accent3,.axp-entity-card .axp-entity-card__header-badge.primary,.axp-entity-card .axp-entity-card__header-badge.secondary,.axp-entity-card .axp-entity-card__header-badge.success,.axp-entity-card .axp-entity-card__header-badge.warning,.axp-entity-card .axp-entity-card__header-badge.danger,.axp-entity-card .axp-entity-card__header-badge.accent1,.axp-entity-card .axp-entity-card__header-badge.accent2,.axp-entity-card .axp-entity-card__header-badge.accent3{border-radius:var(--radius-sm, .25rem);padding-inline:var(--spacing, .25rem)}.axp-entity-card .axp-entity-card__field-row{display:flex;width:100%;align-items:flex-start;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3)}.axp-entity-card .axp-entity-card__field-label{display:inline-flex;min-width:0px;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5);text-align:start;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);color:var(--color-gray-500, oklch(55.1% .027 264.364))}.axp-entity-card .axp-entity-card__field-value{margin-inline-start:auto;max-width:60%;min-width:0px;overflow:hidden;text-align:start;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);--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);overflow-wrap:break-word;color:rgba(var(--ax-sys-color-on-surface))}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;width:100%;max-width:100%;min-width:0px;overflow:hidden;text-align:start;overflow-wrap:break-word}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell *{text-align:start}.axp-entity-card .axp-entity-card__field-value axp-widget-column-cell .flex{justify-content:flex-start}.axp-entity-card .axp-entity-card__field-value :is(.truncate,.whitespace-nowrap){max-width:100%;min-width:0px;overflow-wrap:break-word;white-space:normal;overflow:visible;text-overflow:unset}:is(.axp-entity-card .axp-entity-card__field-row.primary,.axp-entity-card .axp-entity-card__field-row.secondary,.axp-entity-card .axp-entity-card__field-row.success,.axp-entity-card .axp-entity-card__field-row.warning,.axp-entity-card .axp-entity-card__field-row.danger,.axp-entity-card .axp-entity-card__field-row.accent1,.axp-entity-card .axp-entity-card__field-row.accent2,.axp-entity-card .axp-entity-card__field-row.accent3) .axp-entity-card__field-label,:is(.axp-entity-card .axp-entity-card__field-row.primary,.axp-entity-card .axp-entity-card__field-row.secondary,.axp-entity-card .axp-entity-card__field-row.success,.axp-entity-card .axp-entity-card__field-row.warning,.axp-entity-card .axp-entity-card__field-row.danger,.axp-entity-card .axp-entity-card__field-row.accent1,.axp-entity-card .axp-entity-card__field-row.accent2,.axp-entity-card .axp-entity-card__field-row.accent3) .axp-entity-card__field-value{color:inherit}.axp-entity-card .axp-entity-card__field-icon{flex-shrink:0;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-gray-400, oklch(70.7% .022 261.325))}.axp-entity-card .axp-entity-card__footer{margin-top:auto;display:flex;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-top-style:var(--tw-border-style);border-top-width:1px;padding-block:calc(var(--spacing, .25rem) * 2.5);padding-inline:var(--axp-entity-card-gutter);border-top-color:var(--axp-entity-card-border);background-color:var(--axp-entity-card-surface)}.axp-entity-card .axp-entity-card__footer-actions{margin-inline-start:auto;display:flex;min-width:0px;align-items:center;justify-content:flex-end;gap:calc(var(--spacing, .25rem) * 2)}.axp-entity-card .axp-entity-card__primary-action{min-width:0px}:is(.axp-entity-card.axp-entity-card--row,.axp-entity-card.axp-entity-card--compact):not(.axp-entity-card--embedded) .axp-entity-card__identity{padding-block:calc(var(--spacing, .25rem) * 2.5)}:is(.axp-entity-card.axp-entity-card--row,.axp-entity-card.axp-entity-card--compact) .axp-entity-card__title{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}:is(.axp-entity-card.axp-entity-card--row,.axp-entity-card.axp-entity-card--compact).axp-entity-card--expandable.axp-entity-card--expanded .axp-entity-card__identity{padding-bottom:calc(var(--spacing, .25rem) * 2.5)}:host.axp-entity-card-host--fill .axp-entity-card{display:flex;width:100%;min-height:0;flex:1 1 auto;flex-direction:column}@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-font-weight{syntax: \"*\"; inherits: false;}@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-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-font-weight: initial;--tw-leading: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
8253
8460
|
}], ctorParameters: () => [], propDecorators: { entity: [{ type: i0.Input, args: [{ isSignal: true, alias: "entity", required: true }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], row: [{ type: i0.Input, args: [{ isSignal: true, alias: "row", required: true }] }], fields: [{ type: i0.Input, args: [{ isSignal: true, alias: "fields", required: false }] }], userStylingRules: [{ type: i0.Input, args: [{ isSignal: true, alias: "userStylingRules", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], elevated: [{ type: i0.Input, args: [{ isSignal: true, alias: "elevated", required: false }] }], disableLookupPopover: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableLookupPopover", required: false }] }], fillHost: [{ type: i0.Input, args: [{ isSignal: true, alias: "fillHost", required: false }] }], extraExpanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "extraExpanded", required: false }] }, { type: i0.Output, args: ["extraExpandedChange"] }], 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 }] }], showClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClose", required: false }] }], primaryActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "primaryActions", required: false }] }], primaryActionLook: [{ type: i0.Input, args: [{ isSignal: true, alias: "primaryActionLook", required: false }] }], secondaryActionLoader: [{ type: i0.Input, args: [{ isSignal: true, alias: "secondaryActionLoader", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], commandClick: [{ type: i0.Output, args: ["commandClick"] }], closeClick: [{ type: i0.Output, args: ["closeClick"] }] } });
|
|
8254
8461
|
|
|
8462
|
+
//#region ----- Types -----
|
|
8463
|
+
//#endregion
|
|
8464
|
+
//#region ----- Selection -----
|
|
8465
|
+
/**
|
|
8466
|
+
* Applies a lookup popover field selection to an already resolved entity card.
|
|
8467
|
+
* Omitted `fields` keeps the card. A provided list replaces it, in that order, and
|
|
8468
|
+
* promotes collapsed "more" facts so the listed fields are visible. `exclude` then removes names.
|
|
8469
|
+
*/
|
|
8470
|
+
function selectEntityDetailPopoverFields(fields, selection) {
|
|
8471
|
+
const listed = normalizePopoverFieldNames(selection?.fields);
|
|
8472
|
+
const excluded = new Set(normalizePopoverFieldNames(selection?.exclude) ?? []);
|
|
8473
|
+
const selected = listed == null ? [...fields] : pickListedPopoverFields(fields, listed);
|
|
8474
|
+
if (excluded.size === 0) {
|
|
8475
|
+
return selected;
|
|
8476
|
+
}
|
|
8477
|
+
return selected.filter((field) => !popoverFieldNames(field).some((name) => excluded.has(name)));
|
|
8478
|
+
}
|
|
8479
|
+
function pickListedPopoverFields(fields, listed) {
|
|
8480
|
+
const selected = [];
|
|
8481
|
+
for (const name of listed) {
|
|
8482
|
+
const match = fields.find((field) => popoverFieldNames(field).includes(name));
|
|
8483
|
+
if (!match || selected.includes(match)) {
|
|
8484
|
+
continue;
|
|
8485
|
+
}
|
|
8486
|
+
selected.push(revealListedPopoverField(match));
|
|
8487
|
+
}
|
|
8488
|
+
return selected;
|
|
8489
|
+
}
|
|
8490
|
+
function revealListedPopoverField(field) {
|
|
8491
|
+
if (field.isBadgeDisplay || !field.isMoreDisplay) {
|
|
8492
|
+
return field;
|
|
8493
|
+
}
|
|
8494
|
+
field.display = 'simple';
|
|
8495
|
+
field.isMoreDisplay = false;
|
|
8496
|
+
field.isSimpleDisplay = true;
|
|
8497
|
+
field.isMetaDisplay = false;
|
|
8498
|
+
return field;
|
|
8499
|
+
}
|
|
8500
|
+
function popoverFieldNames(field) {
|
|
8501
|
+
const cardName = field.field?.name?.trim();
|
|
8502
|
+
const propertyName = field.name?.trim();
|
|
8503
|
+
if (cardName && propertyName && cardName !== propertyName) {
|
|
8504
|
+
return [cardName, propertyName];
|
|
8505
|
+
}
|
|
8506
|
+
const name = cardName || propertyName;
|
|
8507
|
+
return name ? [name] : [];
|
|
8508
|
+
}
|
|
8509
|
+
function normalizePopoverFieldNames(values) {
|
|
8510
|
+
if (values == null) {
|
|
8511
|
+
return undefined;
|
|
8512
|
+
}
|
|
8513
|
+
const seen = new Set();
|
|
8514
|
+
const names = [];
|
|
8515
|
+
for (const value of values) {
|
|
8516
|
+
const name = value?.trim();
|
|
8517
|
+
if (!name || seen.has(name)) {
|
|
8518
|
+
continue;
|
|
8519
|
+
}
|
|
8520
|
+
seen.add(name);
|
|
8521
|
+
names.push(name);
|
|
8522
|
+
}
|
|
8523
|
+
return names;
|
|
8524
|
+
}
|
|
8525
|
+
//#endregion
|
|
8526
|
+
|
|
8255
8527
|
class AXPEntityDetailPopoverComponent {
|
|
8256
8528
|
//#endregion
|
|
8257
8529
|
//#region ----- Lifecycle -----
|
|
@@ -8283,6 +8555,12 @@ class AXPEntityDetailPopoverComponent {
|
|
|
8283
8555
|
...(ngDevMode ? [undefined, { debugName: "requestClose" }] : /* istanbul ignore next */ []));
|
|
8284
8556
|
this.breadcrumb = input(null, /* @ts-ignore */
|
|
8285
8557
|
...(ngDevMode ? [{ debugName: "breadcrumb" }] : /* istanbul ignore next */ []));
|
|
8558
|
+
/** When set, replaces the entity card field list for this popover only. */
|
|
8559
|
+
this.popoverFields = input(null, /* @ts-ignore */
|
|
8560
|
+
...(ngDevMode ? [{ debugName: "popoverFields" }] : /* istanbul ignore next */ []));
|
|
8561
|
+
/** Names removed from this popover after `popoverFields` is applied. */
|
|
8562
|
+
this.popoverExclude = input(null, /* @ts-ignore */
|
|
8563
|
+
...(ngDevMode ? [{ debugName: "popoverExclude" }] : /* istanbul ignore next */ []));
|
|
8286
8564
|
//#endregion
|
|
8287
8565
|
//#region ----- State Signals -----
|
|
8288
8566
|
this.entityDefinition = signal(null, /* @ts-ignore */
|
|
@@ -8311,7 +8589,10 @@ class AXPEntityDetailPopoverComponent {
|
|
|
8311
8589
|
if (!definition) {
|
|
8312
8590
|
return [];
|
|
8313
8591
|
}
|
|
8314
|
-
return this.cardFieldsResolver.resolve(definition, layout)
|
|
8592
|
+
return selectEntityDetailPopoverFields(this.cardFieldsResolver.resolve(definition, layout), {
|
|
8593
|
+
fields: this.popoverFields(),
|
|
8594
|
+
exclude: this.popoverExclude(),
|
|
8595
|
+
});
|
|
8315
8596
|
}, /* @ts-ignore */
|
|
8316
8597
|
...(ngDevMode ? [{ debugName: "cardFields" }] : /* istanbul ignore next */ []));
|
|
8317
8598
|
this.showSkeletonAvatar = computed(() => {
|
|
@@ -8419,7 +8700,7 @@ class AXPEntityDetailPopoverComponent {
|
|
|
8419
8700
|
}
|
|
8420
8701
|
}
|
|
8421
8702
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8422
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityDetailPopoverComponent, isStandalone: true, selector: "axp-entity-detail-popover", inputs: { entity: { classPropertyName: "entity", publicName: "entity", isSignal: true, isRequired: true, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: true, transformFunction: null }, requestClose: { classPropertyName: "requestClose", publicName: "requestClose", isSignal: true, isRequired: false, transformFunction: null }, breadcrumb: { classPropertyName: "breadcrumb", publicName: "breadcrumb", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXP_SELECT_COLUMN_RESOLVE_QUERY, useValue: true }], ngImport: i0, template: "<div class=\"axp-entity-detail-popover\">\n @if (breadcrumb()) {\n <!-- ----- Optional lookup breadcrumb above the shared entity card ----- -->\n <div class=\"text-xs text-neutral-500 mb-2\">{{ breadcrumb() }}</div>\n }\n @if (isLoadingDetails()) {\n <!-- ----- Loading placeholder while Entity:GetDetails is fetched ----- -->\n <div class=\"axp-entity-detail-popover__loading\">\n @if (canClose()) {\n <!-- ----- Dismiss while the lookup card is still loading ----- -->\n <ax-button\n class=\"axp-entity-detail-popover__close ax-sm\"\n [look]=\"'blank'\"\n [color]=\"'default'\"\n [iconOnly]=\"true\"\n [attr.title]=\"('@general:actions.close.title' | translate | async)\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)\"\n (onClick)=\"onClose()\"\n >\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-button>\n }\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"canOpenDetails()\"\n [showAvatar]=\"showSkeletonAvatar()\"\n [elevated]=\"true\"\n />\n </div>\n }\n <!-- ----- Same card chrome as the master list; Open Details uses the card footer ----- -->\n @else if (entityDefinition(); as definition) {\n <!--->\n <!-- ----- Entity card when row details have loaded ----- -->\n @if (entityData(); as row) {\n <axp-entity-card\n [entity]=\"definition\"\n [layout]=\"cardLayout()\"\n [row]=\"row\"\n [fields]=\"cardFields()\"\n variant=\"card\"\n [interactive]=\"false\"\n [elevated]=\"true\"\n [showClose]=\"canClose()\"\n primaryActionLook=\"solid\"\n [disableLookupPopover]=\"true\"\n [primaryActions]=\"openDetailsActions()\"\n (commandClick)=\"onCardCommandClick($event)\"\n (closeClick)=\"onClose()\"\n />\n }\n }\n</div>\n", styles: [":host{display:block;border-radius:var(--radius-md, .375rem);width:min(600px,calc(100vw - 2rem));background-color:rgb(var(--ax-sys-color-lightest-surface));box-shadow:0 8px 16px #00000029,0 24px 48px #00000038,0 48px 96px #00000047}.axp-entity-detail-popover__loading{position:relative}.axp-entity-detail-popover__close{position:absolute;z-index:20;inset-block-start:.75rem;inset-inline-end:1rem}.axp-entity-detail-popover-overlay,.axp-entity-detail-popover-overlay.ax-overlay-container,.axp-entity-detail-popover-overlay.ax-overlay-pane,.axp-entity-detail-popover-overlay .ax-overlay-pane,.axp-entity-detail-popover-overlay .overlay-pane{width:min(600px,calc(100vw - 2rem))!important;min-width:min(600px,calc(100vw - 2rem));overflow:visible!important;background:transparent!important;border:none!important;box-shadow:none!important;padding:0!important}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPEntityCardComponent, selector: "axp-entity-card", inputs: ["entity", "layout", "row", "fields", "userStylingRules", "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: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
8703
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityDetailPopoverComponent, isStandalone: true, selector: "axp-entity-detail-popover", inputs: { entity: { classPropertyName: "entity", publicName: "entity", isSignal: true, isRequired: true, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: true, transformFunction: null }, requestClose: { classPropertyName: "requestClose", publicName: "requestClose", isSignal: true, isRequired: false, transformFunction: null }, breadcrumb: { classPropertyName: "breadcrumb", publicName: "breadcrumb", isSignal: true, isRequired: false, transformFunction: null }, popoverFields: { classPropertyName: "popoverFields", publicName: "popoverFields", isSignal: true, isRequired: false, transformFunction: null }, popoverExclude: { classPropertyName: "popoverExclude", publicName: "popoverExclude", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXP_SELECT_COLUMN_RESOLVE_QUERY, useValue: true }], ngImport: i0, template: "<div class=\"axp-entity-detail-popover\">\n @if (breadcrumb()) {\n <!-- ----- Optional lookup breadcrumb above the shared entity card ----- -->\n <div class=\"text-xs text-neutral-500 mb-2\">{{ breadcrumb() }}</div>\n }\n @if (isLoadingDetails()) {\n <!-- ----- Loading placeholder while Entity:GetDetails is fetched ----- -->\n <div class=\"axp-entity-detail-popover__loading\">\n @if (canClose()) {\n <!-- ----- Dismiss while the lookup card is still loading ----- -->\n <ax-button\n class=\"axp-entity-detail-popover__close ax-sm\"\n [look]=\"'blank'\"\n [color]=\"'default'\"\n [iconOnly]=\"true\"\n [attr.title]=\"('@general:actions.close.title' | translate | async)\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)\"\n (onClick)=\"onClose()\"\n >\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-button>\n }\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"canOpenDetails()\"\n [showAvatar]=\"showSkeletonAvatar()\"\n [elevated]=\"true\"\n />\n </div>\n }\n <!-- ----- Same card chrome as the master list; Open Details uses the card footer ----- -->\n @else if (entityDefinition(); as definition) {\n <!--->\n <!-- ----- Entity card when row details have loaded ----- -->\n @if (entityData(); as row) {\n <axp-entity-card\n [entity]=\"definition\"\n [layout]=\"cardLayout()\"\n [row]=\"row\"\n [fields]=\"cardFields()\"\n variant=\"card\"\n [interactive]=\"false\"\n [elevated]=\"true\"\n [showClose]=\"canClose()\"\n primaryActionLook=\"solid\"\n [disableLookupPopover]=\"true\"\n [primaryActions]=\"openDetailsActions()\"\n (commandClick)=\"onCardCommandClick($event)\"\n (closeClick)=\"onClose()\"\n />\n }\n }\n</div>\n", styles: [":host{display:block;border-radius:var(--radius-md, .375rem);width:min(600px,calc(100vw - 2rem));background-color:rgb(var(--ax-sys-color-lightest-surface));box-shadow:0 8px 16px #00000029,0 24px 48px #00000038,0 48px 96px #00000047}.axp-entity-detail-popover__loading{position:relative}.axp-entity-detail-popover__close{position:absolute;z-index:20;inset-block-start:.75rem;inset-inline-end:1rem}.axp-entity-detail-popover-overlay,.axp-entity-detail-popover-overlay.ax-overlay-container,.axp-entity-detail-popover-overlay.ax-overlay-pane,.axp-entity-detail-popover-overlay .ax-overlay-pane,.axp-entity-detail-popover-overlay .overlay-pane{width:min(600px,calc(100vw - 2rem))!important;min-width:min(600px,calc(100vw - 2rem));overflow:visible!important;background:transparent!important;border:none!important;box-shadow:none!important;padding:0!important}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPEntityCardComponent, selector: "axp-entity-card", inputs: ["entity", "layout", "row", "fields", "userStylingRules", "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: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
8423
8704
|
}
|
|
8424
8705
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailPopoverComponent, decorators: [{
|
|
8425
8706
|
type: Component,
|
|
@@ -8432,7 +8713,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
8432
8713
|
AXPEntityCardComponent,
|
|
8433
8714
|
AXPEntityCardSkeletonComponent,
|
|
8434
8715
|
], providers: [{ provide: AXP_SELECT_COLUMN_RESOLVE_QUERY, useValue: true }], template: "<div class=\"axp-entity-detail-popover\">\n @if (breadcrumb()) {\n <!-- ----- Optional lookup breadcrumb above the shared entity card ----- -->\n <div class=\"text-xs text-neutral-500 mb-2\">{{ breadcrumb() }}</div>\n }\n @if (isLoadingDetails()) {\n <!-- ----- Loading placeholder while Entity:GetDetails is fetched ----- -->\n <div class=\"axp-entity-detail-popover__loading\">\n @if (canClose()) {\n <!-- ----- Dismiss while the lookup card is still loading ----- -->\n <ax-button\n class=\"axp-entity-detail-popover__close ax-sm\"\n [look]=\"'blank'\"\n [color]=\"'default'\"\n [iconOnly]=\"true\"\n [attr.title]=\"('@general:actions.close.title' | translate | async)\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)\"\n (onClick)=\"onClose()\"\n >\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-button>\n }\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"canOpenDetails()\"\n [showAvatar]=\"showSkeletonAvatar()\"\n [elevated]=\"true\"\n />\n </div>\n }\n <!-- ----- Same card chrome as the master list; Open Details uses the card footer ----- -->\n @else if (entityDefinition(); as definition) {\n <!--->\n <!-- ----- Entity card when row details have loaded ----- -->\n @if (entityData(); as row) {\n <axp-entity-card\n [entity]=\"definition\"\n [layout]=\"cardLayout()\"\n [row]=\"row\"\n [fields]=\"cardFields()\"\n variant=\"card\"\n [interactive]=\"false\"\n [elevated]=\"true\"\n [showClose]=\"canClose()\"\n primaryActionLook=\"solid\"\n [disableLookupPopover]=\"true\"\n [primaryActions]=\"openDetailsActions()\"\n (commandClick)=\"onCardCommandClick($event)\"\n (closeClick)=\"onClose()\"\n />\n }\n }\n</div>\n", styles: [":host{display:block;border-radius:var(--radius-md, .375rem);width:min(600px,calc(100vw - 2rem));background-color:rgb(var(--ax-sys-color-lightest-surface));box-shadow:0 8px 16px #00000029,0 24px 48px #00000038,0 48px 96px #00000047}.axp-entity-detail-popover__loading{position:relative}.axp-entity-detail-popover__close{position:absolute;z-index:20;inset-block-start:.75rem;inset-inline-end:1rem}.axp-entity-detail-popover-overlay,.axp-entity-detail-popover-overlay.ax-overlay-container,.axp-entity-detail-popover-overlay.ax-overlay-pane,.axp-entity-detail-popover-overlay .ax-overlay-pane,.axp-entity-detail-popover-overlay .overlay-pane{width:min(600px,calc(100vw - 2rem))!important;min-width:min(600px,calc(100vw - 2rem));overflow:visible!important;background:transparent!important;border:none!important;box-shadow:none!important;padding:0!important}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
8435
|
-
}], ctorParameters: () => [], propDecorators: { entity: [{ type: i0.Input, args: [{ isSignal: true, alias: "entity", required: true }] }], entityId: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityId", required: true }] }], requestClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestClose", required: false }] }], breadcrumb: [{ type: i0.Input, args: [{ isSignal: true, alias: "breadcrumb", required: false }] }] } });
|
|
8716
|
+
}], ctorParameters: () => [], propDecorators: { entity: [{ type: i0.Input, args: [{ isSignal: true, alias: "entity", required: true }] }], entityId: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityId", required: true }] }], requestClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestClose", required: false }] }], breadcrumb: [{ type: i0.Input, args: [{ isSignal: true, alias: "breadcrumb", required: false }] }], popoverFields: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverFields", required: false }] }], popoverExclude: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverExclude", required: false }] }] } });
|
|
8436
8717
|
|
|
8437
8718
|
class AXPEntityDetailPopoverService {
|
|
8438
8719
|
constructor() {
|
|
@@ -8491,6 +8772,8 @@ class AXPEntityDetailPopoverService {
|
|
|
8491
8772
|
entity: options.entity,
|
|
8492
8773
|
entityId: options.id,
|
|
8493
8774
|
breadcrumb: options.breadcrumb ?? null,
|
|
8775
|
+
popoverFields: options.fields ?? null,
|
|
8776
|
+
popoverExclude: options.exclude ?? null,
|
|
8494
8777
|
requestClose,
|
|
8495
8778
|
},
|
|
8496
8779
|
onDispose: () => {
|
|
@@ -14120,7 +14403,6 @@ function buildAttachmentsListActionCommandOptions(opts, field) {
|
|
|
14120
14403
|
id: '{{ context.eval("id") }}',
|
|
14121
14404
|
key: field,
|
|
14122
14405
|
...base,
|
|
14123
|
-
accept: opts.accept ?? '.jpg,.jpeg,.png,.gif,.webp',
|
|
14124
14406
|
showAddItemButton: true,
|
|
14125
14407
|
};
|
|
14126
14408
|
}
|
|
@@ -14295,7 +14577,7 @@ class AXMAttachmentsPageComponentProvider {
|
|
|
14295
14577
|
return [
|
|
14296
14578
|
{
|
|
14297
14579
|
key: ATTACHMENTS_PAGE_COMPONENT_KEY,
|
|
14298
|
-
loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-
|
|
14580
|
+
loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-BManmr01.mjs').then((m) => m.AXMAttachmentsPageComponent),
|
|
14299
14581
|
},
|
|
14300
14582
|
];
|
|
14301
14583
|
}
|
|
@@ -14832,7 +15114,7 @@ class AXMGalleryPageComponentProvider {
|
|
|
14832
15114
|
return [
|
|
14833
15115
|
{
|
|
14834
15116
|
key: GALLERY_PAGE_COMPONENT_KEY,
|
|
14835
|
-
loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-
|
|
15117
|
+
loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-Be348QCj.mjs').then((m) => m.AXMGalleryPageComponent),
|
|
14836
15118
|
},
|
|
14837
15119
|
];
|
|
14838
15120
|
}
|
|
@@ -16850,7 +17132,7 @@ class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent {
|
|
|
16850
17132
|
></ax-button>
|
|
16851
17133
|
</ax-suffix>
|
|
16852
17134
|
</ax-footer>
|
|
16853
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i4$
|
|
17135
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i4$2.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: AXSkeletonModule }, { kind: "component", type: i1$3.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "alternate", "nodeTemplate", "idField", "titleField", "highlightText", "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: AXTranslationModule }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
16854
17136
|
}
|
|
16855
17137
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityCategoryTreeSelectorComponent, decorators: [{
|
|
16856
17138
|
type: Component,
|
|
@@ -18438,7 +18720,7 @@ class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
18438
18720
|
</button>
|
|
18439
18721
|
</div>
|
|
18440
18722
|
</ng-template>
|
|
18441
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$
|
|
18723
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "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: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTagBoxModule }, { kind: "component", type: i6$1.AXTagBoxComponent, selector: "ax-tag-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "allowNull", "type", "look", "addOnComma", "addOnEnter", "valueField", "textField", "readonlyField", "allowDuplicateValues", "tagTemplate"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "onTagClick", "onTagDblClick", "onTagContextMenu"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPTruncatedBreadcrumbComponent, selector: "axp-truncated-breadcrumb", inputs: ["sections", "characterLimit", "sectionLimit", "separatorIcon", "ellipsisIcon", "eyeIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
18442
18724
|
}
|
|
18443
18725
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityCategoryWidgetEditComponent, decorators: [{
|
|
18444
18726
|
type: Component,
|
|
@@ -18793,106 +19075,173 @@ const AXPEntityDefinitionProviderWidget = {
|
|
|
18793
19075
|
},
|
|
18794
19076
|
};
|
|
18795
19077
|
|
|
18796
|
-
|
|
19078
|
+
/** One line. Must match the dropdown row so virtual scroll does not clip the first or last item. */
|
|
19079
|
+
const ENTITY_KEY_ROW_HEIGHT = 40;
|
|
19080
|
+
/** One page holds the catalog so unloaded virtual pages are not shown as missing entities. */
|
|
19081
|
+
const ENTITY_KEY_PAGE_SIZE = 500;
|
|
19082
|
+
//#endregion
|
|
19083
|
+
//#region ---- Component ----
|
|
19084
|
+
/**
|
|
19085
|
+
* Picks a registered entity key (`module.name`).
|
|
19086
|
+
* Does not use the data-list widget base: that base writes `options.dataSource`
|
|
19087
|
+
* while the property dialog is opening and remounts the dialog until the browser hangs.
|
|
19088
|
+
*/
|
|
19089
|
+
class AXPEntityDefinitionProviderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
18797
19090
|
constructor() {
|
|
18798
19091
|
super(...arguments);
|
|
18799
19092
|
//#region ---- Services & Dependencies ----
|
|
18800
19093
|
this.entityRegistry = inject(AXPEntityDefinitionRegistryService);
|
|
19094
|
+
this.entityResolver = inject(AXPEntityResolver);
|
|
19095
|
+
this.translationService = inject(AXTranslationService);
|
|
18801
19096
|
/**
|
|
18802
|
-
*
|
|
19097
|
+
* Replaced after {@link AXPEntityResolver.listAll}. `getAll()` only has entities
|
|
19098
|
+
* already opened in this session, so the dropdown would hide the rest.
|
|
18803
19099
|
*/
|
|
18804
|
-
this.
|
|
18805
|
-
|
|
19100
|
+
this.rows = [];
|
|
19101
|
+
/** Bumped when {@link rows} is replaced so the selected label can resolve. */
|
|
19102
|
+
this.rowsVersion = signal(0, /* @ts-ignore */
|
|
19103
|
+
...(ngDevMode ? [{ debugName: "rowsVersion" }] : /* istanbul ignore next */ []));
|
|
19104
|
+
/** Drops the lookup's initial value echo so the property dialog is not rebuilt. */
|
|
19105
|
+
this.acceptSelection = false;
|
|
18806
19106
|
//#endregion
|
|
18807
|
-
//#region ----
|
|
18808
|
-
|
|
18809
|
-
|
|
18810
|
-
|
|
18811
|
-
|
|
18812
|
-
|
|
18813
|
-
|
|
18814
|
-
|
|
18815
|
-
|
|
18816
|
-
|
|
18817
|
-
|
|
18818
|
-
|
|
18819
|
-
|
|
18820
|
-
|
|
18821
|
-
|
|
18822
|
-
|
|
18823
|
-
|
|
18824
|
-
|
|
19107
|
+
//#region ---- State ----
|
|
19108
|
+
this.rowHeight = ENTITY_KEY_ROW_HEIGHT;
|
|
19109
|
+
this.dataSource = new AXDataSource({
|
|
19110
|
+
key: 'value',
|
|
19111
|
+
pageSize: ENTITY_KEY_PAGE_SIZE,
|
|
19112
|
+
load: async (query) => {
|
|
19113
|
+
const needle = readLookupFilterText(query.filter);
|
|
19114
|
+
const matched = needle
|
|
19115
|
+
? this.rows.filter((row) => row.searchText.includes(needle))
|
|
19116
|
+
: this.rows;
|
|
19117
|
+
const skip = query.skip ?? 0;
|
|
19118
|
+
const take = query.take ?? matched.length;
|
|
19119
|
+
return {
|
|
19120
|
+
items: matched.slice(skip, skip + take),
|
|
19121
|
+
total: matched.length,
|
|
19122
|
+
};
|
|
19123
|
+
},
|
|
19124
|
+
byKey: (key) => {
|
|
19125
|
+
const found = this.rows.find((row) => row.value === key);
|
|
19126
|
+
const text = key == null ? '' : String(key);
|
|
19127
|
+
return Promise.resolve(found ?? { value: text, title: text, searchText: text.toLocaleLowerCase() });
|
|
19128
|
+
},
|
|
19129
|
+
});
|
|
19130
|
+
this.selectedKey = computed(() => {
|
|
19131
|
+
const value = this.getValue();
|
|
19132
|
+
return typeof value === 'string' && value.trim() !== '' ? value : null;
|
|
19133
|
+
}, /* @ts-ignore */
|
|
19134
|
+
...(ngDevMode ? [{ debugName: "selectedKey" }] : /* istanbul ignore next */ []));
|
|
19135
|
+
this.selectedItems = computed(() => {
|
|
19136
|
+
this.rowsVersion();
|
|
19137
|
+
const key = this.selectedKey();
|
|
19138
|
+
if (!key) {
|
|
19139
|
+
return [];
|
|
18825
19140
|
}
|
|
18826
|
-
this.
|
|
18827
|
-
|
|
18828
|
-
void this.reloadProviderData();
|
|
18829
|
-
});
|
|
19141
|
+
const found = this.rows.find((row) => row.value === key);
|
|
19142
|
+
return [found ?? { value: key, title: key, searchText: key.toLocaleLowerCase() }];
|
|
18830
19143
|
}, /* @ts-ignore */
|
|
18831
|
-
...(ngDevMode ? [{ debugName: "
|
|
18832
|
-
}
|
|
18833
|
-
//#endregion
|
|
18834
|
-
//#region ---- Data loading ----
|
|
18835
|
-
/**
|
|
18836
|
-
* Options:
|
|
18837
|
-
* - `filterModuleField`: sibling context field name (e.g. `entityListModule`); when set, only entities in that module are listed.
|
|
18838
|
-
* - `valueFormat`: `fullKey` (`module.name`, default) or `entityName` (short name only, for menus that store `entityListRef.entity`).
|
|
18839
|
-
*/
|
|
18840
|
-
async loadDataSourceRows() {
|
|
18841
|
-
const entities = this.entityRegistry.getAll();
|
|
18842
|
-
const filterModuleField = this.options()['filterModuleField'];
|
|
18843
|
-
const valueFormat = this.options()['valueFormat'] ?? 'fullKey';
|
|
18844
|
-
let list = entities;
|
|
18845
|
-
if (filterModuleField) {
|
|
18846
|
-
const mod = this.readModuleFromContext(filterModuleField);
|
|
18847
|
-
list = mod ? entities.filter((e) => e.module === mod) : [];
|
|
18848
|
-
}
|
|
18849
|
-
return list.map((e) => ({
|
|
18850
|
-
value: valueFormat === 'entityName' ? e.name : `${e.module}.${e.name}`,
|
|
18851
|
-
title: `${e.title} (${e.module}.${e.name})`,
|
|
18852
|
-
}));
|
|
19144
|
+
...(ngDevMode ? [{ debugName: "selectedItems" }] : /* istanbul ignore next */ []));
|
|
18853
19145
|
}
|
|
18854
19146
|
//#endregion
|
|
18855
|
-
//#region ----
|
|
18856
|
-
|
|
18857
|
-
|
|
18858
|
-
|
|
19147
|
+
//#region ---- Lifecycle ----
|
|
19148
|
+
async ngOnInit() {
|
|
19149
|
+
super.ngOnInit();
|
|
19150
|
+
try {
|
|
19151
|
+
const catalog = await this.entityResolver.listAll();
|
|
19152
|
+
this.rows = await this.toRows(catalog, this.entityRegistry.getAll());
|
|
19153
|
+
}
|
|
19154
|
+
catch {
|
|
19155
|
+
this.rows = await this.toRows([], this.entityRegistry.getAll());
|
|
19156
|
+
}
|
|
19157
|
+
this.rowsVersion.update((version) => version + 1);
|
|
19158
|
+
this.dataSource.refresh();
|
|
19159
|
+
setTimeout(() => {
|
|
19160
|
+
this.acceptSelection = true;
|
|
18859
19161
|
});
|
|
18860
19162
|
}
|
|
18861
19163
|
//#endregion
|
|
18862
|
-
//#region ----
|
|
18863
|
-
|
|
18864
|
-
|
|
18865
|
-
|
|
18866
|
-
readModuleFromContext(field) {
|
|
18867
|
-
const data = this.contextService.data();
|
|
18868
|
-
if (data == null || typeof data !== 'object') {
|
|
18869
|
-
return null;
|
|
19164
|
+
//#region ---- Event Handlers ----
|
|
19165
|
+
onLookupValueChanged(event) {
|
|
19166
|
+
if (!this.acceptSelection || !event.isUserInteraction) {
|
|
19167
|
+
return;
|
|
18870
19168
|
}
|
|
18871
|
-
const
|
|
18872
|
-
|
|
18873
|
-
|
|
19169
|
+
const next = typeof event.value === 'string' ? event.value : null;
|
|
19170
|
+
if (next === this.selectedKey()) {
|
|
19171
|
+
return;
|
|
19172
|
+
}
|
|
19173
|
+
this.setValue(next);
|
|
18874
19174
|
}
|
|
18875
|
-
|
|
18876
|
-
|
|
18877
|
-
|
|
18878
|
-
|
|
18879
|
-
const
|
|
18880
|
-
|
|
19175
|
+
//#endregion
|
|
19176
|
+
//#region ---- Data ----
|
|
19177
|
+
async toRows(catalog, loaded) {
|
|
19178
|
+
const titles = new Map();
|
|
19179
|
+
for (const entity of loaded) {
|
|
19180
|
+
const key = `${entity.module}.${entity.name}`;
|
|
19181
|
+
titles.set(key, entityTitle(entity));
|
|
19182
|
+
}
|
|
19183
|
+
const byValue = new Map();
|
|
19184
|
+
for (const entry of catalog) {
|
|
19185
|
+
byValue.set(entry.fullName, titles.get(entry.fullName) ?? entry.name);
|
|
19186
|
+
}
|
|
19187
|
+
for (const entity of loaded) {
|
|
19188
|
+
const key = `${entity.module}.${entity.name}`;
|
|
19189
|
+
if (!byValue.has(key)) {
|
|
19190
|
+
byValue.set(key, titles.get(key) ?? entity.name);
|
|
19191
|
+
}
|
|
19192
|
+
}
|
|
19193
|
+
const locale = this.translationService.getActiveLang();
|
|
19194
|
+
const labeled = await Promise.all([...byValue.entries()].map(async ([value, title]) => {
|
|
19195
|
+
const translated = (await this.translationService.translateAsync(title)).trim() || title;
|
|
19196
|
+
return {
|
|
19197
|
+
value,
|
|
19198
|
+
title,
|
|
19199
|
+
searchText: `${translated} ${value}`.toLocaleLowerCase(),
|
|
19200
|
+
sortLabel: translated,
|
|
19201
|
+
};
|
|
19202
|
+
}));
|
|
19203
|
+
labeled.sort((a, b) => a.sortLabel.localeCompare(b.sortLabel, locale, { sensitivity: 'base' }));
|
|
19204
|
+
return labeled.map(({ value, title, searchText }) => ({ value, title, searchText }));
|
|
18881
19205
|
}
|
|
18882
19206
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDefinitionProviderWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
18883
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
19207
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPEntityDefinitionProviderWidgetEditComponent, isStandalone: true, selector: "axp-entity-definition-provider-widget-edit", host: { classAttribute: "block flex-1" }, usesInheritance: true, ngImport: i0, template: "<ax-lookup\n mode=\"drop-down-list\"\n [dataSource]=\"dataSource\"\n valueField=\"value\"\n textField=\"title\"\n [searchable]=\"true\"\n [itemHeight]=\"rowHeight\"\n [maxVisibleItems]=\"8\"\n [valueItems]=\"selectedItems()\"\n [ngModel]=\"selectedKey()\"\n [itemTemplate]=\"entityItemTemplate\"\n [selectedTemplate]=\"entitySelectedTemplate\"\n (onValueChanged)=\"onLookupValueChanged($event)\"\n>\n</ax-lookup>\n\n<!-- ----- Dropdown row. Custom itemTemplate skips the library option padding, so px-3 lives here. ----- -->\n<ng-template #entityItemTemplate let-item>\n <span class=\"flex h-full w-full min-w-0 items-center px-3 text-sm\">\n <span class=\"min-w-0 flex-1 truncate\">\n {{ item?.title | translate | async }}\n <span class=\"text-neutral-500\">({{ item?.value }})</span>\n </span>\n </span>\n</ng-template>\n\n<!-- ----- Selected value stays inside the input padding ----- -->\n<ng-template #entitySelectedTemplate let-item>\n <span class=\"block min-w-0 truncate text-sm\">\n {{ item?.title | translate | async }}\n <span class=\"text-neutral-500\">({{ item?.value }})</span>\n </span>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "allowSelectAll", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems", "prefetch"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
18884
19208
|
}
|
|
18885
19209
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDefinitionProviderWidgetEditComponent, decorators: [{
|
|
18886
19210
|
type: Component,
|
|
18887
|
-
args: [{ selector: 'axp-entity-definition-provider-widget-edit', changeDetection: ChangeDetectionStrategy.OnPush,
|
|
19211
|
+
args: [{ selector: 'axp-entity-definition-provider-widget-edit', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
19212
|
+
class: 'block flex-1',
|
|
19213
|
+
}, imports: [
|
|
18888
19214
|
FormsModule,
|
|
18889
19215
|
AXLookupComponent,
|
|
18890
19216
|
AXFormModule,
|
|
18891
19217
|
AXDecoratorModule,
|
|
18892
19218
|
AXTranslationModule,
|
|
18893
19219
|
AsyncPipe,
|
|
18894
|
-
], template: "<ax-lookup\n
|
|
19220
|
+
], template: "<ax-lookup\n mode=\"drop-down-list\"\n [dataSource]=\"dataSource\"\n valueField=\"value\"\n textField=\"title\"\n [searchable]=\"true\"\n [itemHeight]=\"rowHeight\"\n [maxVisibleItems]=\"8\"\n [valueItems]=\"selectedItems()\"\n [ngModel]=\"selectedKey()\"\n [itemTemplate]=\"entityItemTemplate\"\n [selectedTemplate]=\"entitySelectedTemplate\"\n (onValueChanged)=\"onLookupValueChanged($event)\"\n>\n</ax-lookup>\n\n<!-- ----- Dropdown row. Custom itemTemplate skips the library option padding, so px-3 lives here. ----- -->\n<ng-template #entityItemTemplate let-item>\n <span class=\"flex h-full w-full min-w-0 items-center px-3 text-sm\">\n <span class=\"min-w-0 flex-1 truncate\">\n {{ item?.title | translate | async }}\n <span class=\"text-neutral-500\">({{ item?.value }})</span>\n </span>\n </span>\n</ng-template>\n\n<!-- ----- Selected value stays inside the input padding ----- -->\n<ng-template #entitySelectedTemplate let-item>\n <span class=\"block min-w-0 truncate text-sm\">\n {{ item?.title | translate | async }}\n <span class=\"text-neutral-500\">({{ item?.value }})</span>\n </span>\n</ng-template>\n" }]
|
|
18895
19221
|
}] });
|
|
19222
|
+
//#endregion
|
|
19223
|
+
//#region ---- Helpers ----
|
|
19224
|
+
function entityTitle(entity) {
|
|
19225
|
+
return typeof entity.title === 'string' && entity.title.trim() !== '' ? entity.title : entity.name;
|
|
19226
|
+
}
|
|
19227
|
+
function readLookupFilterText(filter) {
|
|
19228
|
+
if (!filter || typeof filter !== 'object') {
|
|
19229
|
+
return '';
|
|
19230
|
+
}
|
|
19231
|
+
const candidate = filter;
|
|
19232
|
+
if (candidate.operator?.type === 'contains' && candidate.value != null) {
|
|
19233
|
+
return String(candidate.value).trim().toLocaleLowerCase();
|
|
19234
|
+
}
|
|
19235
|
+
if (Array.isArray(candidate.filters)) {
|
|
19236
|
+
for (const nested of candidate.filters) {
|
|
19237
|
+
const text = readLookupFilterText(nested);
|
|
19238
|
+
if (text) {
|
|
19239
|
+
return text;
|
|
19240
|
+
}
|
|
19241
|
+
}
|
|
19242
|
+
}
|
|
19243
|
+
return '';
|
|
19244
|
+
}
|
|
18896
19245
|
|
|
18897
19246
|
var entityDefinitionProviderWidgetEdit_component = /*#__PURE__*/Object.freeze({
|
|
18898
19247
|
__proto__: null,
|
|
@@ -19287,18 +19636,19 @@ class AXPEntityListTableService {
|
|
|
19287
19636
|
});
|
|
19288
19637
|
}
|
|
19289
19638
|
/**
|
|
19290
|
-
*
|
|
19291
|
-
*
|
|
19639
|
+
* Related-list `excludeProperties` are not on the row action itself.
|
|
19640
|
+
* Merge them into create, edit, view, and details commands. Values stay in the form context.
|
|
19292
19641
|
*/
|
|
19293
19642
|
mergeRelatedListFormOptions(command, evaluatedOptions, relatedListExcludeProperties) {
|
|
19294
|
-
const exclusions = relatedListExcludeProperties
|
|
19295
|
-
if (!exclusions
|
|
19296
|
-
(command !== 'Entity:Create' && command !== 'Entity:Edit' && command !== 'Entity:View')) {
|
|
19643
|
+
const exclusions = normalizeRelatedExcludeProperties(relatedListExcludeProperties);
|
|
19644
|
+
if (!exclusions.length || !isRelatedListExcludeFormCommand(command)) {
|
|
19297
19645
|
return evaluatedOptions;
|
|
19298
19646
|
}
|
|
19299
19647
|
return {
|
|
19300
19648
|
...evaluatedOptions,
|
|
19301
|
-
excludeProperties:
|
|
19649
|
+
excludeProperties: [
|
|
19650
|
+
...new Set([...normalizeRelatedExcludeProperties(evaluatedOptions['excludeProperties']), ...exclusions]),
|
|
19651
|
+
],
|
|
19302
19652
|
};
|
|
19303
19653
|
}
|
|
19304
19654
|
/**
|
|
@@ -19983,8 +20333,7 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
19983
20333
|
}
|
|
19984
20334
|
const relatedExcludes = listOpts['excludeProperties'];
|
|
19985
20335
|
const exclusionsFromList = relatedExcludes?.filter(Boolean) ?? [];
|
|
19986
|
-
if (exclusionsFromList.length &&
|
|
19987
|
-
(command === 'Entity:Create' || command === 'Entity:Edit')) {
|
|
20336
|
+
if (exclusionsFromList.length && isRelatedListExcludeFormCommand(command)) {
|
|
19988
20337
|
const existing = (options['excludeProperties'] ?? []).slice();
|
|
19989
20338
|
options = merge({}, options);
|
|
19990
20339
|
options['excludeProperties'] = [
|
|
@@ -20832,7 +21181,7 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
20832
21181
|
}
|
|
20833
21182
|
</div>
|
|
20834
21183
|
</div>
|
|
20835
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "directive", type: i1$
|
|
21184
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "directive", type: i1$5.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i6.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPEntityCardComponent, selector: "axp-entity-card", inputs: ["entity", "layout", "row", "fields", "userStylingRules", "variant", "interactive", "embedded", "elevated", "disableLookupPopover", "fillHost", "extraExpanded", "selected", "showNewBadge", "showSelection", "showClose", "primaryActions", "primaryActionLook", "secondaryActionLoader"], outputs: ["extraExpandedChange", "selectionChange", "commandClick", "closeClick"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
20836
21185
|
}
|
|
20837
21186
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityListWidgetViewComponent, decorators: [{
|
|
20838
21187
|
type: Component,
|
|
@@ -21987,7 +22336,7 @@ const AXPLookupWidget = {
|
|
|
21987
22336
|
name: 'lookup-editor',
|
|
21988
22337
|
title: 'Lookup',
|
|
21989
22338
|
categories: [],
|
|
21990
|
-
groups: [AXPWidgetGroupEnum.EntityWidget],
|
|
22339
|
+
groups: [AXPWidgetGroupEnum.EntityWidget, AXPWidgetGroupEnum.FormElement],
|
|
21991
22340
|
defaultFilterWidgetName: 'lookup-filter',
|
|
21992
22341
|
type: 'editor',
|
|
21993
22342
|
icon: 'fa-light fa-list-radio',
|
|
@@ -22018,7 +22367,7 @@ const AXPLookupWidget = {
|
|
|
22018
22367
|
interface: {
|
|
22019
22368
|
name: 'entity',
|
|
22020
22369
|
path: 'options.entity',
|
|
22021
|
-
type: AXPWidgetsCatalog.
|
|
22370
|
+
type: AXPWidgetsCatalog.entityDefinitionProvider,
|
|
22022
22371
|
},
|
|
22023
22372
|
},
|
|
22024
22373
|
visible: true,
|
|
@@ -24277,7 +24626,7 @@ class AXPLookupWidgetTablePanelComponent {
|
|
|
24277
24626
|
return Boolean(item[this.disabledField()]);
|
|
24278
24627
|
}
|
|
24279
24628
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetTablePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24280
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetTablePanelComponent, isStandalone: true, selector: "axp-lookup-widget-table-panel", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, parentField: { classPropertyName: "parentField", publicName: "parentField", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenField: { classPropertyName: "hasChildrenField", publicName: "hasChildrenField", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, highlightText: { classPropertyName: "highlightText", publicName: "highlightText", isSignal: true, isRequired: false, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", rowAction: "rowAction" }, host: { properties: { "class.ax-lookup-multi-column-tree": "!!parentField()", "style.height.px": "tableHeight()" }, classAttribute: "ax-lookup-multi-column block min-h-0" }, viewQueries: [{ propertyName: "tableRef", first: true, predicate: AXDataTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-data-table\n class=\"ax-lookup-multi-column-table\"\n look=\"minimal\"\n [dataSource]=\"parentField() ? dataSource() : tableDataSource\"\n [parentField]=\"parentField() ?? ''\"\n [hasChildrenField]=\"hasChildrenField()\"\n [itemHeight]=\"itemHeight()\"\n [alternative]=\"alternate()\"\n [highlightText]=\"highlightText()\"\n [loading]=\"loadingConfig()\"\n [paging]=\"false\"\n [showHeader]=\"true\"\n [fixedHeader]=\"true\"\n [showFooter]=\"false\"\n [allowReordering]=\"false\"\n [rowCssClass]=\"resolveRowCssClass\"\n (onRowClick)=\"handleRowClick($event)\"\n>\n @for (column of visibleColumns(); track column.name) {\n <axp-widget-column-renderer\n [expandHandler]=\"$index === 0 && !!parentField()\"\n [caption]=\"column.title\"\n [customWidth]=\"resolveColumnWidth(column)\"\n [node]=\"column.node\"\n ></axp-widget-column-renderer>\n }\n <!-- ----- Entity row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"primaryRowActionColumnWidth()\"\n [items]=\"primaryRowActionItems()\"\n (onItemClick)=\"handleRowActionClick($event)\"\n ></ax-command-column>\n }\n @if (hasRowActionDropdown()) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowActionItems\"\n (onItemClick)=\"handleRowActionClick($event)\"\n ></ax-dropdown-command-column>\n }\n</ax-data-table>\n", styles: [":host ax-data-table.ax-lookup-multi-column-table tbody tr:not(.empty-row):not(.ax-state-disabled){cursor:pointer}:host ax-data-table.ax-lookup-multi-column-table tbody tr.ax-state-disabled{cursor:not-allowed}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$
|
|
24629
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetTablePanelComponent, isStandalone: true, selector: "axp-lookup-widget-table-panel", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, parentField: { classPropertyName: "parentField", publicName: "parentField", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenField: { classPropertyName: "hasChildrenField", publicName: "hasChildrenField", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, highlightText: { classPropertyName: "highlightText", publicName: "highlightText", isSignal: true, isRequired: false, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", rowAction: "rowAction" }, host: { properties: { "class.ax-lookup-multi-column-tree": "!!parentField()", "style.height.px": "tableHeight()" }, classAttribute: "ax-lookup-multi-column block min-h-0" }, viewQueries: [{ propertyName: "tableRef", first: true, predicate: AXDataTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-data-table\n class=\"ax-lookup-multi-column-table\"\n look=\"minimal\"\n [dataSource]=\"parentField() ? dataSource() : tableDataSource\"\n [parentField]=\"parentField() ?? ''\"\n [hasChildrenField]=\"hasChildrenField()\"\n [itemHeight]=\"itemHeight()\"\n [alternative]=\"alternate()\"\n [highlightText]=\"highlightText()\"\n [loading]=\"loadingConfig()\"\n [paging]=\"false\"\n [showHeader]=\"true\"\n [fixedHeader]=\"true\"\n [showFooter]=\"false\"\n [allowReordering]=\"false\"\n [rowCssClass]=\"resolveRowCssClass\"\n (onRowClick)=\"handleRowClick($event)\"\n>\n @for (column of visibleColumns(); track column.name) {\n <axp-widget-column-renderer\n [expandHandler]=\"$index === 0 && !!parentField()\"\n [caption]=\"column.title\"\n [customWidth]=\"resolveColumnWidth(column)\"\n [node]=\"column.node\"\n ></axp-widget-column-renderer>\n }\n <!-- ----- Entity row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"primaryRowActionColumnWidth()\"\n [items]=\"primaryRowActionItems()\"\n (onItemClick)=\"handleRowActionClick($event)\"\n ></ax-command-column>\n }\n @if (hasRowActionDropdown()) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowActionItems\"\n (onItemClick)=\"handleRowActionClick($event)\"\n ></ax-dropdown-command-column>\n }\n</ax-data-table>\n", styles: [":host ax-data-table.ax-lookup-multi-column-table tbody tr:not(.empty-row):not(.ax-state-disabled){cursor:pointer}:host ax-data-table.ax-lookup-multi-column-table tbody tr.ax-state-disabled{cursor:not-allowed}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$6.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: i1$6.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i1$6.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "emptyStateTemplate", "emptyStateText", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$5.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "columnKey", "node", "footerTemplate", "expandHandler", "sortEnabled", "headerSortDirection", "headerSortPriority", "columnFixed", "cellTemplate", "headerTemplate"], outputs: ["sortToggle"] }, { kind: "ngmodule", type: AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24281
24630
|
}
|
|
24282
24631
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetTablePanelComponent, decorators: [{
|
|
24283
24632
|
type: Component,
|
|
@@ -24620,7 +24969,7 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
|
|
|
24620
24969
|
{ provide: AXComponent, useExisting: AXPLookupWidgetTableHostComponent },
|
|
24621
24970
|
{ provide: AXClearableComponent, useExisting: AXPLookupWidgetTableHostComponent },
|
|
24622
24971
|
{ provide: AXValuableComponent, useExisting: AXPLookupWidgetTableHostComponent },
|
|
24623
|
-
], viewQueries: [{ propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-solid ax-default ax-lookup-trigger w-full\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: valueItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!searchable()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !searchable()\"\n [attr.inputmode]=\"searchable() ? null : 'none'\"\n [value]=\"triggerInputValue()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <ng-content select=\"ax-suffix\"></ng-content>\n\n <button type=\"button\" class=\"ax-general-button-icon\" tabindex=\"-1\" [disabled]=\"disabled() || readonly()\">\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n\n <ng-content select=\"ax-validation-rule\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"expanded.set(false)\">\n <axp-lookup-widget-table-panel\n [dataSource]=\"resolvedTableDataSource()\"\n [columns]=\"columns()\"\n [highlightText]=\"highlightQuery()\"\n [valueField]=\"valueField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"parentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [rowActions]=\"rowActions()\"\n (itemClick)=\"handleTableItemClick($event)\"\n (rowAction)=\"handleTableRowAction($event)\"\n ></axp-lookup-widget-table-panel>\n </div>\n</ax-popover>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .ax-editor-container{justify-content:flex-start;gap:var(--spacing, .25rem)}:host .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}:host .ax-lookup-value{position:relative;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}:host .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-input-overlay{position:absolute;inset:0;z-index:10;margin:0!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0!important;color:transparent;caret-color: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: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "component", type: AXPLookupWidgetTablePanelComponent, selector: "axp-lookup-widget-table-panel", inputs: ["dataSource", "columns", "valueField", "disabledField", "selectedValues", "parentField", "hasChildrenField", "itemHeight", "maxVisibleItems", "alternate", "highlightText", "rowActions"], outputs: ["itemClick", "rowAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24972
|
+
], viewQueries: [{ propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-solid ax-default ax-lookup-trigger w-full\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: valueItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!searchable()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !searchable()\"\n [attr.inputmode]=\"searchable() ? null : 'none'\"\n [value]=\"triggerInputValue()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <ng-content select=\"ax-suffix\"></ng-content>\n\n <button type=\"button\" class=\"ax-general-button-icon\" tabindex=\"-1\" [disabled]=\"disabled() || readonly()\">\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n\n <ng-content select=\"ax-validation-rule\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"expanded.set(false)\">\n <axp-lookup-widget-table-panel\n [dataSource]=\"resolvedTableDataSource()\"\n [columns]=\"columns()\"\n [highlightText]=\"highlightQuery()\"\n [valueField]=\"valueField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"parentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [rowActions]=\"rowActions()\"\n (itemClick)=\"handleTableItemClick($event)\"\n (rowAction)=\"handleTableRowAction($event)\"\n ></axp-lookup-widget-table-panel>\n </div>\n</ax-popover>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .ax-editor-container{justify-content:flex-start;gap:var(--spacing, .25rem)}:host .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}:host .ax-lookup-value{position:relative;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}:host .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-input-overlay{position:absolute;inset:0;z-index:10;margin:0!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0!important;color:transparent;caret-color: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: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "restoreFocusOnClose", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "component", type: AXPLookupWidgetTablePanelComponent, selector: "axp-lookup-widget-table-panel", inputs: ["dataSource", "columns", "valueField", "disabledField", "selectedValues", "parentField", "hasChildrenField", "itemHeight", "maxVisibleItems", "alternate", "highlightText", "rowActions"], outputs: ["itemClick", "rowAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24624
24973
|
}
|
|
24625
24974
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetTableHostComponent, decorators: [{
|
|
24626
24975
|
type: Component,
|
|
@@ -24684,6 +25033,8 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
24684
25033
|
...(ngDevMode ? [{ debugName: "shouldFocus" }] : /* istanbul ignore next */ []));
|
|
24685
25034
|
/** Skips one {@link findByValue} pass after inline create when selection is already hydrated. */
|
|
24686
25035
|
this.skipFindByValueOnce = false;
|
|
25036
|
+
/** Ignores host `valueChange` echoes while open-form hydration is writing context. */
|
|
25037
|
+
this.hostValueCommitSuppressDepth = 0;
|
|
24687
25038
|
/** Latest {@link findByValue} run; older in-flight runs must not overwrite its result. */
|
|
24688
25039
|
this.findByValueRequestId = 0;
|
|
24689
25040
|
this.lastEditorLocaleKey = this.resolveEditorLocaleKey();
|
|
@@ -24713,18 +25064,23 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
24713
25064
|
}, /* @ts-ignore */
|
|
24714
25065
|
...(ngDevMode ? [{ debugName: "hasClearButton" }] : /* istanbul ignore next */ []));
|
|
24715
25066
|
this.customFilter = computed(() => this.options()['filter'] ?? null, { ...(ngDevMode ? { debugName: "customFilter" } : /* istanbul ignore next */ {}), equal: isEqual });
|
|
25067
|
+
/** When false, an empty cascade filter does not lock the editor. Explicit `disabled` is independent. */
|
|
25068
|
+
this.waitForCascade = computed(() => this.options()['waitForCascade'] ?? true, /* @ts-ignore */
|
|
25069
|
+
...(ngDevMode ? [{ debugName: "waitForCascade" }] : /* istanbul ignore next */ []));
|
|
25070
|
+
/** Parent cascade with an empty value. Structurally empty filters and top-level not-in stay enabled. */
|
|
24716
25071
|
this.hasPendingCascadeFilter = computed(() => {
|
|
24717
|
-
if (this.filterMode()) {
|
|
24718
|
-
return false;
|
|
24719
|
-
}
|
|
24720
|
-
const rawFilter = this.customFilter();
|
|
24721
|
-
if (!rawFilter) {
|
|
25072
|
+
if (this.filterMode() || !this.waitForCascade()) {
|
|
24722
25073
|
return false;
|
|
24723
25074
|
}
|
|
24724
|
-
return
|
|
25075
|
+
return isPendingCascadeFilter(this.customFilter());
|
|
24725
25076
|
}, /* @ts-ignore */
|
|
24726
25077
|
...(ngDevMode ? [{ debugName: "hasPendingCascadeFilter" }] : /* istanbul ignore next */ []));
|
|
24727
|
-
this.isLookupDisabled = computed(() =>
|
|
25078
|
+
this.isLookupDisabled = computed(() => {
|
|
25079
|
+
if (this.isDisabled()) {
|
|
25080
|
+
return true;
|
|
25081
|
+
}
|
|
25082
|
+
return this.hasPendingCascadeFilter();
|
|
25083
|
+
}, /* @ts-ignore */
|
|
24728
25084
|
...(ngDevMode ? [{ debugName: "isLookupDisabled" }] : /* istanbul ignore next */ []));
|
|
24729
25085
|
this.placeholder = computed(() => this.options()['placeholder'] ?? '', /* @ts-ignore */
|
|
24730
25086
|
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
@@ -24955,7 +25311,13 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
24955
25311
|
}
|
|
24956
25312
|
}
|
|
24957
25313
|
else {
|
|
24958
|
-
this.
|
|
25314
|
+
const releaseHostCommit = this.holdHostValueCommit();
|
|
25315
|
+
try {
|
|
25316
|
+
this.clear();
|
|
25317
|
+
}
|
|
25318
|
+
finally {
|
|
25319
|
+
releaseHostCommit();
|
|
25320
|
+
}
|
|
24959
25321
|
}
|
|
24960
25322
|
}
|
|
24961
25323
|
}, /* @ts-ignore */
|
|
@@ -25099,6 +25461,9 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25099
25461
|
*/
|
|
25100
25462
|
handleLookupModelChange(value) {
|
|
25101
25463
|
this.boundValue.set(value);
|
|
25464
|
+
if (this.hostValueCommitSuppressDepth > 0 || this.isHydrating()) {
|
|
25465
|
+
return;
|
|
25466
|
+
}
|
|
25102
25467
|
this.commitLookupSelection(value);
|
|
25103
25468
|
}
|
|
25104
25469
|
commitLookupSelection(value) {
|
|
@@ -25204,6 +25569,29 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25204
25569
|
}
|
|
25205
25570
|
}
|
|
25206
25571
|
async findByValue() {
|
|
25572
|
+
const releaseHostCommit = this.holdHostValueCommit();
|
|
25573
|
+
try {
|
|
25574
|
+
await this.resolveLookupSelection();
|
|
25575
|
+
}
|
|
25576
|
+
finally {
|
|
25577
|
+
releaseHostCommit();
|
|
25578
|
+
}
|
|
25579
|
+
}
|
|
25580
|
+
/** Ignores the editor echo while context is applied from outside the control. */
|
|
25581
|
+
holdHostValueCommit() {
|
|
25582
|
+
this.hostValueCommitSuppressDepth += 1;
|
|
25583
|
+
let released = false;
|
|
25584
|
+
return () => {
|
|
25585
|
+
if (released) {
|
|
25586
|
+
return;
|
|
25587
|
+
}
|
|
25588
|
+
released = true;
|
|
25589
|
+
setTimeout(() => {
|
|
25590
|
+
this.hostValueCommitSuppressDepth = Math.max(0, this.hostValueCommitSuppressDepth - 1);
|
|
25591
|
+
}, 0);
|
|
25592
|
+
};
|
|
25593
|
+
}
|
|
25594
|
+
async resolveLookupSelection() {
|
|
25207
25595
|
const rawValue = this.getValue();
|
|
25208
25596
|
const hydration = this.getHydrationOptions();
|
|
25209
25597
|
const ids = getLookupSelectionIds(rawValue, hydration);
|
|
@@ -25213,6 +25601,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25213
25601
|
}
|
|
25214
25602
|
const currentItems = this.selectedItems();
|
|
25215
25603
|
if (areLookupSelectionItemsHydrated(rawValue, currentItems, hydration)) {
|
|
25604
|
+
this.exposeHydratedSelection(currentItems);
|
|
25216
25605
|
this.setItems(currentItems, false);
|
|
25217
25606
|
return;
|
|
25218
25607
|
}
|
|
@@ -25241,19 +25630,20 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25241
25630
|
queryList: (request) => entityDataAccessor.query(request),
|
|
25242
25631
|
onRow: (key, row) => this.lookupByKeyCache.remember(entityKey, key, row),
|
|
25243
25632
|
});
|
|
25244
|
-
const
|
|
25633
|
+
const resolvedRows = (await Promise.all(ids.map(async (id) => {
|
|
25245
25634
|
const existing = currentItems.find((item) => isSameLookupKey(get(item, valueField), id));
|
|
25246
25635
|
if (existing != null && isLookupItemHydrated(existing, hydration)) {
|
|
25247
|
-
return existing;
|
|
25636
|
+
return { raw: existing, display: existing };
|
|
25248
25637
|
}
|
|
25249
25638
|
const fetched = fetchedById.get(id) ?? fetchedById.get(String(id));
|
|
25250
25639
|
if (fetched == null) {
|
|
25251
25640
|
return null;
|
|
25252
25641
|
}
|
|
25253
|
-
return this.decorateLookupItem(fetched);
|
|
25254
|
-
}))).filter((
|
|
25642
|
+
return { raw: fetched, display: await this.decorateLookupItem(fetched) };
|
|
25643
|
+
}))).filter((row) => row != null);
|
|
25255
25644
|
if (requestId === this.findByValueRequestId) {
|
|
25256
|
-
this.
|
|
25645
|
+
this.exposeHydratedSelection(resolvedRows.map((row) => row.raw));
|
|
25646
|
+
this.setItems(resolvedRows.map((row) => row.display), false);
|
|
25257
25647
|
}
|
|
25258
25648
|
}
|
|
25259
25649
|
catch (error) {
|
|
@@ -25341,6 +25731,22 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25341
25731
|
this.endHydration();
|
|
25342
25732
|
}
|
|
25343
25733
|
}
|
|
25734
|
+
/** Fills empty expose targets from the resolved row without running triggers. */
|
|
25735
|
+
exposeHydratedSelection(items) {
|
|
25736
|
+
if (!this.hasValue(this.getValue())) {
|
|
25737
|
+
return;
|
|
25738
|
+
}
|
|
25739
|
+
const writes = resolveWidgetExposeHydrateWrites({
|
|
25740
|
+
expose: castArray(this.expose() ?? []),
|
|
25741
|
+
items,
|
|
25742
|
+
multiple: this.multiple() === true,
|
|
25743
|
+
widgetPath: this.fullPath(),
|
|
25744
|
+
readTarget: (path) => this.contextService.getValue(path),
|
|
25745
|
+
});
|
|
25746
|
+
for (const write of writes) {
|
|
25747
|
+
this.contextService.update(write.path, write.value, { origin: 'hydrate' });
|
|
25748
|
+
}
|
|
25749
|
+
}
|
|
25344
25750
|
/**
|
|
25345
25751
|
* Writes expose targets into context using per-path updates.
|
|
25346
25752
|
* Avoids `contextService.patch()` with nested objects: patch shallow-merges top-level keys only,
|
|
@@ -25532,7 +25938,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
25532
25938
|
this.shouldFocus.set(true);
|
|
25533
25939
|
}
|
|
25534
25940
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
25535
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetEditComponent, isStandalone: true, selector: "axp-lookup-widget-edit", host: { classAttribute: "w-full" }, viewQueries: [{ propertyName: "lookup", first: true, predicate: AXLookupComponent, descendants: true, isSignal: true }, { propertyName: "tableLookupHost", first: true, predicate: AXPLookupWidgetTableHostComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (entityDef() && editorKey()) {\n <!-- ----- Entity lookup editor ----- -->\n <div class=\"flex items-center gap-1 w-full\">\n <!--------------------------------------------------------------->\n <!-- ----- Inline ax-lookup / table host (popup look adds magnifier suffix) ----- -->\n @if (effectiveDataSource(); as dataSource) {\n <!-- ----- Multi-column modes: platform widget column renderer ----- -->\n @if (isTableLookupMode()) {\n <axp-lookup-widget-table-host\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [columns]=\"lookupWidgetTableColumns()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [disabledField]=\"'disabled'\"\n [parentField]=\"lookupMode() === 'multi-column-tree' ? treeParentField() : undefined\"\n [treeDataSource]=\"lookupMode() === 'multi-column-tree' ? entityTreeDataSource() : undefined\"\n [searchFields]=\"lookupTreeSearchFields()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [selectedTemplate]=\"lookupItemTemplate\"\n [rowActions]=\"rowActionsHandler()\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </axp-lookup-widget-table-host>\n }\n <!-- ----- List / tree chip modes: ax-lookup ----- -->\n @else {\n <ax-lookup\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [mode]=\"lookupMode()\"\n [treeParentField]=\"treeParentField()\"\n [dataSource]=\"dataSource\"\n [treeDataSource]=\"entityTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [itemTemplate]=\"\n $any(\n multiple()\n ? hasRowActionPrimary()\n ? lookupListItemWithActionsTemplate\n : lookupItemTemplate\n : lookupDropDownListItemTemplate\n )\n \"\n [selectedTemplate]=\"lookupItemTemplate\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </ax-lookup>\n }\n }\n <!--------------------------------------------------------------->\n <!-- ----- Inline create for the lookup entity ----- -->\n @if (resolvedCreate().enabled) {\n <ax-button\n color=\"primary\"\n look=\"twotone\"\n [disabled]=\"isLookupDisabled() || isLoading()\"\n (onClick)=\"handleCreateClick($event)\"\n [title]=\"'@general:actions.create.title' | translate | async\"\n >\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n }\n </div>\n}\n\n<!-- ----- Lookup item and selected-value label ----- -->\n<ng-template #lookupItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"ax-lookup-option-text\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n</ng-template>\n<!-- ----- Drop-down-list rows: library skips .ax-lookup-option chrome when itemTemplate is set ----- -->\n<ng-template #lookupDropDownListItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex h-full w-full min-w-0 items-center gap-1 px-3 text-sm\">\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n <!-- ----- Primary row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n }\n </span>\n</ng-template>\n<!-- ----- Multi-select list rows with row actions ----- -->\n<ng-template #lookupListItemWithActionsTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex w-full min-w-0 items-center gap-1\">\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n </span>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "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: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "component", type: AXHighlightTextComponent, selector: "ax-highlight-text", inputs: ["text", "query", "highlightDisabled", "highlightOptions"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "component", type: AXPLookupWidgetTableHostComponent, selector: "axp-lookup-widget-table-host", inputs: ["name", "placeholder", "caption", "searchPlaceholder", "dataSource", "treeDataSource", "columns", "valueField", "textField", "disabledField", "parentField", "hasChildrenField", "searchFields", "value", "valueItems", "disabled", "readonly", "searchable", "selectedTemplate", "rowActions"], outputs: ["valueChange", "onItemSelected"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25941
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetEditComponent, isStandalone: true, selector: "axp-lookup-widget-edit", host: { classAttribute: "w-full" }, viewQueries: [{ propertyName: "lookup", first: true, predicate: AXLookupComponent, descendants: true, isSignal: true }, { propertyName: "tableLookupHost", first: true, predicate: AXPLookupWidgetTableHostComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (entityDef() && editorKey()) {\n <!-- ----- Entity lookup editor ----- -->\n <div class=\"flex items-center gap-1 w-full\">\n <!--------------------------------------------------------------->\n <!-- ----- Inline ax-lookup / table host (popup look adds magnifier suffix) ----- -->\n @if (effectiveDataSource(); as dataSource) {\n <!-- ----- Multi-column modes: platform widget column renderer ----- -->\n @if (isTableLookupMode()) {\n <axp-lookup-widget-table-host\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [columns]=\"lookupWidgetTableColumns()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [disabledField]=\"'disabled'\"\n [parentField]=\"lookupMode() === 'multi-column-tree' ? treeParentField() : undefined\"\n [treeDataSource]=\"lookupMode() === 'multi-column-tree' ? entityTreeDataSource() : undefined\"\n [searchFields]=\"lookupTreeSearchFields()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [selectedTemplate]=\"lookupItemTemplate\"\n [rowActions]=\"rowActionsHandler()\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </axp-lookup-widget-table-host>\n }\n <!-- ----- List / tree chip modes: ax-lookup ----- -->\n @else {\n <ax-lookup\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [mode]=\"lookupMode()\"\n [treeParentField]=\"treeParentField()\"\n [dataSource]=\"dataSource\"\n [treeDataSource]=\"entityTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [itemTemplate]=\"$any(multiple() ? lookupListItemTemplate : lookupDropDownListItemTemplate)\"\n [selectedTemplate]=\"lookupItemTemplate\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </ax-lookup>\n }\n }\n <!--------------------------------------------------------------->\n <!-- ----- Inline create for the lookup entity ----- -->\n @if (resolvedCreate().enabled) {\n <ax-button\n color=\"primary\"\n look=\"twotone\"\n [disabled]=\"isLookupDisabled() || isLoading()\"\n (onClick)=\"handleCreateClick($event)\"\n [title]=\"'@general:actions.create.title' | translate | async\"\n >\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n }\n </div>\n}\n\n<!-- ----- Lookup item and selected-value label ----- -->\n<ng-template #lookupItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"ax-lookup-option-text\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n</ng-template>\n<!-- ----- Drop-down-list rows: library skips .ax-lookup-option chrome when itemTemplate is set ----- -->\n<ng-template #lookupDropDownListItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex h-full w-full min-w-0 items-center gap-1 px-3 text-sm\">\n @let label = (getLookupItemLabel(item) | translate | async) ?? '';\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\" [axTooltip]=\"label\" [axTooltipOverflowOnly]=\"true\">\n <ax-highlight-text [text]=\"label\" [query]=\"highlightText ?? ''\"></ax-highlight-text>\n </span>\n <!-- ----- Primary row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n }\n </span>\n</ng-template>\n<!-- ----- Multi-select list rows: fixed row height, so long labels truncate (tooltip on overflow) ----- -->\n<ng-template #lookupListItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex w-full min-w-0 items-center gap-1\">\n @let label = (getLookupItemLabel(item) | translate | async) ?? '';\n <!-- Not `.ax-lookup-option-text`: the library's multi-select rule makes it `display: flex`, which drops the ellipsis. -->\n <span class=\"block min-w-0 flex-1 truncate\" [axTooltip]=\"label\" [axTooltipOverflowOnly]=\"true\">\n <ax-highlight-text [text]=\"label\" [query]=\"highlightText ?? ''\"></ax-highlight-text>\n </span>\n @if (hasRowActionPrimary()) {\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n }\n </span>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "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: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "component", type: AXHighlightTextComponent, selector: "ax-highlight-text", inputs: ["text", "query", "highlightDisabled", "highlightOptions"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "allowSelectAll", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems", "prefetch"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "component", type: AXPLookupWidgetTableHostComponent, selector: "axp-lookup-widget-table-host", inputs: ["name", "placeholder", "caption", "searchPlaceholder", "dataSource", "treeDataSource", "columns", "valueField", "textField", "disabledField", "parentField", "hasChildrenField", "searchFields", "value", "valueItems", "disabled", "readonly", "searchable", "selectedTemplate", "rowActions"], outputs: ["valueChange", "onItemSelected"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipOverflowOnly", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25536
25942
|
}
|
|
25537
25943
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetEditComponent, decorators: [{
|
|
25538
25944
|
type: Component,
|
|
@@ -25548,9 +25954,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
25548
25954
|
AXLoadingModule,
|
|
25549
25955
|
AXLookupComponent,
|
|
25550
25956
|
AXPLookupWidgetTableHostComponent,
|
|
25957
|
+
AXTooltipDirective,
|
|
25551
25958
|
AXTranslationModule,
|
|
25552
25959
|
AXValidationModule,
|
|
25553
|
-
], template: "@if (entityDef() && editorKey()) {\n <!-- ----- Entity lookup editor ----- -->\n <div class=\"flex items-center gap-1 w-full\">\n <!--------------------------------------------------------------->\n <!-- ----- Inline ax-lookup / table host (popup look adds magnifier suffix) ----- -->\n @if (effectiveDataSource(); as dataSource) {\n <!-- ----- Multi-column modes: platform widget column renderer ----- -->\n @if (isTableLookupMode()) {\n <axp-lookup-widget-table-host\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [columns]=\"lookupWidgetTableColumns()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [disabledField]=\"'disabled'\"\n [parentField]=\"lookupMode() === 'multi-column-tree' ? treeParentField() : undefined\"\n [treeDataSource]=\"lookupMode() === 'multi-column-tree' ? entityTreeDataSource() : undefined\"\n [searchFields]=\"lookupTreeSearchFields()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [selectedTemplate]=\"lookupItemTemplate\"\n [rowActions]=\"rowActionsHandler()\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </axp-lookup-widget-table-host>\n }\n <!-- ----- List / tree chip modes: ax-lookup ----- -->\n @else {\n <ax-lookup\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [mode]=\"lookupMode()\"\n [treeParentField]=\"treeParentField()\"\n [dataSource]=\"dataSource\"\n [treeDataSource]=\"entityTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [itemTemplate]=\"
|
|
25960
|
+
], template: "@if (entityDef() && editorKey()) {\n <!-- ----- Entity lookup editor ----- -->\n <div class=\"flex items-center gap-1 w-full\">\n <!--------------------------------------------------------------->\n <!-- ----- Inline ax-lookup / table host (popup look adds magnifier suffix) ----- -->\n @if (effectiveDataSource(); as dataSource) {\n <!-- ----- Multi-column modes: platform widget column renderer ----- -->\n @if (isTableLookupMode()) {\n <axp-lookup-widget-table-host\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [columns]=\"lookupWidgetTableColumns()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [disabledField]=\"'disabled'\"\n [parentField]=\"lookupMode() === 'multi-column-tree' ? treeParentField() : undefined\"\n [treeDataSource]=\"lookupMode() === 'multi-column-tree' ? entityTreeDataSource() : undefined\"\n [searchFields]=\"lookupTreeSearchFields()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [selectedTemplate]=\"lookupItemTemplate\"\n [rowActions]=\"rowActionsHandler()\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </axp-lookup-widget-table-host>\n }\n <!-- ----- List / tree chip modes: ax-lookup ----- -->\n @else {\n <ax-lookup\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [mode]=\"lookupMode()\"\n [treeParentField]=\"treeParentField()\"\n [dataSource]=\"dataSource\"\n [treeDataSource]=\"entityTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [itemTemplate]=\"$any(multiple() ? lookupListItemTemplate : lookupDropDownListItemTemplate)\"\n [selectedTemplate]=\"lookupItemTemplate\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </ax-lookup>\n }\n }\n <!--------------------------------------------------------------->\n <!-- ----- Inline create for the lookup entity ----- -->\n @if (resolvedCreate().enabled) {\n <ax-button\n color=\"primary\"\n look=\"twotone\"\n [disabled]=\"isLookupDisabled() || isLoading()\"\n (onClick)=\"handleCreateClick($event)\"\n [title]=\"'@general:actions.create.title' | translate | async\"\n >\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n }\n </div>\n}\n\n<!-- ----- Lookup item and selected-value label ----- -->\n<ng-template #lookupItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"ax-lookup-option-text\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n</ng-template>\n<!-- ----- Drop-down-list rows: library skips .ax-lookup-option chrome when itemTemplate is set ----- -->\n<ng-template #lookupDropDownListItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex h-full w-full min-w-0 items-center gap-1 px-3 text-sm\">\n @let label = (getLookupItemLabel(item) | translate | async) ?? '';\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\" [axTooltip]=\"label\" [axTooltipOverflowOnly]=\"true\">\n <ax-highlight-text [text]=\"label\" [query]=\"highlightText ?? ''\"></ax-highlight-text>\n </span>\n <!-- ----- Primary row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n }\n </span>\n</ng-template>\n<!-- ----- Multi-select list rows: fixed row height, so long labels truncate (tooltip on overflow) ----- -->\n<ng-template #lookupListItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex w-full min-w-0 items-center gap-1\">\n @let label = (getLookupItemLabel(item) | translate | async) ?? '';\n <!-- Not `.ax-lookup-option-text`: the library's multi-select rule makes it `display: flex`, which drops the ellipsis. -->\n <span class=\"block min-w-0 flex-1 truncate\" [axTooltip]=\"label\" [axTooltipOverflowOnly]=\"true\">\n <ax-highlight-text [text]=\"label\" [query]=\"highlightText ?? ''\"></ax-highlight-text>\n </span>\n @if (hasRowActionPrimary()) {\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n }\n </span>\n</ng-template>\n" }]
|
|
25554
25961
|
}], propDecorators: { lookup: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupComponent), { isSignal: true }] }], tableLookupHost: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPLookupWidgetTableHostComponent), { isSignal: true }] }] } });
|
|
25555
25962
|
|
|
25556
25963
|
var lookupWidgetEdit_component = /*#__PURE__*/Object.freeze({
|
|
@@ -25882,6 +26289,7 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
25882
26289
|
resolvedTitle = '';
|
|
25883
26290
|
}
|
|
25884
26291
|
}
|
|
26292
|
+
const popover = this.options.popover;
|
|
25885
26293
|
await this.entityDetailPopoverService.show(detailAnchor, {
|
|
25886
26294
|
entity: this.getEntityKey(),
|
|
25887
26295
|
id,
|
|
@@ -25889,6 +26297,8 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
25889
26297
|
valueField: this.valueField,
|
|
25890
26298
|
displayTitle: resolvedTitle,
|
|
25891
26299
|
item,
|
|
26300
|
+
fields: popover?.fields,
|
|
26301
|
+
exclude: popover?.exclude,
|
|
25892
26302
|
});
|
|
25893
26303
|
}
|
|
25894
26304
|
handleItemClick(index, event) {
|
|
@@ -26344,7 +26754,7 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
26344
26754
|
return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value) || /^\d+$/.test(value);
|
|
26345
26755
|
}
|
|
26346
26756
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26347
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetColumnComponent, isStandalone: true, selector: "ng-component", inputs: { rawValue: "rawValue", rowData: "rowData" }, viewQueries: [{ propertyName: "moreButton", first: true, predicate: ["moreButton"], descendants: true, isSignal: true }, { propertyName: "lazyTrigger", first: true, predicate: ["lazyTrigger"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (isHydratedStrategy()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n <span\n class=\"min-w-0 truncate\"\n [class.cursor-pointer]=\"linkEnabled()\"\n [class.hover:text-primary]=\"linkEnabled()\"\n [class.hover:underline]=\"linkEnabled()\"\n [attr.title]=\"getItemLabel($index)\"\n (click)=\"handleItemClick($index, $event)\"\n >\n {{ getItemLabel($index) }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"text-muted\">\u2022</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n @if (hasMoreItems()) {\n <span\n class=\"absolute end-0 flex h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems(); $event.stopPropagation()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"flex min-w-0 items-center gap-1\">\n @if (displayCount() > 0) {\n <span\n class=\"min-w-0 truncate\"\n [class.cursor-pointer]=\"linkEnabled()\"\n [class.text-primary]=\"linkEnabled()\"\n [class.hover:underline]=\"linkEnabled()\"\n [attr.title]=\"summaryLabel()\"\n (click)=\"onLazySummaryClick($event)\"\n #lazyTrigger\n >\n {{ summaryLabel() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[280px] rounded-lg p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">{{ popoverHeader() }}</h3>\n </div>\n\n @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ resolveError() }}</div>\n } @else {\n <div class=\"flex max-h-64 flex-col gap-3\">\n @for (item of popoverListItems(); track $index) {\n <span\n [class.cursor-pointer]=\"linkEnabled()\"\n [class.hover:text-primary]=\"linkEnabled()\"\n [class.hover:underline]=\"linkEnabled()\"\n (click)=\"handlePopoverItemClick($index, $event)\"\n >\n {{ getPopoverItemLabel($index) }}\n </span>\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n </div>\n }\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i1$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26757
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetColumnComponent, isStandalone: true, selector: "ng-component", inputs: { rawValue: "rawValue", rowData: "rowData" }, viewQueries: [{ propertyName: "moreButton", first: true, predicate: ["moreButton"], descendants: true, isSignal: true }, { propertyName: "lazyTrigger", first: true, predicate: ["lazyTrigger"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (isHydratedStrategy()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n <span\n class=\"min-w-0 truncate\"\n [class.cursor-pointer]=\"linkEnabled()\"\n [class.hover:text-primary]=\"linkEnabled()\"\n [class.hover:underline]=\"linkEnabled()\"\n [attr.title]=\"getItemLabel($index)\"\n (click)=\"handleItemClick($index, $event)\"\n >\n {{ getItemLabel($index) }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"text-muted\">\u2022</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n @if (hasMoreItems()) {\n <span\n class=\"absolute end-0 flex h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems(); $event.stopPropagation()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"flex min-w-0 items-center gap-1\">\n @if (displayCount() > 0) {\n <span\n class=\"min-w-0 truncate\"\n [class.cursor-pointer]=\"linkEnabled()\"\n [class.text-primary]=\"linkEnabled()\"\n [class.hover:underline]=\"linkEnabled()\"\n [attr.title]=\"summaryLabel()\"\n (click)=\"onLazySummaryClick($event)\"\n #lazyTrigger\n >\n {{ summaryLabel() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[280px] rounded-lg p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">{{ popoverHeader() }}</h3>\n </div>\n\n @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ resolveError() }}</div>\n } @else {\n <div class=\"flex max-h-64 flex-col gap-3\">\n @for (item of popoverListItems(); track $index) {\n <span\n [class.cursor-pointer]=\"linkEnabled()\"\n [class.hover:text-primary]=\"linkEnabled()\"\n [class.hover:underline]=\"linkEnabled()\"\n (click)=\"handlePopoverItemClick($index, $event)\"\n >\n {{ getPopoverItemLabel($index) }}\n </span>\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n </div>\n }\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i1$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "restoreFocusOnClose", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26348
26758
|
}
|
|
26349
26759
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetColumnComponent, decorators: [{
|
|
26350
26760
|
type: Component,
|
|
@@ -26924,7 +27334,7 @@ class AXPMultiSourceSelectorComponent extends AXBasePageComponent {
|
|
|
26924
27334
|
></ax-button>
|
|
26925
27335
|
</ax-suffix>
|
|
26926
27336
|
</ax-footer>
|
|
26927
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i2$1.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "reorderable", "reorderDelay", "renderMode", "stacked", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged", "onTabsReordered"] }, { kind: "component", type: i2$1.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type:
|
|
27337
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i2$1.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "reorderable", "reorderDelay", "renderMode", "stacked", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged", "onTabsReordered"] }, { kind: "component", type: i2$1.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26928
27338
|
}
|
|
26929
27339
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPMultiSourceSelectorComponent, decorators: [{
|
|
26930
27340
|
type: Component,
|
|
@@ -27298,7 +27708,7 @@ class AXPMultiSourceSelectorWidgetEditComponent extends AXPValueWidgetComponent
|
|
|
27298
27708
|
</div>
|
|
27299
27709
|
</ng-template>
|
|
27300
27710
|
}
|
|
27301
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$
|
|
27711
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "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: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTagBoxModule }, { kind: "component", type: i6$1.AXTagBoxComponent, selector: "ax-tag-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "allowNull", "type", "look", "addOnComma", "addOnEnter", "valueField", "textField", "readonlyField", "allowDuplicateValues", "tagTemplate"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "onTagClick", "onTagDblClick", "onTagContextMenu"] }, { kind: "ngmodule", type: AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27302
27712
|
}
|
|
27303
27713
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPMultiSourceSelectorWidgetEditComponent, decorators: [{
|
|
27304
27714
|
type: Component,
|
|
@@ -28575,7 +28985,7 @@ class AXPSelectorStructureWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
28575
28985
|
} @else {
|
|
28576
28986
|
<span class="text-muted">{{ disabledHint() }}</span>
|
|
28577
28987
|
}
|
|
28578
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$
|
|
28988
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "allowSelectAll", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems", "prefetch"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i5.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "ngmodule", type: AXAccordionModule }, { kind: "component", type: i3$3.AXAccordionItemComponent, selector: "ax-accordion-item", inputs: ["isCollapsed", "icon", "textdecoration", "caption", "isLoading", "headerTemplate", "look", "disabled"], outputs: ["isCollapsedChange", "isLoadingChange", "onClick"] }, { kind: "component", type: i3$3.AXAccordionGroupComponent, selector: "ax-accordion-group", inputs: ["accordion", "activeIndex", "look", "collapsedOnItemClick"], outputs: ["activeIndexChange"] }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i4$3.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$5.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i1$5.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i6$2.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "maskPattern", "customTokens", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "onMaskChanged"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "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: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28579
28989
|
}
|
|
28580
28990
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPSelectorStructureWidgetEditComponent, decorators: [{
|
|
28581
28991
|
type: Component,
|
|
@@ -29994,26 +30404,22 @@ class AXPPageListConverter extends AXPBaseRelatedEntityConverter {
|
|
|
29994
30404
|
: {}),
|
|
29995
30405
|
};
|
|
29996
30406
|
}
|
|
30407
|
+
const declaredExcludes = normalizeRelatedExcludeProperties(relatedEntity.excludeProperties);
|
|
29997
30408
|
const createExcludes = [
|
|
29998
30409
|
...new Set([
|
|
29999
|
-
...
|
|
30410
|
+
...declaredExcludes,
|
|
30000
30411
|
...(commandName === 'Entity:Create' && foreignKeyField ? [foreignKeyField] : []),
|
|
30001
30412
|
]),
|
|
30002
30413
|
];
|
|
30003
30414
|
const excludeForCreate = commandName === 'Entity:Create' && createExcludes.length > 0;
|
|
30004
|
-
const
|
|
30005
|
-
|
|
30006
|
-
|
|
30007
|
-
const excludeForView = commandName === 'Entity:View' &&
|
|
30008
|
-
relatedEntity.excludeProperties &&
|
|
30009
|
-
relatedEntity.excludeProperties.length > 0;
|
|
30415
|
+
const excludeForForm = commandName !== 'Entity:Create' &&
|
|
30416
|
+
isRelatedListExcludeFormCommand(commandName) &&
|
|
30417
|
+
declaredExcludes.length > 0;
|
|
30010
30418
|
const mergedOptions = excludeForCreate
|
|
30011
30419
|
? { ...evaluatedOptions, excludeProperties: createExcludes }
|
|
30012
|
-
:
|
|
30013
|
-
? { ...evaluatedOptions, excludeProperties:
|
|
30014
|
-
:
|
|
30015
|
-
? { ...evaluatedOptions, excludeProperties: relatedEntity.excludeProperties }
|
|
30016
|
-
: evaluatedOptions;
|
|
30420
|
+
: excludeForForm
|
|
30421
|
+
? { ...evaluatedOptions, excludeProperties: declaredExcludes }
|
|
30422
|
+
: evaluatedOptions;
|
|
30017
30423
|
const hostContext = (context.hostContext ?? context.context);
|
|
30018
30424
|
await context.commandService.execute(commandName, {
|
|
30019
30425
|
entity: getEntityInfo(entityDef).source,
|
|
@@ -30263,7 +30669,11 @@ class AXPMainEntityContentBuilder {
|
|
|
30263
30669
|
}));
|
|
30264
30670
|
}
|
|
30265
30671
|
const mergeDetailEntities = evaluatedRelatedEntities?.filter((re) => !re.hidden && re.layout?.type === 'merge-detail');
|
|
30672
|
+
const detailExcludeProperties = new Set(normalizeRelatedExcludeProperties(dependencies?.relatedDetailExcludeProperties));
|
|
30266
30673
|
const mainPropsByGroup = (entity?.properties ?? []).reduce((acc, p) => {
|
|
30674
|
+
if (detailExcludeProperties.has(p.name)) {
|
|
30675
|
+
return acc;
|
|
30676
|
+
}
|
|
30267
30677
|
if (!acc[p.groupId])
|
|
30268
30678
|
acc[p.groupId] = [];
|
|
30269
30679
|
acc[p.groupId].push(p);
|
|
@@ -31231,7 +31641,7 @@ class AXPLayoutAdapterFactory {
|
|
|
31231
31641
|
}
|
|
31232
31642
|
return data;
|
|
31233
31643
|
}
|
|
31234
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLayoutAdapterFactory, deps: [{ token: AXPRelatedEntityConverterFactory }, { token: AXPMainEntityContentBuilder }, { token: AXPLayoutAdapterBuilder }, { token: i4$
|
|
31644
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLayoutAdapterFactory, deps: [{ token: AXPRelatedEntityConverterFactory }, { token: AXPMainEntityContentBuilder }, { token: AXPLayoutAdapterBuilder }, { token: i4$4.AXPFilterOperatorMiddlewareService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
31235
31645
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLayoutAdapterFactory, providedIn: 'root' }); }
|
|
31236
31646
|
}
|
|
31237
31647
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLayoutAdapterFactory, decorators: [{
|
|
@@ -31239,7 +31649,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
31239
31649
|
args: [{
|
|
31240
31650
|
providedIn: 'root',
|
|
31241
31651
|
}]
|
|
31242
|
-
}], ctorParameters: () => [{ type: AXPRelatedEntityConverterFactory }, { type: AXPMainEntityContentBuilder }, { type: AXPLayoutAdapterBuilder }, { type: i4$
|
|
31652
|
+
}], ctorParameters: () => [{ type: AXPRelatedEntityConverterFactory }, { type: AXPMainEntityContentBuilder }, { type: AXPLayoutAdapterBuilder }, { type: i4$4.AXPFilterOperatorMiddlewareService }] });
|
|
31243
31653
|
|
|
31244
31654
|
//#region ---- Entity Details View Adapter Loader ----
|
|
31245
31655
|
class AXPEntityDetailsViewAdapterLoader {
|
|
@@ -31252,6 +31662,7 @@ class AXPEntityDetailsViewAdapterLoader {
|
|
|
31252
31662
|
this.formatService = inject(AXFormatService);
|
|
31253
31663
|
this.commandService = inject(AXPCommandService);
|
|
31254
31664
|
this.hooks = inject(AXPHookService);
|
|
31665
|
+
this.excludeSession = inject(AXPRelatedDetailExcludeSession);
|
|
31255
31666
|
}
|
|
31256
31667
|
//#endregion
|
|
31257
31668
|
/**
|
|
@@ -31265,6 +31676,7 @@ class AXPEntityDetailsViewAdapterLoader {
|
|
|
31265
31676
|
session: this.session,
|
|
31266
31677
|
formatService: this.formatService,
|
|
31267
31678
|
commandService: this.commandService,
|
|
31679
|
+
relatedDetailExcludeProperties: this.resolveDetailExcludeProperties(moduleName, entityName, id),
|
|
31268
31680
|
};
|
|
31269
31681
|
const adapter = await this.layoutAdapterFactory.createDetailsViewAdapter(this.entityResolver, moduleName, entityName, id, dependencies);
|
|
31270
31682
|
fireEntityLifecycleHook(this.hooks, AXPEntityLifecycleHookKeys.DetailOpened, {
|
|
@@ -31274,6 +31686,14 @@ class AXPEntityDetailsViewAdapterLoader {
|
|
|
31274
31686
|
});
|
|
31275
31687
|
return adapter;
|
|
31276
31688
|
}
|
|
31689
|
+
/** History wins after refresh; the session covers in-app navigations that drop history state. */
|
|
31690
|
+
resolveDetailExcludeProperties(moduleName, entityName, id) {
|
|
31691
|
+
const fromHistory = readRelatedDetailExcludeProperties(`${moduleName}.${entityName}`, id);
|
|
31692
|
+
if (fromHistory.length > 0) {
|
|
31693
|
+
return fromHistory;
|
|
31694
|
+
}
|
|
31695
|
+
return this.excludeSession.read(`${moduleName}.${entityName}`, id);
|
|
31696
|
+
}
|
|
31277
31697
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailsViewAdapterLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
31278
31698
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailsViewAdapterLoader, providedIn: 'root' }); }
|
|
31279
31699
|
}
|
|
@@ -32719,7 +33139,7 @@ class AXPEntityModule {
|
|
|
32719
33139
|
},
|
|
32720
33140
|
{
|
|
32721
33141
|
key: 'Entity:Bulk',
|
|
32722
|
-
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-
|
|
33142
|
+
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-B8XsnrnO.mjs').then((c) => c.AXPBulkEntityCommand),
|
|
32723
33143
|
},
|
|
32724
33144
|
{
|
|
32725
33145
|
key: 'Entity:OpenList',
|
|
@@ -32881,7 +33301,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
32881
33301
|
},
|
|
32882
33302
|
{
|
|
32883
33303
|
key: 'Entity:Bulk',
|
|
32884
|
-
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-
|
|
33304
|
+
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-B8XsnrnO.mjs').then((c) => c.AXPBulkEntityCommand),
|
|
32885
33305
|
},
|
|
32886
33306
|
{
|
|
32887
33307
|
key: 'Entity:OpenList',
|
|
@@ -33206,5 +33626,5 @@ function detectEntityChanges(oldObj, newObj) {
|
|
|
33206
33626
|
* Generated bundle index. Do not edit.
|
|
33207
33627
|
*/
|
|
33208
33628
|
|
|
33209
|
-
export { AXPEntityListViewModelResolver as $, AXPEntityDefinitionRegistryService as A, AXPEntityCategoryWidgetViewComponent as B, AXPEntityCommandTriggerViewModel as C, AXPEntityCreateViewElementViewModel as D, AXPEntityCreateViewModelFactory as E, AXPEntityCreateViewSectionViewModel as F, AXPEntityDataProvider as G, AXPEntityDataProviderImpl as H, AXPEntityDataSelectorRowActionsService as I, AXPEntityDataSelectorService as J, AXPEntityDefinitionProviderWidget as K, AXPEntityDefinitionProviderWidgetEditComponent as L, AXPEntityDeletePerformService as M, AXPEntityDetailListViewModel as N, AXPEntityDetailPopoverComponent as O, AXPEntityDetailPopoverService as P, AXPEntityDetailViewModelFactory as Q, AXPEntityDetailViewModelResolver as R, AXPEntityEventDispatcherService as S, AXPEntityFormBuilderService as T, AXPEntityLifecycleHookKeys as U, AXPEntityListPersistenceModeDefault as V, AXPEntityListTableService as W, AXPEntityListToolbarService as X, AXPEntityListViewCardFieldViewModel as Y, AXPEntityListViewColumnViewModel as Z, AXPEntityListViewModelFactory as _, showOperationResultToast as a, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY as a$, AXPEntityListWidget as a0, AXPEntityListWidgetViewComponent as a1, AXPEntityMasterCreateViewModel as a2, AXPEntityMasterListCardSelectActionName as a3, AXPEntityMasterListViewModel as a4, AXPEntityMasterListViewQueryViewModel as a5, AXPEntityMasterSingleElementViewModel as a6, AXPEntityMasterSingleViewGroupViewModel as a7, AXPEntityMasterSingleViewModel as a8, AXPEntityMasterUpdateElementViewModel as a9, AXPLookupWidgetViewComponent as aA, AXPMiddlewareAbortError as aB, AXPMiddlewareEntityStorageService as aC, AXPMultiSourceDefinitionProviderContext as aD, AXPMultiSourceDefinitionProviderService as aE, AXPMultiSourceFederatedSearchService as aF, AXPMultiSourceSelectorComponent as aG, AXPMultiSourceSelectorService as aH, AXPMultiSourceSelectorWidget as aI, AXPMultiSourceSelectorWidgetColumnComponent as aJ, AXPMultiSourceSelectorWidgetEditComponent as aK, AXPMultiSourceSelectorWidgetViewComponent as aL, AXPMultiSourceType as aM, AXPOpenEntityDetailsCommand as aN, AXPOpenEntityListCommand as aO, AXPRelatedColumnEnrichmentService as aP, AXPRelatedColumnMetadataResolver as aQ, AXPSelectorStructureWidget as aR, AXPSelectorStructureWidgetColumnComponent as aS, AXPSelectorStructureWidgetEditComponent as aT, AXPSelectorStructureWidgetViewComponent as aU, AXPShowFileUploaderPopupCommand as aV, AXPTruncatedBreadcrumbComponent as aW, AXPUpdateEntityCommand as aX, AXPUpdateEntityStatusCommand as aY, AXPViewEntityDetailsCommand as aZ, AXP_APPEARANCE_SECTION_ORDER as a_, AXPEntityMasterUpdateViewModel as aa, AXPEntityMasterUpdateViewModelFactory as ab, AXPEntityMiddlewareSkipContext as ac, AXPEntityModule as ad, AXPEntityPreloadFiltersContainerComponent as ae, AXPEntityPreloadFiltersViewModel as af, AXPEntityPreloadFiltersViewModelResolver as ag, AXPEntityResolver as ah, AXPEntityRuntimeAccessorService as ai, AXPEntityService as aj, AXPEntityStorageService as ak, AXPEntityUpdateViewSectionViewModel as al, AXPFileListComponent as am, AXPFileUploaderLoadFilesQuery as an, AXPFileUploaderSaveFilesCommand as ao, AXPFileUploaderWidget as ap, AXPFileUploaderWidgetColumnComponent as aq, AXPFileUploaderWidgetEditComponent as ar, AXPFileUploaderWidgetService as as, AXPFileUploaderWidgetViewComponent as at, AXPGetEntityDetailsQuery as au, AXPLayoutOrderingConfigService as av, AXPLookupByKeyCacheService as aw, AXPLookupWidget as ax, AXPLookupWidgetColumnComponent as ay, AXPLookupWidgetEditComponent as az, buildSelectedIdsFilter as b, defaultSortPresetsMiddlewareProvider as b$, AXP_CLASSIFICATION_SECTION_ORDER as b0, AXP_CLIENT_LOCAL_DEFAULT_MAX_ITEMS as b1, AXP_CLIENT_LOCAL_PLUGIN_NAME as b2, AXP_DATA_SEEDER_TOKEN as b3, AXP_ENTITY_ACTION_PLUGIN as b4, AXP_ENTITY_CONFIG_TOKEN as b5, AXP_ENTITY_DEFINITION_LOADER as b6, AXP_ENTITY_MIDDLEWARE as b7, AXP_ENTITY_MODIFIER as b8, AXP_ENTITY_STORAGE_MIDDLEWARE as b9, axpShowFileUploaderPopupCommandDefinition as bA, axpUpdateEntityStatusCommandDefinition as bB, buildDataSourceTraceSnapshot as bC, canPersistEntityListState as bD, clientLocalPlugin as bE, cloneLayoutArrays as bF, columnOrderingMiddleware as bG, columnOrderingMiddlewareProvider as bH, columnWidthMiddleware as bI, columnWidthMiddlewareProvider as bJ, committedAttachments as bK, composeEntityMiddlewares as bL, composeEntityStorageMiddlewares as bM, computeEntityAggregates as bN, configureEntityListColumnsSettingsMigrateDrop as bO, configureEntityListColumnsSettingsVersion as bP, createColumnOrderingMiddlewareProvider as bQ, createEntityCardDisplayScope as bR, createEntityCardLogicScope as bS, createEntityMiddlewareContext as bT, createEntityStorageContext as bU, createLayoutOrderingMiddlewareProvider as bV, defaultCardLayoutMiddleware as bW, defaultCardLayoutMiddlewareProvider as bX, defaultMultiLanguageMiddleware as bY, defaultMultiLanguageMiddlewareProvider as bZ, defaultSortPresetsMiddleware as b_, AXP_LOOKUP_FILTER_DEFAULT_OPERATOR as ba, AXP_MULTI_SOURCE_DEFINITION_PROVIDER as bb, DEFAULT_COLUMN_ORDER as bc, DEFAULT_PAIR_SPAN_RULES as bd, DEFAULT_PROPERTY_ORDER as be, DEFAULT_SECTION_ORDER as bf, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE as bg, ENTITY_LIST_LAYOUT_META as bh, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY as bi, ENTITY_MASTER_LIST_TRACE_NS as bj, EntityBuilder as bk, EntityDataAccessor as bl, GALLERY_PAGE_COMPONENT_KEY as bm, TREE_CHILDREN_QUERY_TAKE as bn, actionExists as bo, applyDataSourcePagingWithoutLoad as bp, attachmentFieldCount as bq, attachmentNeedsHydration as br, attachmentsPlugin as bs, attachmentsSemanticallyEqual as bt, axpBuildEntityListPageContextSnapshot as bu, axpCreateEntityAiToolInputDefaults as bv, axpCreateEntityCommandDefinition as bw, axpDeleteEntityCommandDefinition as bx, axpOpenEntityListCommandDefinition as by, axpRunEntityListPageContextAction as bz, ATTACHMENTS_PAGE_COMPONENT_KEY as c, provideLocalEntityCatalog as c$, detectEntityChanges as c0, dispatchEntityModifiedSideEffects as c1, ensureHierarchicalRootFilter as c2, ensureLayoutPropertyView as c3, ensureLayoutSection as c4, ensureListActions as c5, entityCreateBridgeMiddleware as c6, entityDeleteBridgeMiddleware as c7, entityGetOneBridgeMiddleware as c8, entityListInstanceCurrentViewPath as c9, hasFileUploaderTitleOrDescriptionFields as cA, hydrateAttachmentFieldToFileList as cB, isAXPMiddlewareAbortError as cC, isAttachmentFieldPresentOnRow as cD, isAttachmentListEntry as cE, isAttachmentStorageRef as cF, isCategoryEntity as cG, isCategoryFilter as cH, isFileListItem as cI, isFileUploaderEditDialogAuto as cJ, isLegacyEntityDataSelectorOptions as cK, layoutOrderingMiddlewareFactory as cL, layoutOrderingMiddlewareProvider as cM, mapEntityStorageErrorToCommandResult as cN, mapLegacyEntityDataSelectorOptions as cO, mergeEntityListViewAndPersistedFilters as cP, normalizeEntityCardHeaderDisplayValue as cQ, normalizeEntityDataSelectorColumnSpecs as cR, normalizeEntityDataSelectorOptions as cS, normalizeEntityFieldToFileList as cT, normalizeEntityListPersistenceMode as cU, normalizeListPaging as cV, prefetchClientLocalRelated as cW, provideEntity as cX, provideEntityMiddlewareBridge as cY, provideEntityRealtimeHandlers as cZ, provideEntityStorageMiddlewareBridge as c_, entityListInstanceFilterPath as ca, entityListStylingRulesPath as cb, entityQueryBridgeMiddleware as cc, entityStorageCreateBridgeMiddleware as cd, entityStorageDeleteBridgeMiddleware as ce, entityStorageGetOneBridgeMiddleware as cf, entityStorageQueryBridgeMiddleware as cg, entityStorageUpdateBridgeMiddleware as ch, entityUpdateBridgeMiddleware as ci, eventDispatchMiddleware as cj, filterEntityMiddlewares as ck, filterEntityStorageMiddlewares as cl, filterSortEntityRows as cm, filterTouchesParentKey as cn, findEntityListRowDataInTree as co, fingerprintAttachmentItem as cp, fingerprintAttachments as cq, fireEntityLifecycleHook as cr, formatLookupItemDisplay as cs, formatLookupItemDisplayAsync as ct, galleryPlugin as cu, getDataSourcePageIndex as cv, getEntityListColumnsSettingsMigrateDrop as cw, getEntityListColumnsSettingsVersion as cx, getEntityListRowId as cy, getMasterInterfacePropertySortKey as cz, AXMEntityCrudService as d, readPersistedEntityListInstanceCurrentView as d0, readPersistedEntityListInstanceFilters as d1, readPersistedEntityListStylingRules as d2, resetPagingForTreeChildrenLoad as d3, resolveAttachmentFieldPath as d4, resolveEntityCardBadgeColorValue as d5, resolveEntityCardHeaderValue as d6, resolveEntityMasterFieldStylingClass as d7, resolveEntityMasterRecordStylingClass as d8, resolveEntityMasterStylingClass as d9, resolveEntityPluginDetailPageOrder as da, resolveFileUploaderEditDialog as db, resolveFileUploaderEntityScope as dc, resolveLookupDisplayField as dd, resolveLookupDisplayTemplate as de, resolveLookupEntityCacheKey as df, resolveLookupEntityKey as dg, resolveMasterInterfacePropertyOrder as dh, restoreEntityListExpandedRows as di, runEntityMiddlewarePipeline as dj, runEntityQuery as dk, runEntityStorageMiddlewarePipeline as dl, searchResultDescriptionMiddleware as dm, searchResultDescriptionMiddlewareProvider as dn, shouldLoadEntityListStateFromStorage as dp, shouldResetEntityListStateOnRouteEntry as dq, traceEntityMasterList as dr, AXMEntityCrudServiceImpl as e, AXPCategoryTreeService as f, AXPClientLocalPluginModule as g, AXPCreateEntityCommand as h, AXPDataSeederService as i, AXPDeleteEntityCommand as j, AXPDomainQueryEntityDefinitionLoader as k, AXPEditFileUploaderCommand as l, AXPEntityBulkPatchPerformService as m, newBulkExecutionId as n, AXPEntityCardComponent as o, persistedAttachments as p, AXPEntityCardFieldsResolver as q, resolveBulkFailureBody as r, settleAfterLoadingDialog as s, AXPEntityCardSelectActionName as t, AXPEntityCardSkeletonComponent as u, AXPEntityCategoryTreeSelectorComponent as v, watchBulkProgress as w, AXPEntityCategoryWidget as x, AXPEntityCategoryWidgetColumnComponent as y, AXPEntityCategoryWidgetEditComponent as z };
|
|
33210
|
-
//# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-
|
|
33629
|
+
export { AXPEntityListViewCardFieldViewModel as $, AXPEntityDefinitionRegistryService as A, AXPEntityCategoryWidget as B, AXPEntityCategoryWidgetColumnComponent as C, AXPEntityCategoryWidgetEditComponent as D, AXPEntityCategoryWidgetViewComponent as E, AXPEntityCommandTriggerViewModel as F, AXPEntityCreateViewElementViewModel as G, AXPEntityCreateViewModelFactory as H, AXPEntityCreateViewSectionViewModel as I, AXPEntityDataProvider as J, AXPEntityDataProviderImpl as K, AXPEntityDataSelectorRowActionsService as L, AXPEntityDataSelectorService as M, AXPEntityDefinitionProviderWidget as N, AXPEntityDefinitionProviderWidgetEditComponent as O, AXPEntityDeletePerformService as P, AXPEntityDetailListViewModel as Q, AXPEntityDetailPopoverComponent as R, AXPEntityDetailPopoverService as S, AXPEntityDetailViewModelFactory as T, AXPEntityDetailViewModelResolver as U, AXPEntityEventDispatcherService as V, AXPEntityFormBuilderService as W, AXPEntityLifecycleHookKeys as X, AXPEntityListPersistenceModeDefault as Y, AXPEntityListTableService as Z, AXPEntityListToolbarService as _, showOperationResultToast as a, AXPUpdateEntityStatusCommand as a$, AXPEntityListViewColumnViewModel as a0, AXPEntityListViewModelFactory as a1, AXPEntityListViewModelResolver as a2, AXPEntityListWidget as a3, AXPEntityListWidgetViewComponent as a4, AXPEntityMasterCreateViewModel as a5, AXPEntityMasterListCardSelectActionName as a6, AXPEntityMasterListViewModel as a7, AXPEntityMasterListViewQueryViewModel as a8, AXPEntityMasterSingleElementViewModel as a9, AXPLookupWidget as aA, AXPLookupWidgetColumnComponent as aB, AXPLookupWidgetEditComponent as aC, AXPLookupWidgetViewComponent as aD, AXPMiddlewareAbortError as aE, AXPMiddlewareEntityStorageService as aF, AXPMultiSourceDefinitionProviderContext as aG, AXPMultiSourceDefinitionProviderService as aH, AXPMultiSourceFederatedSearchService as aI, AXPMultiSourceSelectorComponent as aJ, AXPMultiSourceSelectorService as aK, AXPMultiSourceSelectorWidget as aL, AXPMultiSourceSelectorWidgetColumnComponent as aM, AXPMultiSourceSelectorWidgetEditComponent as aN, AXPMultiSourceSelectorWidgetViewComponent as aO, AXPMultiSourceType as aP, AXPOpenEntityDetailsCommand as aQ, AXPOpenEntityListCommand as aR, AXPRelatedColumnEnrichmentService as aS, AXPRelatedColumnMetadataResolver as aT, AXPSelectorStructureWidget as aU, AXPSelectorStructureWidgetColumnComponent as aV, AXPSelectorStructureWidgetEditComponent as aW, AXPSelectorStructureWidgetViewComponent as aX, AXPShowFileUploaderPopupCommand as aY, AXPTruncatedBreadcrumbComponent as aZ, AXPUpdateEntityCommand as a_, AXPEntityMasterSingleViewGroupViewModel as aa, AXPEntityMasterSingleViewModel as ab, AXPEntityMasterUpdateElementViewModel as ac, AXPEntityMasterUpdateViewModel as ad, AXPEntityMasterUpdateViewModelFactory as ae, AXPEntityMiddlewareSkipContext as af, AXPEntityModule as ag, AXPEntityPreloadFiltersContainerComponent as ah, AXPEntityPreloadFiltersViewModel as ai, AXPEntityPreloadFiltersViewModelResolver as aj, AXPEntityResolver as ak, AXPEntityRuntimeAccessorService as al, AXPEntityService as am, AXPEntityStorageService as an, AXPEntityUpdateViewSectionViewModel as ao, AXPFileListComponent as ap, AXPFileUploaderLoadFilesQuery as aq, AXPFileUploaderSaveFilesCommand as ar, AXPFileUploaderWidget as as, AXPFileUploaderWidgetColumnComponent as at, AXPFileUploaderWidgetEditComponent as au, AXPFileUploaderWidgetService as av, AXPFileUploaderWidgetViewComponent as aw, AXPGetEntityDetailsQuery as ax, AXPLayoutOrderingConfigService as ay, AXPLookupByKeyCacheService as az, buildSelectedIdsFilter as b, defaultMultiLanguageMiddlewareProvider as b$, AXPViewEntityDetailsCommand as b0, AXP_APPEARANCE_SECTION_ORDER as b1, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY as b2, AXP_CLASSIFICATION_SECTION_ORDER as b3, AXP_CLIENT_LOCAL_DEFAULT_MAX_ITEMS as b4, AXP_CLIENT_LOCAL_PLUGIN_NAME as b5, AXP_DATA_SEEDER_TOKEN as b6, AXP_ENTITY_ACTION_PLUGIN as b7, AXP_ENTITY_CONFIG_TOKEN as b8, AXP_ENTITY_DEFINITION_LOADER as b9, axpOpenEntityListCommandDefinition as bA, axpRunEntityListPageContextAction as bB, axpShowFileUploaderPopupCommandDefinition as bC, axpUpdateEntityStatusCommandDefinition as bD, buildDataSourceTraceSnapshot as bE, canPersistEntityListState as bF, clientLocalPlugin as bG, cloneLayoutArrays as bH, columnOrderingMiddleware as bI, columnOrderingMiddlewareProvider as bJ, columnWidthMiddleware as bK, columnWidthMiddlewareProvider as bL, committedAttachments as bM, composeEntityMiddlewares as bN, composeEntityStorageMiddlewares as bO, computeEntityAggregates as bP, configureEntityListColumnsSettingsMigrateDrop as bQ, configureEntityListColumnsSettingsVersion as bR, createColumnOrderingMiddlewareProvider as bS, createEntityCardDisplayScope as bT, createEntityCardLogicScope as bU, createEntityMiddlewareContext as bV, createEntityStorageContext as bW, createLayoutOrderingMiddlewareProvider as bX, defaultCardLayoutMiddleware as bY, defaultCardLayoutMiddlewareProvider as bZ, defaultMultiLanguageMiddleware as b_, AXP_ENTITY_MIDDLEWARE as ba, AXP_ENTITY_MODIFIER as bb, AXP_ENTITY_STORAGE_MIDDLEWARE as bc, AXP_LOOKUP_FILTER_DEFAULT_OPERATOR as bd, AXP_MULTI_SOURCE_DEFINITION_PROVIDER as be, DEFAULT_COLUMN_ORDER as bf, DEFAULT_PAIR_SPAN_RULES as bg, DEFAULT_PROPERTY_ORDER as bh, DEFAULT_SECTION_ORDER as bi, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE as bj, ENTITY_LIST_LAYOUT_META as bk, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY as bl, ENTITY_MASTER_LIST_TRACE_NS as bm, EntityBuilder as bn, EntityDataAccessor as bo, GALLERY_PAGE_COMPONENT_KEY as bp, TREE_CHILDREN_QUERY_TAKE as bq, actionExists as br, applyDataSourcePagingWithoutLoad as bs, attachmentFieldCount as bt, attachmentsPlugin as bu, attachmentsSemanticallyEqual as bv, axpBuildEntityListPageContextSnapshot as bw, axpCreateEntityAiToolInputDefaults as bx, axpCreateEntityCommandDefinition as by, axpDeleteEntityCommandDefinition as bz, readLiveAttachmentValue as c, provideEntityRealtimeHandlers as c$, defaultSortPresetsMiddleware as c0, defaultSortPresetsMiddlewareProvider as c1, detectEntityChanges as c2, dispatchEntityModifiedSideEffects as c3, ensureHierarchicalRootFilter as c4, ensureLayoutPropertyView as c5, ensureLayoutSection as c6, ensureListActions as c7, entityCreateBridgeMiddleware as c8, entityDeleteBridgeMiddleware as c9, getEntityListRowId as cA, getMasterInterfacePropertySortKey as cB, hasFileUploaderTitleOrDescriptionFields as cC, hydrateAttachmentFieldToFileList as cD, isAXPMiddlewareAbortError as cE, isAttachmentFieldPresentOnRow as cF, isAttachmentListEntry as cG, isAttachmentStorageRef as cH, isCategoryEntity as cI, isCategoryFilter as cJ, isFileListItem as cK, isFileUploaderEditDialogAuto as cL, isLegacyEntityDataSelectorOptions as cM, layoutOrderingMiddlewareFactory as cN, layoutOrderingMiddlewareProvider as cO, mapEntityStorageErrorToCommandResult as cP, mapLegacyEntityDataSelectorOptions as cQ, mergeEntityListViewAndPersistedFilters as cR, normalizeEntityCardHeaderDisplayValue as cS, normalizeEntityDataSelectorColumnSpecs as cT, normalizeEntityDataSelectorOptions as cU, normalizeEntityFieldToFileList as cV, normalizeEntityListPersistenceMode as cW, normalizeListPaging as cX, prefetchClientLocalRelated as cY, provideEntity as cZ, provideEntityMiddlewareBridge as c_, entityGetOneBridgeMiddleware as ca, entityListInstanceCurrentViewPath as cb, entityListInstanceFilterPath as cc, entityListStylingRulesPath as cd, entityQueryBridgeMiddleware as ce, entityStorageCreateBridgeMiddleware as cf, entityStorageDeleteBridgeMiddleware as cg, entityStorageGetOneBridgeMiddleware as ch, entityStorageQueryBridgeMiddleware as ci, entityStorageUpdateBridgeMiddleware as cj, entityUpdateBridgeMiddleware as ck, eventDispatchMiddleware as cl, filterEntityMiddlewares as cm, filterEntityStorageMiddlewares as cn, filterSortEntityRows as co, filterTouchesParentKey as cp, findEntityListRowDataInTree as cq, fingerprintAttachmentItem as cr, fingerprintAttachments as cs, fireEntityLifecycleHook as ct, formatLookupItemDisplay as cu, formatLookupItemDisplayAsync as cv, galleryPlugin as cw, getDataSourcePageIndex as cx, getEntityListColumnsSettingsMigrateDrop as cy, getEntityListColumnsSettingsVersion as cz, saveAttachmentsThroughEntityUpdate as d, provideEntityStorageMiddlewareBridge as d0, provideLocalEntityCatalog as d1, readPersistedEntityListInstanceCurrentView as d2, readPersistedEntityListInstanceFilters as d3, readPersistedEntityListStylingRules as d4, resetPagingForTreeChildrenLoad as d5, resolveAttachmentFieldPath as d6, resolveEntityCardBadgeColorValue as d7, resolveEntityCardHeaderValue as d8, resolveEntityMasterFieldStylingClass as d9, resolveEntityMasterRecordStylingClass as da, resolveEntityMasterStylingClass as db, resolveEntityPluginDetailPageOrder as dc, resolveFileUploaderEditDialog as dd, resolveFileUploaderEntityScope as de, resolveLookupDisplayField as df, resolveLookupDisplayTemplate as dg, resolveLookupEntityCacheKey as dh, resolveLookupEntityKey as di, resolveMasterInterfacePropertyOrder as dj, restoreEntityListExpandedRows as dk, runEntityMiddlewarePipeline as dl, runEntityQuery as dm, runEntityStorageMiddlewarePipeline as dn, searchResultDescriptionMiddleware as dp, searchResultDescriptionMiddlewareProvider as dq, shouldLoadEntityListStateFromStorage as dr, shouldResetEntityListStateOnRouteEntry as ds, traceEntityMasterList as dt, attachmentNeedsHydration as e, ATTACHMENTS_PAGE_COMPONENT_KEY as f, AXMEntityCrudService as g, AXMEntityCrudServiceImpl as h, AXPCategoryTreeService as i, AXPClientLocalPluginModule as j, AXPCreateEntityCommand as k, AXPDataSeederService as l, AXPDeleteEntityCommand as m, newBulkExecutionId as n, AXPDomainQueryEntityDefinitionLoader as o, persistedAttachments as p, AXPEditFileUploaderCommand as q, resolveBulkFailureBody as r, settleAfterLoadingDialog as s, AXPEntityBulkPatchPerformService as t, AXPEntityCardComponent as u, AXPEntityCardFieldsResolver as v, watchBulkProgress as w, AXPEntityCardSelectActionName as x, AXPEntityCardSkeletonComponent as y, AXPEntityCategoryTreeSelectorComponent as z };
|
|
33630
|
+
//# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-D2kZxLOh.mjs.map
|