@acorex/platform 20.3.0-next.4 → 20.3.0-next.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/common/index.d.ts +6 -6
  2. package/core/index.d.ts +187 -11
  3. package/fesm2022/acorex-platform-common.mjs +4 -52
  4. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-core.mjs +243 -10
  6. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-layout-entity.mjs +344 -212
  8. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-layout-views.mjs +3 -3
  10. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  11. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-X0hLRZhX.mjs → acorex-platform-themes-default-entity-master-list-view.component-gQIK6PIx.mjs} +13 -15
  12. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-gQIK6PIx.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-themes-default.mjs +2 -2
  14. package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-JC_nYunG.mjs → acorex-platform-widgets-checkbox-widget-designer.component-BXPrXy-h.mjs} +4 -4
  15. package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-JC_nYunG.mjs.map → acorex-platform-widgets-checkbox-widget-designer.component-BXPrXy-h.mjs.map} +1 -1
  16. package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-CxgKO2VI.mjs → acorex-platform-widgets-color-box-widget-designer.component-BVZ7lWm9.mjs} +5 -5
  17. package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-CxgKO2VI.mjs.map → acorex-platform-widgets-color-box-widget-designer.component-BVZ7lWm9.mjs.map} +1 -1
  18. package/fesm2022/acorex-platform-widgets.mjs +282 -210
  19. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  20. package/layout/entity/index.d.ts +80 -3
  21. package/package.json +1 -1
  22. package/widgets/index.d.ts +9 -5
  23. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-X0hLRZhX.mjs.map +0 -1
@@ -1,12 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable, computed, signal, Injector, runInInjectionContext, EnvironmentInjector, viewChild, viewChildren, linkedSignal, effect, untracked, ChangeDetectionStrategy, Component, HostBinding, ElementRef, ViewChild, NgModule } from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, computed, signal, Injector, runInInjectionContext, EnvironmentInjector, viewChild, viewChildren, linkedSignal, effect, untracked, ChangeDetectionStrategy, Component, HostBinding, input, ElementRef, ApplicationRef, createComponent, ViewChild, NgModule } from '@angular/core';
3
3
  import { castArray, get, cloneDeep, set, merge, isNil, isEmpty, sortBy } from 'lodash-es';
4
- import * as i1$2 from '@acorex/cdk/common';
4
+ import * as i1$1 from '@acorex/cdk/common';
5
5
  import { AXDataSource, AXCommonModule } from '@acorex/cdk/common';
6
6
  import { AXFormatService } from '@acorex/core/format';
7
- import { resolveActionLook, AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, getEntityInfo, AXPSettingService, AXPRefreshEvent, AXPReloadEvent, AXPCleanNestedFilters, AXPWorkflowNavigateAction, AXPToastAction, AXP_SEARCH_DEFINITION_PROVIDER } from '@acorex/platform/common';
8
- import * as i1$4 from '@acorex/platform/core';
9
- import { AXPExpressionEvaluatorService, AXPPlatformScope, AXPDistributedEventListenerService, getChangedPaths, extractValue, setSmart } from '@acorex/platform/core';
7
+ import { AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, getEntityInfo, AXPSettingService, AXPRefreshEvent, AXPReloadEvent, AXPCleanNestedFilters, AXPWorkflowNavigateAction, AXPToastAction, AXP_SEARCH_DEFINITION_PROVIDER } from '@acorex/platform/common';
8
+ import * as i1$3 from '@acorex/platform/core';
9
+ import { resolveActionLook, AXPExpressionEvaluatorService, AXPPlatformScope, AXPDistributedEventListenerService, getChangedPaths, extractValue, setSmart, AXPSystemActionType } from '@acorex/platform/core';
10
10
  import * as i2$2 from '@acorex/platform/workflow';
11
11
  import { AXPWorkflowService, ofType, createWorkFlowEvent, AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
12
12
  import * as i3$1 from '@acorex/platform/layout/builder';
@@ -15,6 +15,7 @@ import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
15
15
  import { Subject, takeUntil } from 'rxjs';
16
16
  import { AXPSessionService, AXPAuthGuard } from '@acorex/platform/auth';
17
17
  import { AXPCommandService, AXPQueryService, provideCommandSetups, provideQuerySetups } from '@acorex/platform/runtime';
18
+ import { moveItemInArray } from '@angular/cdk/drag-drop';
18
19
  import * as i8 from '@acorex/core/translation';
19
20
  import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
20
21
  import { AXDialogService } from '@acorex/components/dialog';
@@ -31,11 +32,11 @@ import { AXDropdownModule } from '@acorex/components/dropdown';
31
32
  import * as i7 from '@angular/common';
32
33
  import { CommonModule } from '@angular/common';
33
34
  import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_ALLOW_CLEAR_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_ALLOW_MULTIPLE_PROPERTY, AXPFileUploaderWidgetService } from '@acorex/platform/widgets';
34
- import * as i1$3 from '@angular/forms';
35
+ import * as i1$2 from '@angular/forms';
35
36
  import { FormsModule } from '@angular/forms';
36
- import * as i1 from '@acorex/components/loading';
37
+ import * as i4$1 from '@acorex/components/loading';
37
38
  import { AXLoadingModule } from '@acorex/components/loading';
38
- import * as i1$1 from '@acorex/components/badge';
39
+ import * as i1 from '@acorex/components/badge';
39
40
  import { AXBadgeModule } from '@acorex/components/badge';
40
41
  import * as i5$1 from '@acorex/components/form';
41
42
  import { AXFormModule } from '@acorex/components/form';
@@ -46,7 +47,7 @@ import { AXSelectBoxModule } from '@acorex/components/select-box';
46
47
  import * as i6 from '@acorex/components/tag-box';
47
48
  import { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';
48
49
  import { AXValidationModule } from '@acorex/core/validation';
49
- import * as i4$1 from '@acorex/components/data-table';
50
+ import * as i4$2 from '@acorex/components/data-table';
50
51
  import { AXDataTableModule } from '@acorex/components/data-table';
51
52
  import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
52
53
  import { AXBasePageComponent } from '@acorex/components/page';
@@ -108,7 +109,7 @@ class AXPEntityCommandTriggerViewModel {
108
109
  this.name = `${typeof action.command === 'string' ? action.command : action.command.name}&${action.name}`;
109
110
  this.options = typeof action.command === 'object' ? action.command.options : undefined;
110
111
  this.metadata = typeof action.command === 'object' ? action.command.metadata : undefined;
111
- const resolvedLook = resolveActionLook(action);
112
+ const resolvedLook = resolveActionLook(action.type);
112
113
  this.priority = action.priority;
113
114
  this.title = action.title;
114
115
  this.separated = action.separated ?? false;
@@ -1252,12 +1253,12 @@ class AXPEntityMasterListViewModel {
1252
1253
  .map((c) => {
1253
1254
  return {
1254
1255
  ...c,
1255
- width: columnWidthsMap.get(c.name),
1256
- visible: columnVisibilityMap.get(c.name) ?? c.visible,
1256
+ width: columnWidthsMap.get(c.column?.options?.dataPath ?? c.name),
1257
+ visible: columnVisibilityMap.get(c.column?.options?.dataPath ?? c.name) ?? c.visible,
1257
1258
  };
1258
1259
  }) // Update visibility
1259
- .sort((a, b) => columns.findIndex((col) => col.name === a.name) -
1260
- columns.findIndex((col) => col.name === b.name)));
1260
+ .sort((a, b) => columns.findIndex((col) => col.name === (a.column?.options?.dataPath ?? a.name)) -
1261
+ columns.findIndex((col) => col.name === (b.column?.options?.dataPath ?? b.name))));
1261
1262
  }
