@acorex/platform 20.7.9 → 20.7.10

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 (21) hide show
  1. package/common/index.d.ts +18 -1
  2. package/core/index.d.ts +13 -7
  3. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-core.mjs +20 -11
  5. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-layout-components.mjs +2 -2
  7. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-layout-entity.mjs +79 -43
  9. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  10. package/fesm2022/{acorex-platform-layout-widgets-repeater-widget-column.component-fcCirNxz.mjs → acorex-platform-layout-widgets-repeater-widget-column.component-DnhR00cH.mjs} +2 -2
  11. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-DnhR00cH.mjs.map +1 -0
  12. package/fesm2022/acorex-platform-layout-widgets.mjs +115 -136
  13. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  14. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-DzWjSMSK.mjs → acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs} +20 -5
  15. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs.map +1 -0
  16. package/fesm2022/acorex-platform-themes-default.mjs +2 -2
  17. package/layout/entity/index.d.ts +26 -3
  18. package/layout/widgets/index.d.ts +6 -1
  19. package/package.json +9 -9
  20. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-fcCirNxz.mjs.map +0 -1
  21. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DzWjSMSK.mjs.map +0 -1
@@ -1353,31 +1353,16 @@ function sortMergedSections(mainSections, extraSections, mainSectionIds) {
1353
1353
  return entityOrderDiff;
1354
1354
  return (a.order ?? 0) - (b.order ?? 0);
1355
1355
  });
1356
- // Build index map for main sections to preserve original order when no explicit order is specified
1357
- const mainSectionIndexMap = new Map();
1358
- mainSections.forEach((s, idx) => mainSectionIndexMap.set(s.id, idx));
1359
1356
  // Middle block: main sections + middle-only sections