1262
1263
  if (Array.isArray(sorts)) {
1263
1264
  // sorts are AXPSortQuery[]; ensure we map by name
@@ -1278,10 +1279,25 @@ class AXPEntityMasterListViewModel {
1278
1279
  updateSettings((prev) => {
1279
1280
  const field = data.dataField.split('-')[1];
1280
1281
  const newSettings = { ...prev };
1281
- set(newSettings, `list.views.${this.view().name}.columns`, prev?.list?.views?.[this.view().name]?.columns?.map((c) => ({
1282
+ const existingColumns = prev?.list?.views?.[this.view().name]?.columns;
1283
+ const baseColumns = Array.isArray(existingColumns) && existingColumns.length
1284
+ ? existingColumns
1285
+ : this.allAvailableColumns().map((c) => ({
1286
+ name: c.column?.options?.dataPath ?? c.name,
1287
+ visible: c.visible,
1288
+ width: c.width,
1289
+ }));
1290
+ const updatedColumns = baseColumns.map((c) => ({
1282
1291
  ...c,
1283
1292
  width: c.name === field ? data.width : c.width,
1284
- })));
1293
+ }));
1294
+ const x = this.allAvailableColumns().map((c) => ({
1295
+ name: c.column?.options?.dataPath ?? c.name,
1296
+ visible: c.visible,
1297
+ width: c.width,
1298
+ }));
1299
+ set(newSettings, `list.views.${this.view().name}.columns`, updatedColumns);
1300
+ console.log(newSettings, `list.views.${this.view().name}.columns`);
1285
1301
  return newSettings;
1286
1302
  });
1287
1303
  break;
@@ -1289,7 +1305,7 @@ class AXPEntityMasterListViewModel {
1289
1305
  updateSettings((prev) => {
1290
1306
  const newSettings = { ...prev };
1291
1307
  set(newSettings, `list.views.${this.view().name}.columns`, data.map((c) => ({
1292
- name: c.name,
1308
+ name: c.column?.options?.dataPath ?? c.name,
1293
1309
  visible: c.visible,
1294
1310
  width: c.width,
1295
1311
  })));
@@ -1485,6 +1501,12 @@ class AXPEntityMasterListViewModel {
1485
1501
  });
1486
1502
  this.columns.set(cloned);
1487
1503
  }
1504
+ onColumnsOrderChanged(event) {
1505
+ const columns = [...this.columns()];
1506
+ moveItemInArray(columns, event.previousIndex - 1, event.currentIndex - 1);
1507
+ this.columns.set(columns);
1508
+ this.saveSettings('columnOrders', columns);
1509
+ }
1488
1510
  resetSorts() {
1489
1511
  this.applyViewSorts();
1490
1512
  }
@@ -5114,7 +5136,7 @@ class AXPLookupWidgetViewComponent extends AXPValueWidgetComponent {
5114
5136
  <span class="ax-text-muted">---</span>
5115
5137
  }
5116
5138
  }
5117
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1$1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5139
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5118
5140
  }
5119
5141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetViewComponent, decorators: [{
5120
5142
  type: Component,
@@ -5278,7 +5300,7 @@ class AXPLookupWidgetSelectorComponent extends AXBasePageComponent {
5278
5300
  }
5279
5301
  </ax-suffix>
5280
5302
  </ax-footer>
5281
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i1$2.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXFormModule }, { 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: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i4$1.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "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: i4$1.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "cellTemplate", "headerTemplate"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5303
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i1$1.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXFormModule }, { 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: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i4$2.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "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: i4$2.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "cellTemplate", "headerTemplate"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5282
5304
  }
5283
5305
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetSelectorComponent, decorators: [{
5284
5306
  type: Component,
@@ -5817,9 +5839,9 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
5817
5839
  </ax-tag-box>
5818
5840
  }
5819
5841
  }
5820
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type:
5842
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type:
5821
5843
  //
5822
- AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: 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.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTagBoxModule }, { kind: "component", type: i6.AXTagBoxComponent, selector: "ax-tag-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "allowNull", "type", "look", "addOnComma", "addOnEnter", "valueField", "textField", "readonlyField", "allowDuplicateValues"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i7$1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5844
+ AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: 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: i4$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTagBoxModule }, { kind: "component", type: i6.AXTagBoxComponent, selector: "ax-tag-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "allowNull", "type", "look", "addOnComma", "addOnEnter", "valueField", "textField", "readonlyField", "allowDuplicateValues"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i7$1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5823
5845
  }
5824
5846
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetEditComponent, decorators: [{
5825
5847
  type: Component,
@@ -5916,89 +5938,57 @@ var lookupWidgetEdit_component = /*#__PURE__*/Object.freeze({
5916
5938
  AXPLookupWidgetEditComponent: AXPLookupWidgetEditComponent
5917
5939
  });
5918
5940
 
5919
- class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
5941
+ class AXPEntityDetailPopoverComponent {
5920
5942
  constructor() {
5921
- super(...arguments);
5922
5943
  //#region ---- Dependencies ----
5923
5944
  this.commandService = inject(AXPCommandService);
5924
5945
  this.queryService = inject(AXPQueryService);
5925
5946
  //#endregion
5947
+ //#region ---- Inputs ----
5948
+ this.entity = input.required(...(ngDevMode ? [{ debugName: "entity" }] : []));
5949
+ this.entityId = input.required(...(ngDevMode ? [{ debugName: "entityId" }] : []));
5950
+ this.textField = input('title', ...(ngDevMode ? [{ debugName: "textField" }] : []));
5951
+ this.valueField = input('id', ...(ngDevMode ? [{ debugName: "valueField" }] : []));
5952
+ this.item = input(...(ngDevMode ? [undefined, { debugName: "item" }] : []));
5953
+ //#endregion
5926
5954
  //#region ---- View Children ----
5927
- this.moreButton = viewChild('moreButton', ...(ngDevMode ? [{ debugName: "moreButton" }] : []));
5928
- this.morePopover = viewChild('morePopover', ...(ngDevMode ? [{ debugName: "morePopover" }] : []));
5929
5955
  this.detailPopover = viewChild('detailPopover', ...(ngDevMode ? [{ debugName: "detailPopover" }] : []));
5930
5956
  //#endregion
5931
- //#region ---- Properties ----
5932
- this.host = inject(ElementRef);
5933
- this.valueField = this.options['valueField'] ?? 'id';
5934
- this.textField = this.options['textField'] ?? 'title';
5935
- this.entity = this.options['entity'] ?? 'title';
5936
- this.columnName = this.options['columnName'] ?? 'title';
5937
- this.maxVisible = this.options['maxVisible'] ?? 2;
5938
- //#endregion
5939
5957
  //#region ---- Signals ----
5940
- this.isMorePopoverOpen = signal(false, ...(ngDevMode ? [{ debugName: "isMorePopoverOpen" }] : []));
5941
- this.isDetailPopoverOpen = signal(false, ...(ngDevMode ? [{ debugName: "isDetailPopoverOpen" }] : []));
5942
- this.selectedItem = signal(null, ...(ngDevMode ? [{ debugName: "selectedItem" }] : []));
5943
- this.selectedItemIndex = signal(-1, ...(ngDevMode ? [{ debugName: "selectedItemIndex" }] : []));
5944
5958
  this.entityDetails = signal(null, ...(ngDevMode ? [{ debugName: "entityDetails" }] : []));
5945
5959
  this.isLoadingDetails = signal(false, ...(ngDevMode ? [{ debugName: "isLoadingDetails" }] : []));
5946
- //#endregion
5947
- //#region ---- Computed Properties ----
5948
- this.displayItems = computed(() => isNil(this.rawValue)
5949
- ? []
5950
- : castArray(this.rawValue).map((item) => this.extractItem(item)).filter((c) => c != null), ...(ngDevMode ? [{ debugName: "displayItems" }] : []));
5951
- this.allItems = computed(() => this.displayItems(), ...(ngDevMode ? [{ debugName: "allItems" }] : []));
5952
- this.visibleItems = computed(() => {
5953
- const items = this.allItems();
5954
- return items.slice(0, this.maxVisible);
5955
- }, ...(ngDevMode ? [{ debugName: "visibleItems" }] : []));
5956
- this.hasMoreItems = computed(() => {
5957
- return this.allItems().length > this.maxVisible;
5958
- }, ...(ngDevMode ? [{ debugName: "hasMoreItems" }] : []));
5959
- this.remainingItemsCount = computed(() => {
5960
- return this.allItems().length - this.maxVisible;
5961
- }, ...(ngDevMode ? [{ debugName: "remainingItemsCount" }] : []));
5962
- this.HOVER_DELAY = 3000; // 3 seconds
5963
- }
5964
- //#endregion
5965
- //#region ---- Lifecycle Methods ----
5966
- ngOnDestroy() {
5967
- this.clearHoverTimeout();
5968
- this.clearViewDetailsHoverTimeout();
5969
- this.clearVisibleItemHoverTimeout();
5960
+ this.isDetailPopoverOpen = signal(false, ...(ngDevMode ? [{ debugName: "isDetailPopoverOpen" }] : []));
5970
5961
  }
5971
5962
  //#endregion
5972
5963
  //#region ---- Public Methods ----
5973
- showMoreItems() {
5974
- this.closeDetailPopover();
5975
- this.clearAllHoverTimeouts(); // Clear all hover timeouts
5976
- this.openMorePopover();
5977
- }
5978
- onMorePopoverOpenChange(event) {
5979
- this.isMorePopoverOpen.set(event);
5980
- // Clear all hover timeouts when popover closes
5981
- if (!event) {
5982
- this.clearAllHoverTimeouts();
5983
- }
5984
- }
5985
- async showItemDetail(item, index) {
5986
- const columnData = this.rowData[this.columnName];
5987
- const id = Array.isArray(columnData) ? columnData[index] : columnData;
5988
- //
5989
- this.selectedItem.set(item);
5990
- this.selectedItemIndex.set(index);
5964
+ /**
5965
+ * Show the entity detail popover
5966
+ */
5967
+ async show(target) {
5991
5968
  this.isDetailPopoverOpen.set(true);
5992
5969
  this.isLoadingDetails.set(true);
5993
5970
  this.entityDetails.set(null);
5994
- this.closeMorePopover();
5995
- this.clearAllHoverTimeouts(); // Clear all hover timeouts
5971
+ // Open the popover immediately to display loading state
5972
+ if (this.detailPopover()) {
5973
+ const targetElement = target instanceof ElementRef ? target.nativeElement : target;
5974
+ this.detailPopover().target = targetElement;
5975
+ this.detailPopover().open();
5976
+ }
5977
+ else {
5978
+ // In case the view child is not ready yet, schedule an immediate open
5979
+ setTimeout(() => {
5980
+ if (this.detailPopover()) {
5981
+ const targetElement = target instanceof ElementRef ? target.nativeElement : target;
5982
+ this.detailPopover().target = targetElement;
5983
+ this.detailPopover().open();
5984
+ }
5985
+ }, 0);
5986
+ }
5996
5987
  // Fetch entity details using the query
5997
5988
  try {
5998
- this.detailPopover;
5999
5989
  const result = await this.queryService.fetch('Entity:GetDetails', {
6000
- entity: this.entity,
6001
- id: id
5990
+ entity: this.entity(),
5991
+ id: this.entityId()
6002
5992
  });
6003
5993
  if (result?.success) {
6004
5994
  this.entityDetails.set(result);
@@ -6010,21 +6000,11 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
6010
6000
  finally {
6011
6001
  this.isLoadingDetails.set(false);
6012
6002
  }
6013
- setTimeout(() => {
6014
- if (this.detailPopover()) {
6015
- this.detailPopover().target = this.host.nativeElement;
6016
- this.detailPopover().open();
6017
- }
6018
- }, 100);
6019
6003
  }
6020
- onDetailPopoverOpenChange(event) {
6021
- this.isDetailPopoverOpen.set(event);
6022
- // Clear all hover timeouts when popover closes
6023
- if (!event) {
6024
- this.clearAllHoverTimeouts();
6025
- }
6026
- }
6027
- closeDetailPopover() {
6004
+ /**
6005
+ * Hide the entity detail popover
6006
+ */
6007
+ hide() {
6028
6008
  this.isDetailPopoverOpen.set(false);
6029
6009
  this.entityDetails.set(null);
6030
6010
  this.isLoadingDetails.set(false);
@@ -6032,27 +6012,108 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
6032
6012
  this.detailPopover().close();
6033
6013
  }
6034
6014
  }
6015
+ onDetailPopoverOpenChange(event) {
6016
+ this.isDetailPopoverOpen.set(event);
6017
+ if (!event) {
6018
+ this.entityDetails.set(null);
6019
+ this.isLoadingDetails.set(false);
6020
+ }
6021
+ }
6035
6022
  async navigateToDetails() {
6036
- const index = this.selectedItemIndex();
6037
- const columnData = this.rowData[this.columnName];
6038
- const id = Array.isArray(columnData) ? columnData[index] : columnData;
6039
- if (id) {
6023
+ if (this.entityId()) {
6040
6024
  await this.commandService.execute("Entity:OpenDetails", {
6041
- entity: this.entity,
6042
- data: { id },
6025
+ entity: this.entity(),
6026
+ data: { id: this.entityId() },
6043
6027
  });
6044
- this.closeDetailPopover();
6045
- }
6046
- }
6047
- handleItemClick(index) {
6048
- const items = this.allItems();
6049
- if (index < items.length) {
6050
- const item = items[index];
6051
- this.showItemDetail(item, index);
6028
+ this.hide();
6052
6029
  }
6053
6030
  }
6054
6031
  //#endregion
6055
6032
  //#region ---- Helper Methods ----
6033
+ /**
6034
+ * Returns true if a value is meaningful for display (non-empty/non-null).
6035
+ */
6036
+ hasMeaningfulValue(value) {
6037
+ if (value === null || value === undefined)
6038
+ return false;
6039
+ if (typeof value === 'string')
6040
+ return value.trim().length > 0;
6041
+ if (Array.isArray(value))
6042
+ return value.length > 0;
6043
+ if (typeof value === 'object')
6044
+ return Object.keys(value).length > 0;
6045
+ return true;
6046
+ }
6047
+ /**
6048
+ * Calculates an importance score for a property based on its widget type,
6049
+ * whether it currently has a meaningful value, and metadata like title.
6050
+ */
6051
+ getPropertyImportanceScore(prop, data) {
6052
+ const schema = prop.showAs?.type ?? prop.schema;
6053
+ const importanceMap = {
6054
+ [AXPWidgetsCatalog.text]: 100,
6055
+ [AXPWidgetsCatalog.select]: 95,
6056
+ [AXPWidgetsCatalog.number]: 90,
6057
+ [AXPWidgetsCatalog.email]: 88,
6058
+ [AXPWidgetsCatalog.phone]: 87,
6059
+ [AXPWidgetsCatalog.link]: 86,
6060
+ [AXPWidgetsCatalog.dateTime]: 85,
6061
+ [AXPWidgetsCatalog.richText]: 80,
6062
+ [AXPWidgetsCatalog.largeText]: 75,
6063
+ [AXPWidgetsCatalog.contact]: 74,
6064
+ [AXPWidgetsCatalog.toggle]: 65,
6065
+ [AXPWidgetsCatalog.checkbox]: 60,
6066
+ [AXPWidgetsCatalog.color]: 40,
6067
+ };
6068
+ let score = importanceMap[schema] ?? 50;
6069
+ // Prefer fields that actually have a value for the current entity
6070
+ if (this.hasMeaningfulValue(data?.[prop.name])) {
6071
+ score += 20;
6072
+ }
6073
+ // Slight preference for human-friendly titled fields
6074
+ const hasTitle = prop.title && prop.title !== prop.name;
6075
+ if (hasTitle) {
6076
+ score += 5;
6077
+ }
6078
+ return score;
6079
+ }
6080
+ /**
6081
+ * Calculates a name-based importance score to prioritize common key fields
6082
+ * like title, description, status, and important dates.
6083
+ * Name priority MUST come before widget-type priority.
6084
+ */
6085
+ getNameImportanceScore(prop) {
6086
+ const rawName = (prop.options?.dataPath ?? prop.name ?? '').toString();
6087
+ const normalized = rawName.toLowerCase();
6088
+ const collapsed = normalized.replace(/[^a-z0-9]/g, '');
6089
+ const priorities = [
6090
+ { keys: ['title', 'name', 'subject', 'code'], score: 120 },
6091
+ { keys: ['description', 'details', 'summary', 'remark', 'remarks'], score: 110 },
6092
+ { keys: ['status', 'state', 'phase', 'stage'], score: 105 },
6093
+ { keys: ['priority', 'severity', 'rank'], score: 100 },
6094
+ { keys: ['expirydate', 'expirationdate', 'expiredate', 'duedate', 'deadline', 'enddate'], score: 98 },
6095
+ { keys: ['startdate', 'createdat', 'createdon', 'updatedat', 'updatedon'], score: 95 },
6096
+ { keys: ['owner', 'assignee', 'assignedto'], score: 92 },
6097
+ { keys: ['email', 'phone', 'mobile', 'contact'], score: 90 },
6098
+ { keys: ['category', 'type', 'label', 'tag', 'note', 'notes'], score: 85 },
6099
+ { keys: ['primary', 'active', 'active', 'enabled', 'archived', 'deleted', 'locked', 'disabled'], score: -2 } // send to bottom,
6100
+ ];
6101
+ for (const group of priorities) {
6102
+ for (const key of group.keys) {
6103
+ if (collapsed === key || collapsed.endsWith(key)) {
6104
+ return group.score;
6105
+ }
6106
+ }
6107
+ }
6108
+ // Pattern-based priorities (generic forms like validFrom/validTo, start*/end*)
6109
+ if (collapsed.endsWith('from') || collapsed.endsWith('to')) {
6110
+ return 97;
6111
+ }
6112
+ if (collapsed.startsWith('start') || collapsed.startsWith('end')) {
6113
+ return 96;
6114
+ }
6115
+ return 0;
6116
+ }
6056
6117
  getEntityPropertiesWithWidgets() {
6057
6118
  const data = this.entityDetails()?.entityData;
6058
6119
  const entityDefinition = this.entityDetails()?.entityDefinition;
@@ -6060,19 +6121,20 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
6060
6121
  return [];
6061
6122
  // Get properties from entity definition and filter by importance
6062
6123
  const importantProperties = (entityDefinition.columns ?? [])
6063
- .map(prop => {
6124
+ .map((prop, index) => {
6064
6125
  const propName = prop.options?.dataPath ?? prop.name;
6065
6126
  const schema = prop.showAs?.type ?? entityDefinition.properties.find(p => p.name === propName)?.schema.interface?.type;
6066
6127
  const title = prop.title ?? entityDefinition.properties.find(p => p.name === propName)?.title ?? prop.name;
6067
6128
  return {
6068
6129
  ...prop,
6069
6130
  schema,
6070
- title
6131
+ title,
6132
+ orderIndex: index
6071
6133
  };
6072
6134
  })
6073
6135
  .filter(prop => {
6074
6136
  // Exclude technical fields
6075
- if (prop.name === 'id' || prop.name === this.textField || prop.name === this.valueField) {
6137
+ if (prop.name === 'id' || prop.name === this.textField() || prop.name === this.valueField()) {
6076
6138
  return false;
6077
6139
  }
6078
6140
  // Only include properties that exist in the data
@@ -6108,18 +6170,26 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
6108
6170
  return false;
6109
6171
  })
6110
6172
  .sort((a, b) => {
6111
- // Sort by importance: properties with titles first, then by order if available
6173
+ // Primary: name-based importance
6174
+ const nameScoreA = this.getNameImportanceScore(a);
6175
+ const nameScoreB = this.getNameImportanceScore(b);
6176
+ if (nameScoreA !== nameScoreB)
6177
+ return nameScoreB - nameScoreA;
6178
+ // Secondary: widget/value/title based importance
6179
+ const widgetScoreA = this.getPropertyImportanceScore(a, data);
6180
+ const widgetScoreB = this.getPropertyImportanceScore(b, data);
6181
+ if (widgetScoreA !== widgetScoreB)
6182
+ return widgetScoreB - widgetScoreA;
6183
+ const aHasValue = this.hasMeaningfulValue(data?.[a.name]);
6184
+ const bHasValue = this.hasMeaningfulValue(data?.[b.name]);
6185
+ if (aHasValue !== bHasValue)
6186
+ return aHasValue ? -1 : 1;
6112
6187
  const aHasTitle = a.title && a.title !== a.name;
6113
6188
  const bHasTitle = b.title && b.title !== b.name;
6114
- if (aHasTitle && !bHasTitle)
6115
- return -1;
6116
- if (!aHasTitle && bHasTitle)
6117
- return 1;
6118
- // If both have titles, sort alphabetically
6119
- if (aHasTitle && bHasTitle) {
6120
- return a.title.localeCompare(b.title);
6121
- }
6122
- // Otherwise sort by name
6189
+ if (aHasTitle !== bHasTitle)
6190
+ return aHasTitle ? -1 : 1;
6191
+ if ((a.orderIndex ?? 0) !== (b.orderIndex ?? 0))
6192
+ return (a.orderIndex ?? 0) - (b.orderIndex ?? 0);
6123
6193
  return a.name.localeCompare(b.name);
6124
6194
  })
6125
6195
  .map(prop => {
@@ -6139,62 +6209,147 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
6139
6209
  .slice(0, 7); // Limit to 7 most important fields
6140
6210
  return importantProperties;
6141
6211
  }
6142
- formatEntityDataValue(value) {
6143
- if (value === null || value === undefined)
6144
- return '---';
6145
- if (typeof value === 'string')
6146
- return value;
6147
- if (typeof value === 'number')
6148
- return value.toString();
6149
- if (typeof value === 'boolean')
6150
- return value ? 'Yes' : 'No';
6151
- if (Array.isArray(value))
6152
- return `${value.length} items`;
6153
- if (typeof value === 'object')
6154
- return 'Object';
6155
- return String(value);
6212
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6213
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.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 }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "detailPopover", first: true, predicate: ["detailPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "<ax-popover [openOn]=\"'manual'\" #detailPopover (openChange)=\"onDetailPopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[400px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold ax-text-on-lightest-surface\">\n @if (entityDetails()?.entityData?.[textField()]) {\n {{ entityDetails()?.entityData[textField()] }}\n } @else {\n {{ item()?.[textField()] }}\n }\n </h3>\n </div>\n @if (isLoadingDetails()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-py-8\">\n <ax-loading>Loading details...</ax-loading>\n </div>\n } @else if (entityDetails()) {\n <div class=\"ax-space-y-3 ax-mb-4\">\n <!-- Important Entity Data -->\n @if (entityDetails()?.entityData) {\n <axp-widgets-container [context]=\"entityDetails()?.entityData\">\n <div class=\"ax-space-y-2\">\n @for (item of getEntityPropertiesWithWidgets(); track item.name) {\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-sm ax-font-medium\">{{ item.title | translate | async }}:</span>\n <div class=\"ax-flex-1 ax-ml-2 ax-max-w-48\">\n <ng-container axp-widget-renderer [node]=\"item.node\" [mode]=\"'view'\"></ng-container>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n }\n </div>\n <div class=\"ax-flex ax-gap-2 ax-justify-end ax-sm\">\n <ax-button [color]=\"'primary'\" [look]=\"'solid'\" text=\"Open Details\" (click)=\"navigateToDetails()\"> </ax-button>\n </div>\n }\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i3$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6214
+ }
6215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverComponent, decorators: [{
6216
+ type: Component,
6217
+ args: [{ selector: 'axp-entity-detail-popover', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, AXButtonModule, AXPopoverModule, AXPLayoutBuilderModule, AXTranslationModule, AXLoadingModule], template: "<ax-popover [openOn]=\"'manual'\" #detailPopover (openChange)=\"onDetailPopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[400px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold ax-text-on-lightest-surface\">\n @if (entityDetails()?.entityData?.[textField()]) {\n {{ entityDetails()?.entityData[textField()] }}\n } @else {\n {{ item()?.[textField()] }}\n }\n </h3>\n </div>\n @if (isLoadingDetails()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-py-8\">\n <ax-loading>Loading details...</ax-loading>\n </div>\n } @else if (entityDetails()) {\n <div class=\"ax-space-y-3 ax-mb-4\">\n <!-- Important Entity Data -->\n @if (entityDetails()?.entityData) {\n <axp-widgets-container [context]=\"entityDetails()?.entityData\">\n <div class=\"ax-space-y-2\">\n @for (item of getEntityPropertiesWithWidgets(); track item.name) {\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-sm ax-font-medium\">{{ item.title | translate | async }}:</span>\n <div class=\"ax-flex-1 ax-ml-2 ax-max-w-48\">\n <ng-container axp-widget-renderer [node]=\"item.node\" [mode]=\"'view'\"></ng-container>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n }\n </div>\n <div class=\"ax-flex ax-gap-2 ax-justify-end ax-sm\">\n <ax-button [color]=\"'primary'\" [look]=\"'solid'\" text=\"Open Details\" (click)=\"navigateToDetails()\"> </ax-button>\n </div>\n }\n </div>\n</ax-popover>\n" }]
6218
+ }] });
6219
+
6220
+ class AXPEntityDetailPopoverService {
6221
+ constructor() {
6222
+ //#region ---- Dependencies ----
6223
+ this.applicationRef = inject(ApplicationRef);
6224
+ this.environmentInjector = inject(EnvironmentInjector);
6225
+ //#endregion
6226
+ //#region ---- Private Properties ----
6227
+ this.activePopoverRef = null;
6156
6228
  }
6157
6229
  //#endregion
6158
- //#region ---- Private Methods ----
6159
- onMoreButtonMouseEnter() {
6160
- // Don't trigger hover if detail popover is already open
6161
- if (this.isDetailPopoverOpen()) {
6162
- return;
6230
+ //#region ---- Public Methods ----
6231
+ /**
6232
+ * Show entity detail popover
6233
+ * @param target - The target element to position the popover
6234
+ * @param options - Configuration options for the popover
6235
+ */
6236
+ async show(target, options) {
6237
+ // Close any existing popover
6238
+ this.hide();
6239
+ // Create component dynamically
6240
+ this.activePopoverRef = createComponent(AXPEntityDetailPopoverComponent, {
6241
+ environmentInjector: this.environmentInjector,
6242
+ });
6243
+ // Set inputs
6244
+ this.activePopoverRef.setInput('entity', options.entity);
6245
+ this.activePopoverRef.setInput('entityId', options.id);
6246
+ this.activePopoverRef.setInput('textField', options.textField || 'title');
6247
+ this.activePopoverRef.setInput('valueField', options.valueField || 'id');
6248
+ this.activePopoverRef.setInput('item', options.item);
6249
+ // Attach to application
6250
+ this.applicationRef.attachView(this.activePopoverRef.hostView);
6251
+ // Append to document body
6252
+ document.body.appendChild(this.activePopoverRef.location.nativeElement);
6253
+ // Show the popover
6254
+ await this.activePopoverRef.instance.show(target);
6255
+ }
6256
+ /**
6257
+ * Hide the active popover
6258
+ */
6259
+ hide() {
6260
+ if (this.activePopoverRef) {
6261
+ this.activePopoverRef.instance.hide();
6262
+ this.applicationRef.detachView(this.activePopoverRef.hostView);
6263
+ this.activePopoverRef.destroy();
6264
+ this.activePopoverRef = null;
6163
6265
  }
6164
- this.clearHoverTimeout();
6165
- this.hoverTimeout = setTimeout(() => {
6166
- this.showMoreItems();
6167
- }, this.HOVER_DELAY);
6168
6266
  }
6169
- onMoreButtonMouseLeave() {
6170
- this.clearHoverTimeout();
6267
+ /**
6268
+ * Check if a popover is currently active
6269
+ */
6270
+ get isActive() {
6271
+ return this.activePopoverRef !== null;
6171
6272
  }
6172
- onViewDetailsMouseEnter(item, index) {
6173
- // Don't trigger hover if any popover is already open
6174
- if (this.isMorePopoverOpen() || this.isDetailPopoverOpen()) {
6175
- return;
6176
- }
6177
- this.clearViewDetailsHoverTimeout();
6178
- this.viewDetailsHoverTimeout = setTimeout(() => {
6179
- this.showItemDetail(item, index);
6180
- }, this.HOVER_DELAY);
6273
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6274
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverService, providedIn: 'root' }); }
6275
+ }
6276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityDetailPopoverService, decorators: [{
6277
+ type: Injectable,
6278
+ args: [{
6279
+ providedIn: 'root'
6280
+ }]
6281
+ }] });
6282
+
6283
+ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
6284
+ constructor() {
6285
+ super(...arguments);
6286
+ //#region ---- Dependencies ----
6287
+ this.entityDetailPopoverService = inject(AXPEntityDetailPopoverService);
6288
+ //#endregion
6289
+ //#region ---- View Children ----
6290
+ this.moreButton = viewChild('moreButton', ...(ngDevMode ? [{ debugName: "moreButton" }] : []));
6291
+ this.morePopover = viewChild('morePopover', ...(ngDevMode ? [{ debugName: "morePopover" }] : []));
6292
+ //#endregion
6293
+ //#region ---- Properties ----
6294
+ this.host = inject(ElementRef);
6295
+ this.valueField = this.options['valueField'] ?? 'id';
6296
+ this.textField = this.options['textField'] ?? 'title';
6297
+ this.entity = this.options['entity'] ?? 'title';
6298
+ this.columnName = this.options['columnName'] ?? 'title';
6299
+ this.maxVisible = this.options['maxVisible'] ?? 2;
6300
+ //#endregion
6301
+ //#region ---- Signals ----
6302
+ this.isMorePopoverOpen = signal(false, ...(ngDevMode ? [{ debugName: "isMorePopoverOpen" }] : []));
6303
+ this.selectedItemIndex = signal(-1, ...(ngDevMode ? [{ debugName: "selectedItemIndex" }] : []));
6304
+ //#endregion
6305
+ //#region ---- Computed Properties ----
6306
+ this.displayItems = computed(() => isNil(this.rawValue)
6307
+ ? []
6308
+ : castArray(this.rawValue).map((item) => this.extractItem(item)).filter((c) => c != null), ...(ngDevMode ? [{ debugName: "displayItems" }] : []));
6309
+ this.allItems = computed(() => this.displayItems(), ...(ngDevMode ? [{ debugName: "allItems" }] : []));
6310
+ this.visibleItems = computed(() => {
6311
+ const items = this.allItems();
6312
+ return items.slice(0, this.maxVisible);
6313
+ }, ...(ngDevMode ? [{ debugName: "visibleItems" }] : []));
6314
+ this.hasMoreItems = computed(() => {
6315
+ return this.allItems().length > this.maxVisible;
6316
+ }, ...(ngDevMode ? [{ debugName: "hasMoreItems" }] : []));
6317
+ this.remainingItemsCount = computed(() => {
6318
+ return this.allItems().length - this.maxVisible;
6319
+ }, ...(ngDevMode ? [{ debugName: "remainingItemsCount" }] : []));
6181
6320
  }
6182
- onViewDetailsMouseLeave() {
6183
- this.clearViewDetailsHoverTimeout();
6321
+ //#endregion
6322
+ //#region ---- Public Methods ----
6323
+ showMoreItems() {
6324
+ this.entityDetailPopoverService.hide();
6325
+ this.openMorePopover();
6184
6326
  }
6185
- onVisibleItemMouseEnter(item, index) {
6186
- // Don't trigger hover if any popover is already open
6187
- if (this.isMorePopoverOpen() || this.isDetailPopoverOpen()) {
6188
- return;
6189
- }
6190
- this.clearVisibleItemHoverTimeout();
6191
- this.visibleItemHoverTimeout = setTimeout(() => {
6192
- this.showItemDetail(item, index);
6193
- }, this.HOVER_DELAY);
6327
+ onMorePopoverOpenChange(event) {
6328
+ this.isMorePopoverOpen.set(event);
6194
6329
  }
6195
- onVisibleItemMouseLeave() {
6196
- this.clearVisibleItemHoverTimeout();
6330
+ async showItemDetail(item, index) {
6331
+ const columnData = this.rowData[this.columnName];
6332
+ const id = Array.isArray(columnData) ? columnData[index] : columnData;
6333
+ this.selectedItemIndex.set(index);
6334
+ this.closeMorePopover();
6335
+ // Show entity detail popover using the service
6336
+ await this.entityDetailPopoverService.show(this.host, {
6337
+ entity: this.entity,
6338
+ id: id,
6339
+ textField: this.textField,
6340
+ valueField: this.valueField,
6341
+ item
6342
+ });
6343
+ }
6344
+ handleItemClick(index) {
6345
+ const items = this.allItems();
6346
+ if (index < items.length) {
6347
+ const item = items[index];
6348
+ this.showItemDetail(item, index);
6349
+ }
6197
6350
  }
6351
+ //#endregion
6352
+ //#region ---- Private Methods ----
6198
6353
  openMorePopover() {
6199
6354
  if (this.morePopover() && this.moreButton()) {
6200
6355
  this.morePopover().target = this.moreButton().nativeElement;
@@ -6208,29 +6363,6 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
6208
6363
  this.isMorePopoverOpen.set(false);
6209
6364
  }
6210
6365
  }
6211
- clearHoverTimeout() {
6212
- if (this.hoverTimeout) {
6213
- clearTimeout(this.hoverTimeout);
6214
- this.hoverTimeout = null;
6215
- }
6216
- }
6217
- clearViewDetailsHoverTimeout() {
6218
- if (this.viewDetailsHoverTimeout) {
6219
- clearTimeout(this.viewDetailsHoverTimeout);
6220
- this.viewDetailsHoverTimeout = null;
6221
- }
6222
- }
6223
- clearVisibleItemHoverTimeout() {
6224
- if (this.visibleItemHoverTimeout) {
6225
- clearTimeout(this.visibleItemHoverTimeout);
6226
- this.visibleItemHoverTimeout = null;
6227
- }
6228
- }
6229
- clearAllHoverTimeouts() {
6230
- this.clearHoverTimeout();
6231
- this.clearViewDetailsHoverTimeout();
6232
- this.clearVisibleItemHoverTimeout();
6233
- }
6234
6366
  extractItem(item) {
6235
6367
  if (isNil(item)) {
6236
6368
  return null;
@@ -6246,11 +6378,11 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
6246
6378
  };
6247
6379
  }
6248
6380
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6249
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.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: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }, { propertyName: "detailPopover", first: true, predicate: ["detailPopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-gap-1 ax-items-center\">\n @if (visibleItems().length > 0) {\n @for (item of visibleItems(); track $index) {\n <span\n class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\"\n (click)=\"handleItemClick($index)\"\n (mouseenter)=\"onVisibleItemMouseEnter(item, $index)\"\n (mouseleave)=\"onVisibleItemMouseLeave()\"\n >\n {{ item[this.textField] }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"ax-text-muted\">\u2022</span>\n }\n }\n } @else {\n <span class=\"ax-text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"ax-absolute ax-flex ax-items-center ax-end-0 ax-px-1 ax-cursor-pointer ax-h-full hover:ax-primary-lighter\"\n (click)=\"showMoreItems()\"\n (mouseenter)=\"onMoreButtonMouseEnter()\"\n (mouseleave)=\"onMoreButtonMouseLeave()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n</div>\n\n<!-- More Items Popover -->\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[280px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold\">All {{ allItems().length }} Items</h3>\n </div>\n <div class=\"ax-max-h-64 ax-flex ax-flex-col ax-gap-3\">\n @for (item of allItems(); track $index) {\n <span class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\" (click)=\"showItemDetail(item, $index)\">\n {{ item[this.textField] }}\n </span>\n }\n </div>\n </div>\n</ax-popover>\n\n<!-- Item Detail Popover -->\n<ax-popover [openOn]=\"'manual'\" #detailPopover (openChange)=\"onDetailPopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[400px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold ax-text-on-lightest-surface\">\n @if (entityDetails()?.entityData?.[this.textField]) {\n {{ entityDetails()?.entityData[this.textField] }}\n } @else {\n {{ selectedItem()?.[this.textField] }}\n }\n </h3>\n </div>\n\n @if (isLoadingDetails()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-py-8\">\n <div class=\"ax-text-sm\">Loading details...</div>\n </div>\n } @else if (entityDetails()) {\n <div class=\"ax-space-y-3 ax-mb-4\">\n <!-- Important Entity Data -->\n @if (entityDetails()?.entityData) {\n <axp-widgets-container [context]=\"entityDetails()?.entityData\">\n <div class=\"ax-space-y-2\">\n @for (item of getEntityPropertiesWithWidgets(); track item.name) {\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-sm ax-font-medium\">{{ item.title | translate | async }}:</span>\n <div class=\"ax-flex-1 ax-ml-2 ax-max-w-48\">\n <ng-container axp-widget-renderer [node]=\"item.node\" [mode]=\"'view'\"></ng-container>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n }\n </div>\n }\n\n <div class=\"ax-flex ax-gap-2 ax-justify-end ax-sm\">\n <ax-button [color]=\"'primary'\" [look]=\"'solid'\" text=\"Open Details\" (click)=\"navigateToDetails()\"> </ax-button>\n </div>\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i3$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6381
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.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: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-gap-1 ax-items-center\">\n @if (visibleItems().length > 0) {\n @for (item of visibleItems(); track $index) {\n <span class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\" (click)=\"handleItemClick($index)\">\n {{ item[this.textField] }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"ax-text-muted\">\u2022</span>\n }\n }\n } @else {\n <span class=\"ax-text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"ax-absolute ax-flex ax-items-center ax-end-0 ax-px-1 ax-cursor-pointer ax-h-full hover:ax-primary-lighter\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n</div>\n\n<!-- More Items Popover -->\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[280px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold\">All {{ allItems().length }} Items</h3>\n </div>\n <div class=\"ax-max-h-64 ax-flex ax-flex-col ax-gap-3\">\n @for (item of allItems(); track $index) {\n <span class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\" (click)=\"showItemDetail(item, $index)\">\n {{ item[this.textField] }}\n </span>\n }\n </div>\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6250
6382
  }
6251
6383
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLookupWidgetColumnComponent, decorators: [{
6252
6384
  type: Component,
6253
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, AXBadgeModule, AXButtonModule, AXPopoverModule, AXPLayoutBuilderModule, AXPLayoutBuilderModule, AXTranslationModule], inputs: ['rawValue', 'rowData'], template: "<div class=\"ax-flex ax-gap-1 ax-items-center\">\n @if (visibleItems().length > 0) {\n @for (item of visibleItems(); track $index) {\n <span\n class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\"\n (click)=\"handleItemClick($index)\"\n (mouseenter)=\"onVisibleItemMouseEnter(item, $index)\"\n (mouseleave)=\"onVisibleItemMouseLeave()\"\n >\n {{ item[this.textField] }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"ax-text-muted\">\u2022</span>\n }\n }\n } @else {\n <span class=\"ax-text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"ax-absolute ax-flex ax-items-center ax-end-0 ax-px-1 ax-cursor-pointer ax-h-full hover:ax-primary-lighter\"\n (click)=\"showMoreItems()\"\n (mouseenter)=\"onMoreButtonMouseEnter()\"\n (mouseleave)=\"onMoreButtonMouseLeave()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n</div>\n\n<!-- More Items Popover -->\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[280px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold\">All {{ allItems().length }} Items</h3>\n </div>\n <div class=\"ax-max-h-64 ax-flex ax-flex-col ax-gap-3\">\n @for (item of allItems(); track $index) {\n <span class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\" (click)=\"showItemDetail(item, $index)\">\n {{ item[this.textField] }}\n </span>\n }\n </div>\n </div>\n</ax-popover>\n\n<!-- Item Detail Popover -->\n<ax-popover [openOn]=\"'manual'\" #detailPopover (openChange)=\"onDetailPopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[400px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold ax-text-on-lightest-surface\">\n @if (entityDetails()?.entityData?.[this.textField]) {\n {{ entityDetails()?.entityData[this.textField] }}\n } @else {\n {{ selectedItem()?.[this.textField] }}\n }\n </h3>\n </div>\n\n @if (isLoadingDetails()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-py-8\">\n <div class=\"ax-text-sm\">Loading details...</div>\n </div>\n } @else if (entityDetails()) {\n <div class=\"ax-space-y-3 ax-mb-4\">\n <!-- Important Entity Data -->\n @if (entityDetails()?.entityData) {\n <axp-widgets-container [context]=\"entityDetails()?.entityData\">\n <div class=\"ax-space-y-2\">\n @for (item of getEntityPropertiesWithWidgets(); track item.name) {\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-sm ax-font-medium\">{{ item.title | translate | async }}:</span>\n <div class=\"ax-flex-1 ax-ml-2 ax-max-w-48\">\n <ng-container axp-widget-renderer [node]=\"item.node\" [mode]=\"'view'\"></ng-container>\n </div>\n </div>\n }\n </div>\n </axp-widgets-container>\n }\n </div>\n }\n\n <div class=\"ax-flex ax-gap-2 ax-justify-end ax-sm\">\n <ax-button [color]=\"'primary'\" [look]=\"'solid'\" text=\"Open Details\" (click)=\"navigateToDetails()\"> </ax-button>\n </div>\n </div>\n</ax-popover>\n" }]
6385
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, AXBadgeModule, AXButtonModule, AXPopoverModule], inputs: ['rawValue', 'rowData'], template: "<div class=\"ax-flex ax-gap-1 ax-items-center\">\n @if (visibleItems().length > 0) {\n @for (item of visibleItems(); track $index) {\n <span class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\" (click)=\"handleItemClick($index)\">\n {{ item[this.textField] }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"ax-text-muted\">\u2022</span>\n }\n }\n } @else {\n <span class=\"ax-text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"ax-absolute ax-flex ax-items-center ax-end-0 ax-px-1 ax-cursor-pointer ax-h-full hover:ax-primary-lighter\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n</div>\n\n<!-- More Items Popover -->\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[280px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold\">All {{ allItems().length }} Items</h3>\n </div>\n <div class=\"ax-max-h-64 ax-flex ax-flex-col ax-gap-3\">\n @for (item of allItems(); track $index) {\n <span class=\"ax-cursor-pointer hover:ax-text-primary hover:ax-underline\" (click)=\"showItemDetail(item, $index)\">\n {{ item[this.textField] }}\n </span>\n }\n </div>\n </div>\n</ax-popover>\n" }]
6254
6386
  }] });
6255
6387
 
6256
6388
  var lookupWidgetColumn_component = /*#__PURE__*/Object.freeze({
@@ -6346,7 +6478,7 @@ class AXPTagableBoxWidgetColumnComponent extends AXPValueWidgetComponent {
6346
6478
  <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-inline-block">{{ internalValue()[0] }}</span>
6347
6479
  } }
6348
6480
  </div>
6349
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1$1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6481
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6350
6482
  }
6351
6483
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTagableBoxWidgetColumnComponent, decorators: [{
6352
6484
  type: Component,
@@ -6451,7 +6583,7 @@ class AXPTagableBoxWidgetEditComponent extends AXPValueWidgetComponent {
6451
6583
  </ax-prefix>
6452
6584
  </ax-button>
6453
6585
  </div>
6454
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { 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: AXValidationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i7$1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6586
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { 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: AXValidationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i7$1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6455
6587
  }
6456
6588
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTagableBoxWidgetEditComponent, decorators: [{
6457
6589
  type: Component,
@@ -6630,7 +6762,7 @@ class AXPTagableBoxWidgetViewComponent extends AXPValueWidgetComponent {
6630
6762
  @for (item of internalValue(); track $index) {
6631
6763
  <ax-badge [look]="'twotone'" [text]="item" color="primary"></ax-badge>
6632
6764
  }
6633
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1$1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6765
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6634
6766
  }
6635
6767
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTagableBoxWidgetViewComponent, decorators: [{
6636
6768
  type: Component,
@@ -6748,7 +6880,7 @@ class AXPWidgetSelectorWidgetEditComponent extends AXPValueWidgetComponent {
6748
6880
  <axp-widget-property-viewer [widget]="selectedWidgetNode()!" (onChanged)="handleChangeWidget($event)">
6749
6881
  </axp-widget-property-viewer>
6750
6882
  }
6751
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i2$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: 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: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget", "mode"], outputs: ["onChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6883
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i2$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: 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: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget", "mode"], outputs: ["onChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6752
6884
  }
6753
6885
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetSelectorWidgetEditComponent, decorators: [{
6754
6886
  type: Component,
@@ -7267,7 +7399,7 @@ class AXPEntityModule {
7267
7399
  },
7268
7400
  });
7269
7401
  }
7270
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, deps: [{ token: i1$4.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
7402
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, deps: [{ token: i1$3.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
7271
7403
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, imports: [RouterModule, i2$2.AXPWorkflowModule, i3$1.AXPLayoutBuilderModule] }); }
7272
7404
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPEntityModule, providers: [
7273
7405
  {
@@ -7419,7 +7551,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
7419
7551
  ]),
7420
7552
  ],
7421
7553
  }]
7422
- }], ctorParameters: () => [{ type: i1$4.AXPAppStartUpService }, { type: i0.Injector }] });
7554
+ }], ctorParameters: () => [{ type: i1$3.AXPAppStartUpService }, { type: i0.Injector }] });
7423
7555
 
7424
7556
  //#endregion
7425
7557
  //#region ---- Entity Open Details Command ----
@@ -7554,7 +7686,7 @@ function entityMasterCreateAction() {
7554
7686
  title: '@general:actions.create.title',
7555
7687
  command: 'create-entity',
7556
7688
  priority: 'primary',
7557
- type: 'create',
7689
+ type: AXPSystemActionType.Create,
7558
7690
  scope: AXPEntityCommandScope.TypeLevel,
7559
7691
  };
7560
7692
  }
@@ -7563,7 +7695,7 @@ function entityMasterBulkDeleteAction() {
7563
7695
  title: '@general:actions.delete-items.title',
7564
7696
  command: 'delete-entity',
7565
7697
  priority: 'primary',
7566
- type: 'delete',
7698
+ type: AXPSystemActionType.Delete,
7567
7699
  scope: AXPEntityCommandScope.Selected,
7568
7700
  };
7569
7701
  }
@@ -7572,7 +7704,7 @@ function entityMasterViewAction() {
7572
7704
  title: '@general:actions.view.title',
7573
7705
  command: 'open-entity',
7574
7706
  priority: 'secondary',
7575
- type: 'view',
7707
+ type: AXPSystemActionType.View,
7576
7708
  scope: AXPEntityCommandScope.Individual,
7577
7709
  default: true,
7578
7710
  };
@@ -7582,7 +7714,7 @@ function entityMasterDeleteAction() {
7582
7714
  title: '@general:actions.delete.title',
7583
7715
  command: 'delete-entity',
7584
7716
  priority: 'secondary',
7585
- type: 'delete',
7717
+ type: AXPSystemActionType.Delete,
7586
7718
  scope: AXPEntityCommandScope.Individual,
7587
7719
  };
7588
7720
  }
@@ -7615,7 +7747,7 @@ function entityDetailsCreateActions(parentId) {
7615
7747
  },
7616
7748
  },
7617
7749
  priority: 'primary',
7618
- type: 'create',
7750
+ type: AXPSystemActionType.Create,
7619
7751
  scope: AXPEntityCommandScope.TypeLevel,
7620
7752
  };
7621
7753
  }
@@ -7645,7 +7777,7 @@ function entityDetailsEditAction() {
7645
7777
  title: '@general:actions.edit.title',
7646
7778
  command: 'quick-modify-entity',
7647
7779
  priority: 'secondary',
7648
- type: 'update',
7780
+ type: AXPSystemActionType.Update,
7649
7781
  default: true,
7650
7782
  scope: AXPEntityCommandScope.Individual,
7651
7783
  };