1360
- // Sort by explicit order if present, otherwise use original array index for main sections
1361
- // Extra middle sections without order go after main sections
1362
- const middleBlock = [...mainSections, ...middleSections].sort((a, b) => {
1363
- const aHasOrder = a.order !== undefined;
1364
- const bHasOrder = b.order !== undefined;
1365
- // If both have explicit order, sort by order
1366
- if (aHasOrder && bHasOrder) {
1367
- return a.order - b.order;
1368
- }
1369
- // If neither has order, preserve original array position for main sections
1370
- if (!aHasOrder && !bHasOrder) {
1371
- const aIdx = mainSectionIndexMap.get(a.id) ?? Infinity;
1372
- const bIdx = mainSectionIndexMap.get(b.id) ?? Infinity;
1373
- return aIdx - bIdx;
1374
- }
1375
- // If only one has order, the one with order comes first (explicit ordering takes precedence)
1376
- if (aHasOrder)
1377
- return -1;
1378
- return 1;
1357
+ // Sort by order (undefined order is treated as 0)
1358
+ const middleBlock = [...mainSections, ...middleSections];
1359
+ const sortedMiddleBlock = middleBlock.sort((a, b) => {
1360
+ // Treat undefined order as 0 for sorting
1361
+ const aOrder = a.order ?? 0;
1362
+ const bOrder = b.order ?? 0;
1363
+ return aOrder - bOrder;
1379
1364
  });
1380
- return [...beforeSections, ...middleBlock, ...afterSections];
1365
+ return [...beforeSections, ...sortedMiddleBlock, ...afterSections];
1381
1366
  }
1382
1367
 
1383
1368
  class AXPCreateEntityCommand {
@@ -2058,7 +2043,7 @@ class AXPEntityDetailPopoverComponent {
2058
2043
  return importantProperties;
2059
2044
  }
2060
2045
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPEntityDetailPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2061
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", 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 }, breadcrumb: { classPropertyName: "breadcrumb", publicName: "breadcrumb", 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 @if (breadcrumb()) {\n <div class=\"ax-text-xs ax-text-neutral-500 ax-mt-1\">{{ breadcrumb() }}</div>\n }\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.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", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { 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", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2046
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", 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 }, breadcrumb: { classPropertyName: "breadcrumb", publicName: "breadcrumb", 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 @if (breadcrumb()) {\n <div class=\"ax-text-xs ax-text-neutral-500 ax-mt-1\">{{ breadcrumb() }}</div>\n }\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.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", "forceDisableActionSheetStyle", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { 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", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2062
2047
  }
2063
2048
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPEntityDetailPopoverComponent, decorators: [{
2064
2049
  type: Component,
@@ -2906,6 +2891,12 @@ class AXPEntityMasterListViewModel {
2906
2891
  key: 'id',
2907
2892
  });
2908
2893
  this.selectedItems = signal([], ...(ngDevMode ? [{ debugName: "selectedItems" }] : []));
2894
+ /**
2895
+ * Selected category from the category sidebar (left panel).
2896
+ * Used to set default category when creating new entities via command.
2897
+ * Structure: { id: string; title: string } or null when "All Items" is selected.
2898
+ */
2899
+ this.selectedCategory = signal(null, ...(ngDevMode ? [{ debugName: "selectedCategory" }] : []));
2909
2900
  this.parentKey = computed(() => {
2910
2901
  return this.entityDef.parentKey;
2911
2902
  }, ...(ngDevMode ? [{ debugName: "parentKey" }] : []));
@@ -3176,6 +3167,13 @@ class AXPEntityMasterListViewModel {
3176
3167
  clearSelection() {
3177
3168
  this.selectedItems.set([]);
3178
3169
  }
3170
+ /**
3171
+ * Sets the selected category from the category sidebar.
3172
+ * Call with null to clear (e.g. when "All Items" is selected).
3173
+ */
3174
+ setSelectedCategory(category) {
3175
+ this.selectedCategory.set(category);
3176
+ }
3179
3177
  async getPrimaryActions() {
3180
3178
  const scope = {};
3181
3179
  const actions = await Promise.all(this.allActions()
@@ -3339,6 +3337,8 @@ class AXPEntityMasterListViewModel {
3339
3337
  });
3340
3338
  const command = commandName.split('&')[0];
3341
3339
  const options = await this.evaluateExpressions(action?.options, data);
3340
+ const baseData = action?.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : data;
3341
+ const commandData = this.mergeDefaultCategoryForCreate(command, baseData);
3342
3342
  if (this.workflow.exists(command)) {
3343
3343
  await this.workflow.execute(command, {
3344
3344
  entity: getEntityInfo(this.entityDef).source,
@@ -3349,7 +3349,7 @@ class AXPEntityMasterListViewModel {
3349
3349
  parentKey: this.entityDef.parentKey,
3350
3350
  source: `${this.entityDef.module}.${this.entityDef.name}`,
3351
3351
  },
3352
- data: action?.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : data,
3352
+ data: commandData,
3353
3353
  options: options,
3354
3354
  metadata: action?.metadata,
3355
3355
  });
@@ -3357,7 +3357,7 @@ class AXPEntityMasterListViewModel {
3357
3357
  else {
3358
3358
  const commandOptions = {
3359
3359
  __context__: {
3360
- data: action?.scope == AXPEntityCommandScope.Selected ? this.selectedItems() : data,
3360
+ data: commandData,
3361
3361
  entity: getEntityInfo(this.entityDef).source,
3362
3362
  entityInfo: {
3363
3363
  name: this.entityDef.name,
@@ -3385,6 +3385,41 @@ class AXPEntityMasterListViewModel {
3385
3385
  // });
3386
3386
  }
3387
3387
  }
3388
+ /**
3389
+ * Merges default category from selected category in sidebar when executing create command.
3390
+ * For Entity:Create and create-entity, if entity has category plugin and a category is selected,
3391
+ * pre-fills categoryIds and categories for the create form.
3392
+ */
3393
+ mergeDefaultCategoryForCreate(command, baseData) {
3394
+ const isCreateCommand = command === 'Entity:Create' || command === 'create-entity';
3395
+ if (!isCreateCommand) {
3396
+ return baseData;
3397
+ }
3398
+ const categoryExt = this.entityDef.extensions?.category;
3399
+ if (!categoryExt) {
3400
+ return baseData;
3401
+ }
3402
+ const selectedCat = this.selectedCategory();
3403
+ if (!selectedCat) {
3404
+ return baseData;
3405
+ }
3406
+ const propName = categoryExt.propertyName || 'categoryIds';
3407
+ const valueField = categoryExt.valueField ?? 'id';
3408
+ const textField = categoryExt.textField ?? 'title';
3409
+ const idVal = selectedCat[valueField] ?? selectedCat.id;
3410
+ const titleVal = selectedCat[textField] ?? selectedCat.title;
3411
+ const defaultCategoryData = {
3412
+ [propName]: [idVal],
3413
+ categories: [{ [valueField]: idVal, [textField]: titleVal }],
3414
+ };
3415
+ if (baseData == null || (Array.isArray(baseData) && baseData.length === 0)) {
3416
+ return defaultCategoryData;
3417
+ }
3418
+ if (typeof baseData === 'object' && !Array.isArray(baseData)) {
3419
+ return { ...baseData, ...defaultCategoryData };
3420
+ }
3421
+ return baseData;
3422
+ }
3388
3423
  async execute(command) {
3389
3424
  switch (command?.name) {
3390
3425
  case 'navigate':
@@ -5001,7 +5036,8 @@ class AXPPageListConverter extends AXPBaseRelatedEntityConverter {
5001
5036
  };
5002
5037
  // Don't evaluate actions here - keep expression strings for lazy evaluation at execution time
5003
5038
  // This ensures actions use the latest context data when executed
5004
- const actions = relatedEntity?.actions ?? [];
5039
+ // const actions = relatedEntity?.actions ?? [];
5040
+ const actions = await evaluateExpressions(relatedEntity?.actions ?? []);
5005
5041
  const filters = await Promise.all(relatedEntity.conditions?.map(async (c) => {
5006
5042
  const value = await evaluateExpressions(c.value);
5007
5043
  return {
@@ -5225,7 +5261,7 @@ class AXPTabListConverter extends AXPBaseRelatedEntityConverter {
5225
5261
  }) ?? []);
5226
5262
  // Don't evaluate actions here - keep expression strings for lazy evaluation at execution time
5227
5263
  // This ensures actions use the latest context data when executed
5228
- const actions = relatedEntity.actions;
5264
+ const actions = await evaluateExpressions(relatedEntity.actions);
5229
5265
  return {
5230
5266
  id: entityDef?.name ?? '',
5231
5267
  title: relatedEntity.title ?? entityDef?.title ?? '',
@@ -6158,12 +6194,12 @@ const columnWidthMiddlewareProvider = {
6158
6194
  * Default order for common sections
6159
6195
  */
6160
6196
  const DEFAULT_SECTION_ORDER = {
6161
- 'basic-info': 0,
6197
+ 'basic-info': -100,
6162
6198
  classification: 20,
6163
- appearance: 30,
6164
- settings: 100,
6199
+ appearance: 90,
6165
6200
  advanced: 110,
6166
6201
  metadata: 120,
6202
+ settings: 200,
6167
6203
  };
6168
6204
  /**
6169
6205
  * Default order for common properties
@@ -12522,7 +12558,7 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
12522
12558
  return get(item, this.displayField()) ?? '';
12523
12559
  }
12524
12560
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPLookupWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
12525
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", 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 {{ getDisplayText(item) }}\n </span>\n @if ($index < visibleItems().length - 1) { <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()\" #moreButton>\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 {{ getDisplayText(item) }}\n </span>\n }\n </div>\n </div>\n</ax-popover>", 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", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12561
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", 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 {{ getDisplayText(item) }}\n </span>\n @if ($index < visibleItems().length - 1) { <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()\" #moreButton>\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 {{ getDisplayText(item) }}\n </span>\n }\n </div>\n </div>\n</ax-popover>", 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", "forceDisableActionSheetStyle", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12526
12562
  }
12527
12563
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPLookupWidgetColumnComponent, decorators: [{
12528
12564
  type: Component,
@@ -14357,11 +14393,11 @@ class AXPEntityModule {
14357
14393
  useClass: AXPEntitiesListDataSourceDefinition,
14358
14394
  multi: true,
14359
14395
  },
14360
- // {
14361
- // provide: AXP_ENTITY_MODIFIER,
14362
- // useValue: layoutOrderingMiddlewareProvider,
14363
- // multi: true,
14364
- // },
14396
+ {
14397
+ provide: AXP_ENTITY_MODIFIER,
14398
+ useValue: layoutOrderingMiddlewareProvider,
14399
+ multi: true,
14400
+ },
14365
14401
  provideCommandSetups([
14366
14402
  {
14367
14403
  key: 'Entity:OpenDetails',
@@ -14530,11 +14566,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
14530
14566
  useClass: AXPEntitiesListDataSourceDefinition,
14531
14567
  multi: true,
14532
14568
  },
14533
- // {
14534
- // provide: AXP_ENTITY_MODIFIER,
14535
- // useValue: layoutOrderingMiddlewareProvider,
14536
- // multi: true,
14537
- // },
14569
+ {
14570
+ provide: AXP_ENTITY_MODIFIER,
14571
+ useValue: layoutOrderingMiddlewareProvider,
14572
+ multi: true,
14573
+ },
14538
14574
  provideCommandSetups([
14539
14575
  {
14540
14576
  key: 'Entity:OpenDetails',
@@ -14698,7 +14734,7 @@ function entityMasterCrudActions(options) {
14698
14734
  create: true,
14699
14735
  delete: true,
14700
14736
  view: true,
14701
- edit: true,
14737
+ edit: false,
14702
14738
  ...options,
14703
14739
  };
14704
14740
  const actions = [];