@@ -7656,7 +7788,7 @@ function entityOverrideDetailsViewAction() {
7656
7788
  command: 'open-entity',
7657
7789
  priority: 'secondary',
7658
7790
  hidden: true,
7659
- type: 'view',
7791
+ type: AXPSystemActionType.View,
7660
7792
  scope: AXPEntityCommandScope.Individual,
7661
7793
  };
7662
7794
  }
@@ -7683,7 +7815,7 @@ function entityDetailsReferenceCreateActions(type) {
7683
7815
  },
7684
7816
  },
7685
7817
  priority: 'primary',
7686
- type: 'create',
7818
+ type: AXPSystemActionType.Create,
7687
7819
  scope: AXPEntityCommandScope.TypeLevel,
7688
7820
  },
7689
7821
  entityDetailsEditAction(),
@@ -7750,5 +7882,5 @@ const eventDispatchMiddleware = {
7750
7882
  * Generated bundle index. Do not edit.
7751
7883
  */
7752
7884
 
7753
- export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityApplyUpdatesAction, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPGetEntityDetailsQuery, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, DEFAULT_COLUMN_WIDTHS, actionExists, columnWidthMiddlewareFactory, columnWidthMiddlewareProvider, createColumnWidthMiddlewareProvider, createModifierContext, detectEntityChanges, ensureListActions, entityDetailsCreateActions, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware };
7885
+ export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityApplyUpdatesAction, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPGetEntityDetailsQuery, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, DEFAULT_COLUMN_WIDTHS, actionExists, columnWidthMiddlewareFactory, columnWidthMiddlewareProvider, createColumnWidthMiddlewareProvider, createModifierContext, detectEntityChanges, ensureListActions, entityDetailsCreateActions, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware };
7754
7886
  //# sourceMappingURL=acorex-platform-layout-entity.mjs.map