@acorex-platform/framework-client 0.0.56 → 0.0.58

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 (55) hide show
  1. package/fesm2022/acorex-platform-framework-client-common.mjs +31 -33
  2. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-framework-client-core.mjs +157 -2
  4. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +58 -274
  6. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  7. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CyZpdazq.mjs} +6 -6
  8. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs.map → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CyZpdazq.mjs.map} +1 -1
  9. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +657 -214
  10. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +32 -16
  12. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DLW9GiJh.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-jeOx-Rb8.mjs} +277 -198
  14. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-jeOx-Rb8.mjs.map +1 -0
  15. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-BY_hDj8A.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-B93uWhea.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-BY_hDj8A.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-B93uWhea.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-DccwhqkT.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-DITHE0f6.mjs} +2 -2
  18. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-DccwhqkT.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-DITHE0f6.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-D7xxrauC.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-f5rLdctT.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-D7xxrauC.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-f5rLdctT.mjs.map} +1 -1
  21. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
  22. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +59 -3
  23. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  24. package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-DuFZf8eb.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D9WiRo-_.mjs} +330 -440
  25. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-D9WiRo-_.mjs.map +1 -0
  26. package/fesm2022/{acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs → acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-DqJIiEyu.mjs} +9 -3
  27. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-DqJIiEyu.mjs.map +1 -0
  28. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BiGUrkFi.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-kwbJdTwe.mjs} +2 -2
  29. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BiGUrkFi.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-kwbJdTwe.mjs.map} +1 -1
  30. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BYg6-PoM.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Bke-Wy-4.mjs} +2 -2
  31. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BYg6-PoM.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Bke-Wy-4.mjs.map} +1 -1
  32. package/fesm2022/{acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.mjs → acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-C-r7txgg.mjs} +21 -17
  33. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-C-r7txgg.mjs.map +1 -0
  34. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
  35. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +48 -9
  36. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  37. package/fesm2022/acorex-platform-framework-client-workflow.mjs +47 -1
  38. package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
  39. package/i18n/en-AU/platform-layout-widgets.json +0 -1
  40. package/i18n/en-US/platform-layout-widgets.json +0 -1
  41. package/i18n/fa-IR/platform-layout-widgets.json +0 -1
  42. package/package.json +2 -2
  43. package/types/acorex-platform-framework-client-common.d.ts +2 -3
  44. package/types/acorex-platform-framework-client-core.d.ts +67 -2
  45. package/types/acorex-platform-framework-client-layout-builder.d.ts +4 -23
  46. package/types/acorex-platform-framework-client-layout-components.d.ts +121 -7
  47. package/types/acorex-platform-framework-client-layout-designer.d.ts +2 -0
  48. package/types/acorex-platform-framework-client-layout-entity.d.ts +25 -17
  49. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +14 -1
  50. package/types/acorex-platform-framework-client-layout-widgets.d.ts +33 -69
  51. package/types/acorex-platform-framework-client-workflow.d.ts +29 -2
  52. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DLW9GiJh.mjs.map +0 -1
  53. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-DuFZf8eb.mjs.map +0 -1
  54. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs.map +0 -1
  55. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { isEntityColumnBand, mergeForeignKeyFieldIntoCreateActions, collectNestedCreateHiddenProperties, relatedEntityListViewWidgetOptions, AXPEntityCommandScope, isCardFieldBadgeDisplay, resolveCardFieldBadgeColor, resolveEntityCardAvatarPath, isEntityCardQrField, collectLeftoverCardMoreFieldNames, parseDottedFieldPath, AXP_ENTITY_LIST_RECORD_STYLING_TARGET, isCompleteEntityListStylingCondition, createEntityMasterStylingScope, normalizeEntityMasterStylingClass, resolveEntityMasterStyling, resolveEntityMasterFieldExpression, resolveEntityCardIdentityKind, resolveEntityCardUserId, ENTITY_CARD_LABELED_PREVIEW_MAX, resolveEntityCardLayout, buildDefaultEntityCardLayout, resolveEntityListFilterContextField, resolveEntityListFilterQueryField, resolveEnabledMasterListLayouts, resolveDefaultMasterListLayout, isEntityMasterListCardHost, normalizeEntityMasterListLayoutType, getEntityInfo, normalizeEntityListUserStylingRules, mergeQueryViewAndUserFilters, flattenEntityTableColumns, mergeDefinitionAndCustomQueryViews, isQueryViewDirty, isCustomQueryView, collectEntityListSortPresets, createCustomQueryViewName, removePersistedCustomQueryView, readPersistedCustomQueryViews, upsertPersistedCustomQueryView, snapshotCustomQueryView, isQueryViewColumnVisible, collectEntityListSortableFields, collectEntityListFilterDefinitions, withQueryViewFilterVisibility, queryViewConditionsToFilterQueries, collectEntityCardUserIdQueryFields, buildEntityQueryFields, normalizeAXPQueryViewColumns, findEntityTableColumnInTree, AXPEntityQueryType, ENTITY_ROW_POPUP_TITLE_OPTION, resolveEnabledPageListLayouts, resolveRelatedEntityListViews, buildPageListWidgetName, applyQueryViewToColumnQueries, normalizeEntityDisplayTemplate, sanitizeResolvedEntityDisplayTitle, isUnresolvedEntityDisplayTemplate, resolveLookupWidgetCreateOptions, promoteLegacyEntityCardLayout, inferEntityListSortPresets, buildEntitySearchTitleContext } from '@acorex-platform/framework-shared/entity';
1
+ import { isEntityColumnBand, mergeForeignKeyFieldIntoCreateActions, collectNestedCreateHiddenProperties, relatedEntityListViewWidgetOptions, AXPEntityCommandScope, isCardFieldBadgeDisplay, resolveCardFieldBadgeColor, resolveEntityCardAvatarPath, isEntityCardQrField, collectLeftoverCardMoreFieldNames, parseDottedFieldPath, AXP_ENTITY_LIST_RECORD_STYLING_TARGET, isCompleteEntityListStylingCondition, createEntityMasterStylingScope, normalizeEntityMasterStylingClass, resolveEntityMasterStyling, resolveEntityMasterFieldExpression, resolveEntityCardIdentityKind, resolveEntityCardUserId, ENTITY_CARD_LABELED_PREVIEW_MAX, resolveEntityCardLayout, buildDefaultEntityCardLayout, resolveEntityListFilterContextField, resolveEntityListFilterQueryField, resolveEnabledMasterListLayouts, resolveDefaultMasterListLayout, isEntityMasterListCardHost, normalizeEntityMasterListLayoutType, getEntityInfo, normalizeEntityListUserStylingRules, mergeQueryViewAndUserFilters, flattenEntityTableColumns, mergeDefinitionAndCustomQueryViews, isQueryViewDirty, isCustomQueryView, collectEntityListSortPresets, createCustomQueryViewName, removePersistedCustomQueryView, readPersistedCustomQueryViews, upsertPersistedCustomQueryView, snapshotCustomQueryView, isQueryViewColumnVisible, collectEntityListSortableFields, collectEntityListFilterDefinitions, withQueryViewFilterVisibility, queryViewConditionsToFilterQueries, collectEntityCardUserIdQueryFields, buildEntityQueryFields, normalizeAXPQueryViewColumns, findEntityTableColumnInTree, AXPEntityQueryType, isEntityPropertySortEnabled, ENTITY_ROW_POPUP_TITLE_OPTION, resolveEnabledPageListLayouts, resolveRelatedEntityListViews, toggleListColumnSortQueries, toActiveListColumnSortQueries, buildPageListWidgetName, applyQueryViewToColumnQueries, normalizeEntityDisplayTemplate, sanitizeResolvedEntityDisplayTitle, isUnresolvedEntityDisplayTemplate, resolveLookupWidgetCreateOptions, promoteLegacyEntityCardLayout, inferEntityListSortPresets, buildEntitySearchTitleContext } from '@acorex-platform/framework-shared/entity';
2
2
  import { resolveEntityActionCommandInput, entityActionDataRecord, defineCommand, AXP_COMMAND_DEFINITION_CATEGORY_ENTITY, analyzeBulkCommandFailures, ENTITY_DELETE_DEFAULT, ENTITY_GET_BY_ID_DEFAULT, ENTITY_QUERY_DEFAULT, ENTITY_INSERT_DEFAULT, ENTITY_UPDATE_DEFAULT, DOMAIN_GET_ENTITY_LAYOUT_DEFAULT, DOMAIN_LIST_ENTITY_LAYOUTS_DEFAULT, resolveEntityNameFromRuntimeKey } from '@acorex-platform/framework-shared/runtime';
3
3
  import { AXToastService } from '@acorex/components/toast';
4
4
  import * as i3$1 from '@acorex/core/translation';
@@ -7,11 +7,11 @@ import * as i4$3 from '@acorex-platform/framework-client/common';
7
7
  import { AXPNotFoundError, AXPMenuRouteAccessService, AXPSettingsService, AXPCommonSettings, resolveEntityCreateListBehavior, platformErrorI18nKey, extractRequestErrorInfo, axpNavigateAppPath, AXPFileTypeProviderService, AXPFileStorageService, resolveFileTypeDisplay, resolveEntityRowDisplayTitle, resolveEntityModifyPopupTitle, commandMessageTextForError, resolveStoredImageDisplayUrl, isStoredImageFileId, AXPFilterOperatorMiddlewareService, AXP_ENTITY_LIST_DISPLAY_MODE_DEFAULT, ENTITY_LIST_DEFAULT_INSTANCE_ID, axpNormalizeEntityListInstanceId, axpGetEntityListInstanceIdFromParamMap, axpRedirectToNotFound, CONTAINS_OPER, toExecuteCommandFailureResult, AXPLocalEntityEngine, AXPLocalEntityRealtimeBridge, AXP_LOCAL_ENTITY_DEFAULT_MAX_ITEMS, resolveSearchableText, evaluateEntityDisplayTemplate, AXPCleanNestedFilters, AXPEntityDetailsNavTrailService, axpComposeEntityDetailsNavTrail, axpIsEntityRecordNotFound, coerceAXPSettingRawValueByKind, AXPDefaultMultiLanguageConfigService, withDefaultMultiLanguageOnWidgetNodeTree, axpIsEntityListPath, axpIsEntityDetailsPath, axpParseEntityListRoute, axpParseEntityDetailsRoute, axpSaveEntityListReturnUrl, AXPMenuRouteGuard, AXP_NOT_FOUND_ROUTE, AXP_PROTECTED_ROUTE_GUARDS, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_DEFINITION_LAZY_RESOLVER } from '@acorex-platform/framework-client/common';
8
8
  import { AXPWidgetsCatalog, runtimeCommandPayloadData, createRandomUuid, AXPRequestError, runtimeQueryPayloadData, runtimeQueryCollectionData, runtimeQueryFailure, runtimeQuerySuccessObject, runtimeCommandFailure, runtimeCommandSuccessObject, resolveActionLook, listThemeSurfaceClasses, parseRuntimeHexSurface, AXP_THEME_SURFACE_STYLES, AXPWidgetsList, AXPSystemActionType, coerceFilterDisplayText, AXPPlatformScope, flattenQueryFilterUserGroups, AXP_QUERY_QUICK_SEARCH_FIELD, wrapQueryFilterRoot, isPersistableFilterQuery, isCompleteFilterCondition, resolveFilterQueryIdentityField, extractValue, setSmart, getChangedPaths, isSelectionValueEqual, toAxpGridItemWidgetOptions, runtimeQuerySuccessCollection } from '@acorex-platform/framework-shared/core';
9
9
  import { AXPDeviceService, AXPExpressionEvaluatorService, AXPEntityBroadcastService, AXPHookService, AXPDebugService, AXPDataGenerator, AXPContextEvalFactory, ensureRuntimeSurfaceClass, applyFilterArray, createCommandExpressionScope, toExpressionRecord, AXPDistributedEventListenerService, applySortArray, AXHighlightService, AXPColumnWidthService, objectKeyValueTransforms, setupPopupFooterKeyboardShortcuts, AXPContextStore, AXPModuleManifestRegistry, provideAppStartUpTask, AXP_APP_STARTUP_PRIORITY, defaultColumnWidthProvider, AXP_COLUMN_WIDTH_PROVIDER } from '@acorex-platform/framework-client/core';
10
+ import { AXPLayoutBuilderService, AXPDialogOpener, LayoutBuilderModule } from '@acorex-platform/framework-client/layout/builder';
10
11
  import * as i0 from '@angular/core';
11
12
  import { InjectionToken, inject, Injector, runInInjectionContext, Injectable, signal, output, input, computed, effect, ChangeDetectionStrategy, Component, viewChild, untracked, HostBinding, model, ViewEncapsulation, ElementRef, EnvironmentInjector, NgModule, ChangeDetectorRef, Input, afterNextRender, viewChildren, linkedSignal, DestroyRef, makeEnvironmentProviders } from '@angular/core';
12
13
  import { cloneDeep, merge, get, isNil, set, isArray, isString, castArray, has, isPlainObject, orderBy, defaultTo, isEmpty, isEqual, isObjectLike } from 'lodash-es';
13
14
  import { Subject, filter, takeUntil, map, distinctUntilChanged, fromEvent, auditTime, merge as merge$1 } from 'rxjs';
14
- import { AXPLayoutBuilderService, LayoutBuilderModule } from '@acorex-platform/framework-client/layout/builder';
15
15
  import { AXPSessionService } from '@acorex-platform/framework-client/auth';
16
16
  import { Router, NavigationStart, ActivatedRoute, ROUTES } from '@angular/router';
17
17
  import { AXDialogService } from '@acorex/components/dialog';
@@ -1228,7 +1228,7 @@ class PropertyFilter {
1228
1228
  const dialog = await this.buildDialog({});
1229
1229
  return dialog.build();
1230
1230
  }
1231
- async show() {
1231
+ async show(options) {
1232
1232
  // Context: always load by key when we have a record id (authoritative full row), then merge any
1233
1233
  // caller/list row context. Skipping fetch when initialContext was non-empty left dialogs without
1234
1234
  // fields not present on the passed row (e.g. Entity:View single() with partial list payload).
@@ -1260,7 +1260,7 @@ class PropertyFilter {
1260
1260
  }
1261
1261
  const dialog = await this.buildDialog(effectiveContext);
1262
1262
  dialog.setContext(effectiveContext);
1263
- return await dialog.show();
1263
+ return await dialog.show(options);
1264
1264
  }
1265
1265
  /**
1266
1266
  * Resolves property `schema.defaultValue` expressions (e.g. `settings.get(...)`)
@@ -2492,9 +2492,31 @@ class AXPCreateEntityCommand {
2492
2492
  this.settingsService = inject(AXPSettingsService);
2493
2493
  this.openEntityDetailsCommand = inject(AXPOpenEntityDetailsCommand);
2494
2494
  this.entityEvents = inject(AXPEntityBroadcastService);
2495
+ this.dialogOpener = inject(AXPDialogOpener);
2495
2496
  this.context = {};
2497
+ this.loadCreateDialogRenderer = () => import('@acorex-platform/framework-client/layout/builder').then((module) => module.AXPDialogRendererComponent);
2496
2498
  }
2497
2499
  async execute(input = {}) {
2500
+ const outcome = await this.dialogOpener.run({
2501
+ load: this.loadCreateDialogRenderer,
2502
+ data: this.createDialogOpenData(input),
2503
+ present: (notifyShown) => this.presentCreateDialog(input, notifyShown),
2504
+ });
2505
+ if (outcome.duplicate) {
2506
+ return { success: false };
2507
+ }
2508
+ return outcome.result;
2509
+ }
2510
+ createDialogOpenData(input) {
2511
+ const resolved = resolveEntityActionCommandInput(input);
2512
+ return {
2513
+ entity: resolved.entity ?? '',
2514
+ dialogSize: input.dialogSize ?? null,
2515
+ data: resolved.data ?? null,
2516
+ options: resolved.options ?? null,
2517
+ };
2518
+ }
2519
+ async presentCreateDialog(input = {}, notifyShown) {
2498
2520
  const enableOperationToasts = await this.settingsService.get(AXPCommonSettings.EnableOperationToasts);
2499
2521
  const dialogSize = input.dialogSize;
2500
2522
  const resolved = resolveEntityActionCommandInput(input);
@@ -2622,7 +2644,7 @@ class AXPCreateEntityCommand {
2622
2644
  dialogRef.setLoading(false);
2623
2645
  }
2624
2646
  })
2625
- .show();
2647
+ .show({ onShown: notifyShown });
2626
2648
  const commandResult = result;
2627
2649
  if (commandResult.success && commandResult.data) {
2628
2650
  const createdItem = commandResult.data?.item ?? commandResult.data;
@@ -5751,6 +5773,7 @@ class AXPFileUploaderWidgetService {
5751
5773
  constructor() {
5752
5774
  //#region ---- Services & Dependencies ----
5753
5775
  this.popupService = inject(AXPopupService);
5776
+ this.dialogOpener = inject(AXPDialogOpener);
5754
5777
  this.translate = inject(AXTranslationService);
5755
5778
  this.commandExecutor = inject(AXPCommandExecutor);
5756
5779
  this.queryExecutor = inject(AXPQueryExecutor);
@@ -5779,20 +5802,32 @@ class AXPFileUploaderWidgetService {
5779
5802
  plugins: options?.plugins ?? [],
5780
5803
  editDialog: options?.editDialog,
5781
5804
  };
5782
- const component = await import('./acorex-platform-framework-client-layout-entity-file-list-popup.component-C0LgUzzv.mjs').then((m) => m.AXPFileListPopupComponent);
5783
- const result = await this.popupService.open(component, {
5784
- title: await this.translate.translateAsync('@document-management:terms.common.file'),
5805
+ let title = '';
5806
+ const result = await this.dialogOpener.openPopup({
5807
+ load: () => import('./acorex-platform-framework-client-layout-entity-file-list-popup.component-C0LgUzzv.mjs').then((m) => m.AXPFileListPopupComponent),
5785
5808
  data: {
5786
- files: signal(resolved.files),
5787
- isReadonly: signal(resolved.readonly),
5788
- multiple: signal(resolved.multiple),
5789
- accept: signal(resolved.accept),
5790
- maxFileSize: signal(resolved.maxFileSize),
5791
- fileEditable: signal(resolved.fileEditable),
5792
- showAddItemButton: signal(resolved.showAddItemButton),
5793
- plugins: signal(resolved.plugins),
5794
- editDialog: signal(resolved.editDialog),
5809
+ entity: entity ?? null,
5810
+ readonly: resolved.readonly,
5811
+ multiple: resolved.multiple,
5812
+ accept: resolved.accept,
5795
5813
  },
5814
+ prepare: async () => {
5815
+ title = await this.translate.translateAsync('@document-management:terms.common.file');
5816
+ },
5817
+ show: (component) => this.popupService.open(component, {
5818
+ title,
5819
+ data: {
5820
+ files: signal(resolved.files),
5821
+ isReadonly: signal(resolved.readonly),
5822
+ multiple: signal(resolved.multiple),
5823
+ accept: signal(resolved.accept),
5824
+ maxFileSize: signal(resolved.maxFileSize),
5825
+ fileEditable: signal(resolved.fileEditable),
5826
+ showAddItemButton: signal(resolved.showAddItemButton),
5827
+ plugins: signal(resolved.plugins),
5828
+ editDialog: signal(resolved.editDialog),
5829
+ },
5830
+ }),
5796
5831
  });
5797
5832
  const updatedFiles = result?.data?.data?.files;
5798
5833
  if (!updatedFiles) {
@@ -8619,13 +8654,14 @@ const PLUGIN_SLOT_SPAN = 10_000;
8619
8654
  const SUB_ORDER_STEP = 10;
8620
8655
  const PLUGIN_SLOT_INDEX = {
8621
8656
  'meta-data-builder': 0,
8622
- attachments: 1,
8623
- gallery: 2,
8624
- documents: 3,
8625
- comments: 4,
8626
- dashboard: 5,
8627
- reports: 6,
8628
- history: 7,
8657
+ 'meta-data-form': 1,
8658
+ attachments: 2,
8659
+ gallery: 3,
8660
+ documents: 4,
8661
+ comments: 5,
8662
+ dashboard: 6,
8663
+ reports: 7,
8664
+ history: 8,
8629
8665
  };
8630
8666
  //#endregion
8631
8667
  //#region ---- Helpers ----
@@ -8669,7 +8705,7 @@ function normalizeRelatedPageListDetailOrders(relatedEntities, step) {
8669
8705
  return afterMax;
8670
8706
  }
8671
8707
  /**
8672
- * Ordinal within a slot for multi-field pages (attachments, meta-data-builder), stable by field name.
8708
+ * Ordinal within a slot for multi-field pages (attachments, meta-data-builder, meta-data-form), stable by field name.
8673
8709
  */
8674
8710
  function subOrderWithinComponentSlot(pages, componentKey, skip, currentField) {
8675
8711
  const peerFieldKeys = (pages ?? [])
@@ -8688,8 +8724,8 @@ function subOrderWithinComponentSlot(pages, componentKey, skip, currentField) {
8688
8724
  *
8689
8725
  * 1. Assigns finite `layout.order` values to related `page-list` / `page-detail` rows that omit
8690
8726
  * `order` (the composer otherwise treats them as +Infinity).
8691
- * 2. Places plugin tabs in a fixed relative order: meta-data-builder → attachments → gallery →
8692
- * documents → comments → dashboard → reports → history, after all related tabs.
8727
+ * 2. Places plugin tabs in a fixed relative order: meta-data-builder → meta-data-form → attachments →
8728
+ * gallery → documents → comments → dashboard → reports → history, after all related tabs.
8693
8729
  */
8694
8730
  function resolveEntityPluginDetailPageOrder(input, slot, options) {
8695
8731
  const relatedStep = options.relatedOrderStep ?? DEFAULT_RELATED_ORDER_STEP;
@@ -14000,7 +14036,7 @@ class AXMAttachmentsPageComponentProvider {
14000
14036
  return [
14001
14037
  {
14002
14038
  key: ATTACHMENTS_PAGE_COMPONENT_KEY,
14003
- loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-BY_hDj8A.mjs').then((m) => m.AXMAttachmentsPageComponent),
14039
+ loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-B93uWhea.mjs').then((m) => m.AXMAttachmentsPageComponent),
14004
14040
  },
14005
14041
  ];
14006
14042
  }
@@ -14537,7 +14573,7 @@ class AXMGalleryPageComponentProvider {
14537
14573
  return [
14538
14574
  {
14539
14575
  key: GALLERY_PAGE_COMPONENT_KEY,
14540
- loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-D7xxrauC.mjs').then((m) => m.AXMGalleryPageComponent),
14576
+ loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-f5rLdctT.mjs').then((m) => m.AXMGalleryPageComponent),
14541
14577
  },
14542
14578
  ];
14543
14579
  }
@@ -17597,6 +17633,7 @@ class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent {
17597
17633
  //#region ---- Services & Dependencies ----
17598
17634
  this.entityResolver = inject(AXPEntityDefinitionRegistryService);
17599
17635
  this.popupService = inject(AXPopupService);
17636
+ this.dialogOpener = inject(AXPDialogOpener);
17600
17637
  this.translateService = inject(AXTranslationService);
17601
17638
  this.cdr = inject(ChangeDetectorRef);
17602
17639
  //#endregion
@@ -17770,6 +17807,9 @@ class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent {
17770
17807
  this.searchTerm.set('');
17771
17808
  }
17772
17809
  async showTreeSelector() {
17810
+ if (this.isOpen()) {
17811
+ return;
17812
+ }
17773
17813
  this.isOpen.set(true);
17774
17814
  const currentValue = this.getValue();
17775
17815
  const selectedIds = currentValue
@@ -17778,20 +17818,32 @@ class AXPEntityCategoryWidgetEditComponent extends AXPValueWidgetComponent {
17778
17818
  // Get current entity ID from context (if editing an entity)
17779
17819
  const currentEntityId = this.contextService.getValue('id');
17780
17820
  const excludedNodeId = currentEntityId ? String(currentEntityId) : undefined;
17821
+ let title = '';
17781
17822
  try {
17782
- const result = await this.popupService.open(AXPEntityCategoryTreeSelectorComponent, {
17783
- title: `${this.translateService.translateSync('@general:widgets.lookup.search.placeholder')} ${this.translateService.translateSync(this.entityDef()?.formats.plural ?? '')}`,
17784
- size: 'md',
17823
+ const result = await this.dialogOpener.openPopup({
17824
+ load: () => Promise.resolve(AXPEntityCategoryTreeSelectorComponent),
17785
17825
  data: {
17786
- entityKey: signal(this.entity()),
17787
- textField: signal(this.textField()),
17788
- valueField: signal(this.valueField()),
17789
- allowMultiple: signal(this.multiple()),
17790
- selectedValues: signal(selectedIds),
17791
- searchPlaceholder: signal(this.searchPlaceholderText()),
17792
- excludedNodeId: signal(excludedNodeId),
17793
- selectedValuesInput: signal(selectedIds),
17826
+ entity: this.entity(),
17827
+ multiple: this.multiple(),
17828
+ selectedIds,
17829
+ },
17830
+ prepare: () => {
17831
+ title = `${this.translateService.translateSync('@general:widgets.lookup.search.placeholder')} ${this.translateService.translateSync(this.entityDef()?.formats.plural ?? '')}`;
17794
17832
  },
17833
+ show: (component) => this.popupService.open(component, {
17834
+ title,
17835
+ size: 'md',
17836
+ data: {
17837
+ entityKey: signal(this.entity()),
17838
+ textField: signal(this.textField()),
17839
+ valueField: signal(this.valueField()),
17840
+ allowMultiple: signal(this.multiple()),
17841
+ selectedValues: signal(selectedIds),
17842
+ searchPlaceholder: signal(this.searchPlaceholderText()),
17843
+ excludedNodeId: signal(excludedNodeId),
17844
+ selectedValuesInput: signal(selectedIds),
17845
+ },
17846
+ }),
17795
17847
  });
17796
17848
  if (result?.data?.selected && Array.isArray(result.data.selected)) {
17797
17849
  const newItems = this.multiple() ? result.data.selected : result.data.selected.slice(0, 1);
@@ -18603,6 +18655,7 @@ function mapPropertyToWidgetColumn(property) {
18603
18655
  name: property.name,
18604
18656
  title: property.title,
18605
18657
  visible: true,
18658
+ sortEnabled: isEntityPropertySortEnabled(property),
18606
18659
  widget: property.schema?.interface
18607
18660
  ? {
18608
18661
  type: property.schema.interface.type || 'text-editor',
@@ -18693,6 +18746,7 @@ function mapEntityColumnToWidgetColumn(entity, column) {
18693
18746
  title: columnDef.title || property?.title || columnDef.name,
18694
18747
  width: columnDef.options?.width,
18695
18748
  visible: columnDef.options?.visible !== false,
18749
+ sortEnabled: isEntityPropertySortEnabled(property),
18696
18750
  ...(columnDef.footer ? { footer: columnDef.footer } : {}),
18697
18751
  widget,
18698
18752
  };
@@ -19214,6 +19268,9 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
19214
19268
  ...(ngDevMode ? [{ debugName: "toolbarWidget" }] : /* istanbul ignore next */ []));
19215
19269
  this.selectedItems = signal([], /* @ts-ignore */
19216
19270
  ...(ngDevMode ? [{ debugName: "selectedItems" }] : /* istanbul ignore next */ []));
19271
+ /** Active sorts for data-list header arrows; kept in sync with toolbar sorts. */
19272
+ this.listColumnSorts = signal([], /* @ts-ignore */
19273
+ ...(ngDevMode ? [{ debugName: "listColumnSorts" }] : /* istanbul ignore next */ []));
19217
19274
  this.listDisplayMode = signal(AXP_ENTITY_LIST_DISPLAY_MODE_DEFAULT, /* @ts-ignore */
19218
19275
  ...(ngDevMode ? [{ debugName: "listDisplayMode" }] : /* istanbul ignore next */ []));
19219
19276
  this.isCardHostLayout = computed(() => isEntityMasterListCardHost(this.listDisplayMode()), /* @ts-ignore */
@@ -19538,6 +19595,37 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
19538
19595
  this.execute(item.command.name, null);
19539
19596
  }
19540
19597
  }
19598
+ handleColumnSort(columnName, event) {
19599
+ if (!this.isListColumnSortable(columnName)) {
19600
+ return;
19601
+ }
19602
+ const toolbar = this.getValue()?.toolbar ?? {};
19603
+ const nextSorts = toggleListColumnSortQueries(toActiveListColumnSortQueries(toolbar.sorts), columnName, {
19604
+ multiSort: event.ctrlKey || event.metaKey,
19605
+ viewDefaultSorts: this.getActiveViewSorts(),
19606
+ });
19607
+ this.listColumnSorts.set(nextSorts);
19608
+ this.setValue({
19609
+ ...this.getValue(),
19610
+ toolbar: {
19611
+ ...toolbar,
19612
+ sorts: nextSorts,
19613
+ },
19614
+ });
19615
+ }
19616
+ isListColumnSortable(columnName) {
19617
+ const instance = this.listWidget()?.instance;
19618
+ const columns = (instance?.options()?.['columns'] ??
19619
+ this.listNode()?.options?.['columns'] ??
19620
+ []);
19621
+ return flattenDataListWidgetColumns(columns).some((column) => column.name === columnName && !!column.sortEnabled);
19622
+ }
19623
+ getActiveViewSorts() {
19624
+ const viewName = this.getValue()?.toolbar?.view;
19625
+ const views = this.resolvedQueryViews();
19626
+ const view = views.find((item) => item.name === viewName) ?? views[0];
19627
+ return toActiveListColumnSortQueries(view?.sorts);
19628
+ }
19541
19629
  // ngDoCheck(): void {
19542
19630
  // console.log(this.listWidget()?.instance.output('selectedRows'));
19543
19631
  // }
@@ -20067,6 +20155,7 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
20067
20155
  if (changeTracker.isSortChanged) {
20068
20156
  const sortOptions = this.toDataSourceSortOptions(queries.sorts);
20069
20157
  dataSource.sort(...sortOptions);
20158
+ this.listColumnSorts.set(toActiveListColumnSortQueries(queries.sorts));
20070
20159
  }
20071
20160
  }
20072
20161
  /**
@@ -20177,14 +20266,6 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
20177
20266
  this.listDataSource.set(dataSource);
20178
20267
  this.cardItems.set(this.readDataSourceRows(dataSource));
20179
20268
  }
20180
- this.listNode.set({
20181
- type: AXPWidgetsCatalog.dataList,
20182
- options: listOptions,
20183
- path: `table`,
20184
- name: 'table',
20185
- mode: 'view',
20186
- defaultValue: this.getValue()?.table,
20187
- });
20188
20269
  const parentFilters = this.getMergedToolbarFilters();
20189
20270
  const viewFilters = initialView
20190
20271
  ? withQueryViewFilterVisibility(initialView, queryViewConditionsToFilterQueries(initialView))
@@ -20198,6 +20279,19 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
20198
20279
  : this.getValue()?.toolbar?.columns,
20199
20280
  displayMode: this.listDisplayMode(),
20200
20281
  };
20282
+ this.listColumnSorts.set(toActiveListColumnSortQueries(toolbarState.sorts));
20283
+ this.listNode.set({
20284
+ type: AXPWidgetsCatalog.dataList,
20285
+ options: {
20286
+ ...listOptions,
20287
+ columnSorts: this.listColumnSorts,
20288
+ onColumnSort: (columnName, event) => this.handleColumnSort(columnName, event),
20289
+ },
20290
+ path: `table`,
20291
+ name: 'table',
20292
+ mode: 'view',
20293
+ defaultValue: this.getValue()?.table,
20294
+ });
20201
20295
  this.setValue({
20202
20296
  ...this.getValue(),
20203
20297
  toolbar: {
@@ -24054,6 +24148,9 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
24054
24148
  this.treeSearchLoading.set(false);
24055
24149
  }
24056
24150
  onTriggerSearchInput(value) {
24151
+ if (!this.disabled() && !this.readonly()) {
24152
+ this.expanded.set(true);
24153
+ }
24057
24154
  this.searchText.set(value);
24058
24155
  this.#applySearch(value.trim());
24059
24156
  }
@@ -24090,6 +24187,10 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
24090
24187
  this.searchText.set(this.#itemDisplayText(event.item));
24091
24188
  this.#applySearch('');
24092
24189
  }
24190
+ /** Closes the inline lookup dropdown. */
24191
+ close() {
24192
+ this.expanded.set(false);
24193
+ }
24093
24194
  /** Clears the selection. Used by projected `ax-clear-button`. */
24094
24195
  reset(_isUserInteraction = false) {
24095
24196
  if (this.disabled() || this.readonly()) {
@@ -24194,7 +24295,7 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
24194
24295
  { provide: AXComponent, useExisting: AXPLookupWidgetTableHostComponent },
24195
24296
  { provide: AXClearableComponent, useExisting: AXPLookupWidgetTableHostComponent },
24196
24297
  { provide: AXValuableComponent, useExisting: AXPLookupWidgetTableHostComponent },
24197
- ], viewQueries: [{ propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-solid ax-default ax-lookup-trigger w-full\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: valueItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!searchable()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !searchable()\"\n [attr.inputmode]=\"searchable() ? null : 'none'\"\n [value]=\"triggerInputValue()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button type=\"button\" class=\"ax-general-button-icon\" tabindex=\"-1\" [disabled]=\"disabled() || readonly()\">\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n\n <ng-content select=\"ax-validation-rule\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"expanded.set(false)\">\n <axp-lookup-widget-table-panel\n [dataSource]=\"resolvedTableDataSource()\"\n [columns]=\"columns()\"\n [highlightText]=\"highlightQuery()\"\n [valueField]=\"valueField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"parentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [rowActions]=\"rowActions()\"\n (itemClick)=\"handleTableItemClick($event)\"\n (rowAction)=\"handleTableRowAction($event)\"\n ></axp-lookup-widget-table-panel>\n </div>\n</ax-popover>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .ax-editor-container{justify-content:flex-start;gap:var(--spacing, .25rem)}:host .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}:host .ax-lookup-value{position:relative;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}:host .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-input-overlay{position:absolute;inset:0;z-index:10;margin:0!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0!important;color:transparent;caret-color:transparent}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "component", type: AXPLookupWidgetTablePanelComponent, selector: "axp-lookup-widget-table-panel", inputs: ["dataSource", "columns", "valueField", "disabledField", "selectedValues", "parentField", "hasChildrenField", "itemHeight", "maxVisibleItems", "alternate", "highlightText", "rowActions"], outputs: ["itemClick", "rowAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24298
+ ], viewQueries: [{ propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-solid ax-default ax-lookup-trigger w-full\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: valueItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!searchable()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !searchable()\"\n [attr.inputmode]=\"searchable() ? null : 'none'\"\n [value]=\"triggerInputValue()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <ng-content select=\"ax-suffix\"></ng-content>\n\n <button type=\"button\" class=\"ax-general-button-icon\" tabindex=\"-1\" [disabled]=\"disabled() || readonly()\">\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n\n <ng-content select=\"ax-validation-rule\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"expanded.set(false)\">\n <axp-lookup-widget-table-panel\n [dataSource]=\"resolvedTableDataSource()\"\n [columns]=\"columns()\"\n [highlightText]=\"highlightQuery()\"\n [valueField]=\"valueField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"parentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [rowActions]=\"rowActions()\"\n (itemClick)=\"handleTableItemClick($event)\"\n (rowAction)=\"handleTableRowAction($event)\"\n ></axp-lookup-widget-table-panel>\n </div>\n</ax-popover>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .ax-editor-container{justify-content:flex-start;gap:var(--spacing, .25rem)}:host .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}:host .ax-lookup-value{position:relative;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}:host .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-input-overlay{position:absolute;inset:0;z-index:10;margin:0!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0!important;color:transparent;caret-color:transparent}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "component", type: AXPLookupWidgetTablePanelComponent, selector: "axp-lookup-widget-table-panel", inputs: ["dataSource", "columns", "valueField", "disabledField", "selectedValues", "parentField", "hasChildrenField", "itemHeight", "maxVisibleItems", "alternate", "highlightText", "rowActions"], outputs: ["itemClick", "rowAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24198
24299
  }
24199
24300
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetTableHostComponent, decorators: [{
24200
24301
  type: Component,
@@ -24204,7 +24305,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
24204
24305
  { provide: AXComponent, useExisting: AXPLookupWidgetTableHostComponent },
24205
24306
  { provide: AXClearableComponent, useExisting: AXPLookupWidgetTableHostComponent },
24206
24307
  { provide: AXValuableComponent, useExisting: AXPLookupWidgetTableHostComponent },
24207
- ], template: "<div\n #origin\n class=\"ax-editor-container ax-solid ax-default ax-lookup-trigger w-full\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: valueItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!searchable()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !searchable()\"\n [attr.inputmode]=\"searchable() ? null : 'none'\"\n [value]=\"triggerInputValue()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button type=\"button\" class=\"ax-general-button-icon\" tabindex=\"-1\" [disabled]=\"disabled() || readonly()\">\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n\n <ng-content select=\"ax-validation-rule\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"expanded.set(false)\">\n <axp-lookup-widget-table-panel\n [dataSource]=\"resolvedTableDataSource()\"\n [columns]=\"columns()\"\n [highlightText]=\"highlightQuery()\"\n [valueField]=\"valueField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"parentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [rowActions]=\"rowActions()\"\n (itemClick)=\"handleTableItemClick($event)\"\n (rowAction)=\"handleTableRowAction($event)\"\n ></axp-lookup-widget-table-panel>\n </div>\n</ax-popover>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .ax-editor-container{justify-content:flex-start;gap:var(--spacing, .25rem)}:host .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}:host .ax-lookup-value{position:relative;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}:host .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-input-overlay{position:absolute;inset:0;z-index:10;margin:0!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0!important;color:transparent;caret-color:transparent}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
24308
+ ], template: "<div\n #origin\n class=\"ax-editor-container ax-solid ax-default ax-lookup-trigger w-full\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: valueItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!searchable()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !searchable()\"\n [attr.inputmode]=\"searchable() ? null : 'none'\"\n [value]=\"triggerInputValue()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <ng-content select=\"ax-suffix\"></ng-content>\n\n <button type=\"button\" class=\"ax-general-button-icon\" tabindex=\"-1\" [disabled]=\"disabled() || readonly()\">\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n\n <ng-content select=\"ax-validation-rule\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"expanded.set(false)\">\n <axp-lookup-widget-table-panel\n [dataSource]=\"resolvedTableDataSource()\"\n [columns]=\"columns()\"\n [highlightText]=\"highlightQuery()\"\n [valueField]=\"valueField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"parentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [rowActions]=\"rowActions()\"\n (itemClick)=\"handleTableItemClick($event)\"\n (rowAction)=\"handleTableRowAction($event)\"\n ></axp-lookup-widget-table-panel>\n </div>\n</ax-popover>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .ax-editor-container{justify-content:flex-start;gap:var(--spacing, .25rem)}:host .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}:host .ax-lookup-value{position:relative;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}:host .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:0px;flex:1;align-items:center;overflow:hidden}:host .ax-lookup-input-overlay{position:absolute;inset:0;z-index:10;margin:0!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:0!important;color:transparent;caret-color:transparent}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
24208
24309
  }], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], caption: [{ type: i0.Input, args: [{ isSignal: true, alias: "caption", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], treeDataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeDataSource", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], parentField: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentField", required: false }] }], hasChildrenField: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasChildrenField", required: false }] }], searchFields: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchFields", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueItems", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], selectedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTemplate", required: false }] }], rowActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowActions", required: false }] }], onItemSelected: [{ type: i0.Output, args: ["onItemSelected"] }], triggerSearchInput: [{ type: i0.ViewChild, args: ['triggerSearchInput', { isSignal: true }] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }] } });
24209
24310
 
24210
24311
  //#region ----- Imports -----
@@ -24237,8 +24338,6 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24237
24338
  ...(ngDevMode ? [{ debugName: "lookup" }] : /* istanbul ignore next */ []));
24238
24339
  this.tableLookupHost = viewChild(AXPLookupWidgetTableHostComponent, /* @ts-ignore */
24239
24340
  ...(ngDevMode ? [{ debugName: "tableLookupHost" }] : /* istanbul ignore next */ []));
24240
- this.popupTagBox = viewChild('popupTagBox', /* @ts-ignore */
24241
- ...(ngDevMode ? [{ debugName: "popupTagBox" }] : /* istanbul ignore next */ []));
24242
24341
  //#endregion
24243
24342
  //#region ----- State Signals -----
24244
24343
  /** Toggled to remount ax-lookup after locale / language changes. */
@@ -24315,7 +24414,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24315
24414
  this.isPopupLook = computed(() => this.look() === 'popup', /* @ts-ignore */
24316
24415
  ...(ngDevMode ? [{ debugName: "isPopupLook" }] : /* istanbul ignore next */ []));
24317
24416
  this.lookupMode = computed(() => {
24318
- if (this.entityDef()?.parentKey && this.look() !== 'select' && this.look() !== 'popup') {
24417
+ if (this.entityDef()?.parentKey && this.look() !== 'select') {
24319
24418
  return this.multiple() ? 'multi-select-tree' : 'multi-column-tree';
24320
24419
  }
24321
24420
  if (this.multiple()) {
@@ -24424,7 +24523,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24424
24523
  this.localeEpoch();
24425
24524
  this.customFilter();
24426
24525
  const entity = this.entityDef();
24427
- if (!entity?.parentKey || this.look() === 'select' || this.look() === 'popup') {
24526
+ if (!entity?.parentKey || this.look() === 'select') {
24428
24527
  return EMPTY_TREE_DATA_SOURCE;
24429
24528
  }
24430
24529
  if (this.hasPendingCascadeFilter()) {
@@ -24708,43 +24807,13 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24708
24807
  await this.executeCreate(mode);
24709
24808
  }
24710
24809
  handlePopupTriggerClick(event) {
24711
- if (event instanceof MouseEvent) {
24712
- event.stopPropagation();
24713
- }
24810
+ const native = event.nativeEvent;
24811
+ native?.stopPropagation();
24812
+ native?.preventDefault();
24813
+ this.lookup()?.close();
24814
+ this.tableLookupHost()?.close();
24714
24815
  void this.openPopupSelector();
24715
24816
  }
24716
- handlePopupKeyUp(event) {
24717
- const keyEvent = event.nativeEvent;
24718
- if (keyEvent.code === 'Enter' || keyEvent.code === 'NumpadEnter' || keyEvent.code === 'ArrowDown') {
24719
- void this.openPopupSelector();
24720
- }
24721
- }
24722
- handlePopupBlur(_event) {
24723
- this.popupTagBox()?.inputValue.set('');
24724
- }
24725
- handlePopupValueChange(event) {
24726
- if (!event.isUserInteraction) {
24727
- return;
24728
- }
24729
- if (isNil(event.value) || isEmpty(event.value)) {
24730
- this.setItems([]);
24731
- }
24732
- }
24733
- handlePopupClearClick() {
24734
- this.setItems([]);
24735
- }
24736
- handlePopupRemoveItem(event, index) {
24737
- event.stopPropagation();
24738
- if (this.isLookupDisabled() || this.isReadonly()) {
24739
- return;
24740
- }
24741
- const currentItems = this.selectedItems();
24742
- if (index < 0 || index >= currentItems.length) {
24743
- return;
24744
- }
24745
- const nextItems = currentItems.filter((_, i) => i !== index);
24746
- this.setItems(nextItems);
24747
- }
24748
24817
  //#endregion
24749
24818
  //#region ----- Popup Selector -----
24750
24819
  async openPopupSelector() {
@@ -25132,14 +25201,13 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
25132
25201
  }
25133
25202
  clear() {
25134
25203
  this.selectedItems.set([]);
25135
- this.popupTagBox()?.reset(false);
25136
25204
  this.tableLookupHost()?.reset(false) ?? this.lookup()?.reset(false);
25137
25205
  }
25138
25206
  focus() {
25139
25207
  this.shouldFocus.set(true);
25140
25208
  }
25141
25209
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
25142
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetEditComponent, isStandalone: true, selector: "axp-lookup-widget-edit", host: { classAttribute: "w-full" }, viewQueries: [{ propertyName: "lookup", first: true, predicate: AXLookupComponent, descendants: true, isSignal: true }, { propertyName: "tableLookupHost", first: true, predicate: AXPLookupWidgetTableHostComponent, descendants: true, isSignal: true }, { propertyName: "popupTagBox", first: true, predicate: ["popupTagBox"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (entityDef() && editorKey()) {\n <!-- ----- Entity lookup editor ----- -->\n <div class=\"flex items-center gap-1 w-full\">\n <!--------------------------------------------------------------->\n <!-- ----- Popup look: full entity data selector ----- -->\n @if (isPopupLook()) {\n <ax-tag-box\n #popupTagBox\n class=\"flex-1 min-w-0\"\n [tagTemplate]=\"popupTagTemplate\"\n [ngModel]=\"selectedItems()\"\n [textField]=\"displayField()\"\n [valueField]=\"valueField()\"\n (onValueChanged)=\"handlePopupValueChange($event)\"\n [placeholder]=\"selectedItems().length ? '' : ((placeholderText() | translate | async) ?? '')\"\n [addOnEnter]=\"false\"\n [addOnComma]=\"false\"\n [readonly]=\"true\"\n [disabled]=\"isLookupDisabled()\"\n (click)=\"handlePopupTriggerClick($event)\"\n (onKeyUp)=\"handlePopupKeyUp($event)\"\n (onBlur)=\"handlePopupBlur($event)\"\n >\n @if (hasClearButton() && selectedItems().length > 0) {\n <ax-clear-button (click)=\"handlePopupClearClick()\"></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Search icon opens entity selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n </ax-tag-box>\n }\n <!-- ----- Inline ax-lookup / table host ----- -->\n @else if (effectiveDataSource(); as dataSource) {\n <!-- ----- Multi-column modes: platform widget column renderer ----- -->\n @if (isTableLookupMode()) {\n <axp-lookup-widget-table-host\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [columns]=\"lookupWidgetTableColumns()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [disabledField]=\"'disabled'\"\n [parentField]=\"lookupMode() === 'multi-column-tree' ? treeParentField() : undefined\"\n [treeDataSource]=\"lookupMode() === 'multi-column-tree' ? entityTreeDataSource() : undefined\"\n [searchFields]=\"lookupTreeSearchFields()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [selectedTemplate]=\"lookupItemTemplate\"\n [rowActions]=\"rowActionsHandler()\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </axp-lookup-widget-table-host>\n }\n <!-- ----- List / tree chip modes: ax-lookup ----- -->\n @else {\n <ax-lookup\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [mode]=\"lookupMode()\"\n [treeParentField]=\"treeParentField()\"\n [dataSource]=\"dataSource\"\n [treeDataSource]=\"entityTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [itemTemplate]=\"\n $any(\n multiple()\n ? hasRowActionPrimary()\n ? lookupListItemWithActionsTemplate\n : lookupItemTemplate\n : lookupDropDownListItemTemplate\n )\n \"\n [selectedTemplate]=\"lookupItemTemplate\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-lookup>\n }\n }\n <!--------------------------------------------------------------->\n <!-- ----- Inline create for the lookup entity ----- -->\n @if (resolvedCreate().enabled) {\n <ax-button\n color=\"primary\"\n look=\"twotone\"\n [disabled]=\"isLookupDisabled() || isLoading()\"\n (onClick)=\"handleCreateClick($event)\"\n [title]=\"'@general:actions.create.title' | translate | async\"\n >\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n }\n </div>\n}\n\n<!-- ----- Lookup item and selected-value label ----- -->\n<ng-template #lookupItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"ax-lookup-option-text\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n</ng-template>\n<!-- ----- Drop-down-list rows: library skips .ax-lookup-option chrome when itemTemplate is set ----- -->\n<ng-template #lookupDropDownListItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex h-full w-full min-w-0 items-center gap-1 px-3 text-sm\">\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n <!-- ----- Primary row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n }\n </span>\n</ng-template>\n<!-- ----- Multi-select list rows with row actions ----- -->\n<ng-template #lookupListItemWithActionsTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex w-full min-w-0 items-center gap-1\">\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n </span>\n</ng-template>\n<!-- ----- Popup look selected chips ----- -->\n<ng-template #popupTagTemplate let-item let-index=\"index\">\n <div class=\"inline-flex items-center gap-1.5 rounded-md px-3 py-1 text-sm surface\">\n <span>{{ (getLookupItemLabel(item) | translate | async) ?? '' }}</span>\n @if (!isReadonly() && !isLookupDisabled()) {\n <button type=\"button\" (click)=\"handlePopupRemoveItem($event, index)\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "component", type: AXHighlightTextComponent, selector: "ax-highlight-text", inputs: ["text", "query", "highlightDisabled", "highlightOptions"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "component", type: AXPLookupWidgetTableHostComponent, selector: "axp-lookup-widget-table-host", inputs: ["name", "placeholder", "caption", "searchPlaceholder", "dataSource", "treeDataSource", "columns", "valueField", "textField", "disabledField", "parentField", "hasChildrenField", "searchFields", "value", "valueItems", "disabled", "readonly", "searchable", "selectedTemplate", "rowActions"], outputs: ["valueChange", "onItemSelected"] }, { kind: "ngmodule", type: AXTagBoxModule }, { kind: "component", type: i6$1.AXTagBoxComponent, selector: "ax-tag-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "allowNull", "type", "look", "addOnComma", "addOnEnter", "valueField", "textField", "readonlyField", "allowDuplicateValues", "tagTemplate"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "onTagClick", "onTagDblClick", "onTagContextMenu"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25210
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetEditComponent, isStandalone: true, selector: "axp-lookup-widget-edit", host: { classAttribute: "w-full" }, viewQueries: [{ propertyName: "lookup", first: true, predicate: AXLookupComponent, descendants: true, isSignal: true }, { propertyName: "tableLookupHost", first: true, predicate: AXPLookupWidgetTableHostComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (entityDef() && editorKey()) {\n <!-- ----- Entity lookup editor ----- -->\n <div class=\"flex items-center gap-1 w-full\">\n <!--------------------------------------------------------------->\n <!-- ----- Inline ax-lookup / table host (popup look adds magnifier suffix) ----- -->\n @if (effectiveDataSource(); as dataSource) {\n <!-- ----- Multi-column modes: platform widget column renderer ----- -->\n @if (isTableLookupMode()) {\n <axp-lookup-widget-table-host\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [columns]=\"lookupWidgetTableColumns()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [disabledField]=\"'disabled'\"\n [parentField]=\"lookupMode() === 'multi-column-tree' ? treeParentField() : undefined\"\n [treeDataSource]=\"lookupMode() === 'multi-column-tree' ? entityTreeDataSource() : undefined\"\n [searchFields]=\"lookupTreeSearchFields()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [selectedTemplate]=\"lookupItemTemplate\"\n [rowActions]=\"rowActionsHandler()\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </axp-lookup-widget-table-host>\n }\n <!-- ----- List / tree chip modes: ax-lookup ----- -->\n @else {\n <ax-lookup\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [mode]=\"lookupMode()\"\n [treeParentField]=\"treeParentField()\"\n [dataSource]=\"dataSource\"\n [treeDataSource]=\"entityTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [itemTemplate]=\"\n $any(\n multiple()\n ? hasRowActionPrimary()\n ? lookupListItemWithActionsTemplate\n : lookupItemTemplate\n : lookupDropDownListItemTemplate\n )\n \"\n [selectedTemplate]=\"lookupItemTemplate\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </ax-lookup>\n }\n }\n <!--------------------------------------------------------------->\n <!-- ----- Inline create for the lookup entity ----- -->\n @if (resolvedCreate().enabled) {\n <ax-button\n color=\"primary\"\n look=\"twotone\"\n [disabled]=\"isLookupDisabled() || isLoading()\"\n (onClick)=\"handleCreateClick($event)\"\n [title]=\"'@general:actions.create.title' | translate | async\"\n >\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n }\n </div>\n}\n\n<!-- ----- Lookup item and selected-value label ----- -->\n<ng-template #lookupItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"ax-lookup-option-text\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n</ng-template>\n<!-- ----- Drop-down-list rows: library skips .ax-lookup-option chrome when itemTemplate is set ----- -->\n<ng-template #lookupDropDownListItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex h-full w-full min-w-0 items-center gap-1 px-3 text-sm\">\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n <!-- ----- Primary row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n }\n </span>\n</ng-template>\n<!-- ----- Multi-select list rows with row actions ----- -->\n<ng-template #lookupListItemWithActionsTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex w-full min-w-0 items-center gap-1\">\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n </span>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "component", type: AXHighlightTextComponent, selector: "ax-highlight-text", inputs: ["text", "query", "highlightDisabled", "highlightOptions"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXLookupComponent, selector: "ax-lookup", inputs: ["name", "mode", "dataSource", "treeDataSource", "valueField", "textField", "disabledField", "columns", "treeParentField", "hasChildrenField", "searchable", "adaptivityEnabled", "caption", "alternate", "searchPlaceholder", "placeholder", "disabled", "readonly", "look", "itemHeight", "maxVisibleItems", "treeSelectionBehavior", "highlightSearch", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "value", "valueItems"], outputs: ["lookChange", "valueChange", "onValueChanged", "onSelectionChanged", "onFocus", "onBlur", "onItemClick", "onItemSelected", "onOpened", "onClosed"] }, { kind: "component", type: AXPLookupWidgetTableHostComponent, selector: "axp-lookup-widget-table-host", inputs: ["name", "placeholder", "caption", "searchPlaceholder", "dataSource", "treeDataSource", "columns", "valueField", "textField", "disabledField", "parentField", "hasChildrenField", "searchFields", "value", "valueItems", "disabled", "readonly", "searchable", "selectedTemplate", "rowActions"], outputs: ["valueChange", "onItemSelected"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25143
25211
  }
25144
25212
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetEditComponent, decorators: [{
25145
25213
  type: Component,
@@ -25155,11 +25223,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
25155
25223
  AXLoadingModule,
25156
25224
  AXLookupComponent,
25157
25225
  AXPLookupWidgetTableHostComponent,
25158
- AXTagBoxModule,
25159
25226
  AXTranslationModule,
25160
25227
  AXValidationModule,
25161
- ], template: "@if (entityDef() && editorKey()) {\n <!-- ----- Entity lookup editor ----- -->\n <div class=\"flex items-center gap-1 w-full\">\n <!--------------------------------------------------------------->\n <!-- ----- Popup look: full entity data selector ----- -->\n @if (isPopupLook()) {\n <ax-tag-box\n #popupTagBox\n class=\"flex-1 min-w-0\"\n [tagTemplate]=\"popupTagTemplate\"\n [ngModel]=\"selectedItems()\"\n [textField]=\"displayField()\"\n [valueField]=\"valueField()\"\n (onValueChanged)=\"handlePopupValueChange($event)\"\n [placeholder]=\"selectedItems().length ? '' : ((placeholderText() | translate | async) ?? '')\"\n [addOnEnter]=\"false\"\n [addOnComma]=\"false\"\n [readonly]=\"true\"\n [disabled]=\"isLookupDisabled()\"\n (click)=\"handlePopupTriggerClick($event)\"\n (onKeyUp)=\"handlePopupKeyUp($event)\"\n (onBlur)=\"handlePopupBlur($event)\"\n >\n @if (hasClearButton() && selectedItems().length > 0) {\n <ax-clear-button (click)=\"handlePopupClearClick()\"></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Search icon opens entity selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n </ax-tag-box>\n }\n <!-- ----- Inline ax-lookup / table host ----- -->\n @else if (effectiveDataSource(); as dataSource) {\n <!-- ----- Multi-column modes: platform widget column renderer ----- -->\n @if (isTableLookupMode()) {\n <axp-lookup-widget-table-host\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [columns]=\"lookupWidgetTableColumns()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [disabledField]=\"'disabled'\"\n [parentField]=\"lookupMode() === 'multi-column-tree' ? treeParentField() : undefined\"\n [treeDataSource]=\"lookupMode() === 'multi-column-tree' ? entityTreeDataSource() : undefined\"\n [searchFields]=\"lookupTreeSearchFields()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [selectedTemplate]=\"lookupItemTemplate\"\n [rowActions]=\"rowActionsHandler()\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </axp-lookup-widget-table-host>\n }\n <!-- ----- List / tree chip modes: ax-lookup ----- -->\n @else {\n <ax-lookup\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [mode]=\"lookupMode()\"\n [treeParentField]=\"treeParentField()\"\n [dataSource]=\"dataSource\"\n [treeDataSource]=\"entityTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [itemTemplate]=\"\n $any(\n multiple()\n ? hasRowActionPrimary()\n ? lookupListItemWithActionsTemplate\n : lookupItemTemplate\n : lookupDropDownListItemTemplate\n )\n \"\n [selectedTemplate]=\"lookupItemTemplate\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-lookup>\n }\n }\n <!--------------------------------------------------------------->\n <!-- ----- Inline create for the lookup entity ----- -->\n @if (resolvedCreate().enabled) {\n <ax-button\n color=\"primary\"\n look=\"twotone\"\n [disabled]=\"isLookupDisabled() || isLoading()\"\n (onClick)=\"handleCreateClick($event)\"\n [title]=\"'@general:actions.create.title' | translate | async\"\n >\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n }\n </div>\n}\n\n<!-- ----- Lookup item and selected-value label ----- -->\n<ng-template #lookupItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"ax-lookup-option-text\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n</ng-template>\n<!-- ----- Drop-down-list rows: library skips .ax-lookup-option chrome when itemTemplate is set ----- -->\n<ng-template #lookupDropDownListItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex h-full w-full min-w-0 items-center gap-1 px-3 text-sm\">\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n <!-- ----- Primary row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n }\n </span>\n</ng-template>\n<!-- ----- Multi-select list rows with row actions ----- -->\n<ng-template #lookupListItemWithActionsTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex w-full min-w-0 items-center gap-1\">\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n </span>\n</ng-template>\n<!-- ----- Popup look selected chips ----- -->\n<ng-template #popupTagTemplate let-item let-index=\"index\">\n <div class=\"inline-flex items-center gap-1.5 rounded-md px-3 py-1 text-sm surface\">\n <span>{{ (getLookupItemLabel(item) | translate | async) ?? '' }}</span>\n @if (!isReadonly() && !isLookupDisabled()) {\n <button type=\"button\" (click)=\"handlePopupRemoveItem($event, index)\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n }\n </div>\n</ng-template>\n" }]
25162
- }], propDecorators: { lookup: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupComponent), { isSignal: true }] }], tableLookupHost: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPLookupWidgetTableHostComponent), { isSignal: true }] }], popupTagBox: [{ type: i0.ViewChild, args: ['popupTagBox', { isSignal: true }] }] } });
25228
+ ], template: "@if (entityDef() && editorKey()) {\n <!-- ----- Entity lookup editor ----- -->\n <div class=\"flex items-center gap-1 w-full\">\n <!--------------------------------------------------------------->\n <!-- ----- Inline ax-lookup / table host (popup look adds magnifier suffix) ----- -->\n @if (effectiveDataSource(); as dataSource) {\n <!-- ----- Multi-column modes: platform widget column renderer ----- -->\n @if (isTableLookupMode()) {\n <axp-lookup-widget-table-host\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [columns]=\"lookupWidgetTableColumns()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [disabledField]=\"'disabled'\"\n [parentField]=\"lookupMode() === 'multi-column-tree' ? treeParentField() : undefined\"\n [treeDataSource]=\"lookupMode() === 'multi-column-tree' ? entityTreeDataSource() : undefined\"\n [searchFields]=\"lookupTreeSearchFields()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [selectedTemplate]=\"lookupItemTemplate\"\n [rowActions]=\"rowActionsHandler()\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </axp-lookup-widget-table-host>\n }\n <!-- ----- List / tree chip modes: ax-lookup ----- -->\n @else {\n <ax-lookup\n class=\"flex-1 min-w-0\"\n [name]=\"name ?? ''\"\n [placeholder]=\"(placeholderText() | translate | async) ?? ''\"\n [caption]=\"(placeholderText() | translate | async) ?? ''\"\n [searchPlaceholder]=\"('@general:widgets.lookup.search.placeholder' | translate | async) ?? ''\"\n [mode]=\"lookupMode()\"\n [treeParentField]=\"treeParentField()\"\n [dataSource]=\"dataSource\"\n [treeDataSource]=\"entityTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"displayField()\"\n [value]=\"boundValue()\"\n [valueItems]=\"selectedItems()\"\n [disabled]=\"isLookupDisabled()\"\n [readonly]=\"isReadonly()\"\n [searchable]=\"true\"\n [itemTemplate]=\"\n $any(\n multiple()\n ? hasRowActionPrimary()\n ? lookupListItemWithActionsTemplate\n : lookupItemTemplate\n : lookupDropDownListItemTemplate\n )\n \"\n [selectedTemplate]=\"lookupItemTemplate\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (isPopupLook()) {\n <ax-suffix>\n <ax-button\n color=\"ghost\"\n look=\"blank\"\n [disabled]=\"isLookupDisabled() || isReadonly() || isLoading()\"\n (onClick)=\"handlePopupTriggerClick($event)\"\n >\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n <!-- ----- Magnifier opens full entity data selector ----- -->\n @else {\n <ax-icon icon=\"far fa-search\"></ax-icon>\n }\n </ax-button>\n </ax-suffix>\n }\n </ax-lookup>\n }\n }\n <!--------------------------------------------------------------->\n <!-- ----- Inline create for the lookup entity ----- -->\n @if (resolvedCreate().enabled) {\n <ax-button\n color=\"primary\"\n look=\"twotone\"\n [disabled]=\"isLookupDisabled() || isLoading()\"\n (onClick)=\"handleCreateClick($event)\"\n [title]=\"'@general:actions.create.title' | translate | async\"\n >\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n }\n </div>\n}\n\n<!-- ----- Lookup item and selected-value label ----- -->\n<ng-template #lookupItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"ax-lookup-option-text\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n</ng-template>\n<!-- ----- Drop-down-list rows: library skips .ax-lookup-option chrome when itemTemplate is set ----- -->\n<ng-template #lookupDropDownListItemTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex h-full w-full min-w-0 items-center gap-1 px-3 text-sm\">\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n <!-- ----- Primary row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n }\n </span>\n</ng-template>\n<!-- ----- Multi-select list rows with row actions ----- -->\n<ng-template #lookupListItemWithActionsTemplate let-item let-highlightText=\"highlightText\">\n <span class=\"flex w-full min-w-0 items-center gap-1\">\n <span class=\"ax-lookup-option-text min-w-0 flex-1 truncate\">\n <ax-highlight-text\n [text]=\"(getLookupItemLabel(item) | translate | async) ?? ''\"\n [query]=\"highlightText ?? ''\"\n ></ax-highlight-text>\n </span>\n <span class=\"inline-flex shrink-0 items-center\" (mousedown)=\"handleLookupItemRowActionMouseDown($event)\">\n @for (action of rowActionPrimaryItems(); track action.name) {\n <ax-button\n look=\"blank\"\n color=\"ghost\"\n [title]=\"action.text\"\n (onClick)=\"handleItemRowAction($event, action.name, item)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n </ax-button>\n }\n </span>\n </span>\n</ng-template>\n" }]
25229
+ }], propDecorators: { lookup: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupComponent), { isSignal: true }] }], tableLookupHost: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPLookupWidgetTableHostComponent), { isSignal: true }] }] } });
25163
25230
 
25164
25231
  var lookupWidgetEdit_component = /*#__PURE__*/Object.freeze({
25165
25232
  __proto__: null,
@@ -25936,11 +26003,11 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
25936
26003
  return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value) || /^\d+$/.test(value);
25937
26004
  }
25938
26005
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25939
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetColumnComponent, isStandalone: true, selector: "ng-component", inputs: { rawValue: "rawValue", rowData: "rowData" }, viewQueries: [{ propertyName: "moreButton", first: true, predicate: ["moreButton"], descendants: true, isSignal: true }, { propertyName: "lazyTrigger", first: true, predicate: ["lazyTrigger"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (isHydratedStrategy()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handleItemClick($index, $event)\"\n >\n {{ getItemLabel($index) }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"text-muted\">\u2022</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n @if (hasMoreItems()) {\n <span\n class=\"absolute end-0 flex h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems(); $event.stopPropagation()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"flex min-w-0 items-center gap-1\">\n @if (displayCount() > 0) {\n <span\n class=\"cursor-pointer text-primary hover:underline\"\n (click)=\"openLazyPopover(); $event.stopPropagation()\"\n #lazyTrigger\n >\n {{ summaryLabel() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[280px] rounded-lg p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">{{ popoverHeader() }}</h3>\n </div>\n\n @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ resolveError() }}</div>\n } @else {\n <div class=\"flex max-h-64 flex-col gap-3\">\n @for (item of popoverListItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handlePopoverItemClick($index, $event)\"\n >\n {{ getPopoverItemLabel($index) }}\n </span>\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n </div>\n }\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i1$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26006
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetColumnComponent, isStandalone: true, selector: "ng-component", inputs: { rawValue: "rawValue", rowData: "rowData" }, viewQueries: [{ propertyName: "moreButton", first: true, predicate: ["moreButton"], descendants: true, isSignal: true }, { propertyName: "lazyTrigger", first: true, predicate: ["lazyTrigger"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (isHydratedStrategy()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n <span\n class=\"min-w-0 truncate\"\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n [attr.title]=\"getItemLabel($index)\"\n (click)=\"handleItemClick($index, $event)\"\n >\n {{ getItemLabel($index) }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"text-muted\">\u2022</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n @if (hasMoreItems()) {\n <span\n class=\"absolute end-0 flex h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems(); $event.stopPropagation()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"flex min-w-0 items-center gap-1\">\n @if (displayCount() > 0) {\n <span\n class=\"min-w-0 truncate cursor-pointer text-primary hover:underline\"\n [attr.title]=\"summaryLabel()\"\n (click)=\"openLazyPopover(); $event.stopPropagation()\"\n #lazyTrigger\n >\n {{ summaryLabel() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[280px] rounded-lg p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">{{ popoverHeader() }}</h3>\n </div>\n\n @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ resolveError() }}</div>\n } @else {\n <div class=\"flex max-h-64 flex-col gap-3\">\n @for (item of popoverListItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handlePopoverItemClick($index, $event)\"\n >\n {{ getPopoverItemLabel($index) }}\n </span>\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n </div>\n }\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i1$1.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25940
26007
  }
25941
26008
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetColumnComponent, decorators: [{
25942
26009
  type: Component,
25943
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXLoadingModule, AXPopoverModule], inputs: ['rawValue', 'rowData'], template: "@if (isHydratedStrategy()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handleItemClick($index, $event)\"\n >\n {{ getItemLabel($index) }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"text-muted\">\u2022</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n @if (hasMoreItems()) {\n <span\n class=\"absolute end-0 flex h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems(); $event.stopPropagation()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"flex min-w-0 items-center gap-1\">\n @if (displayCount() > 0) {\n <span\n class=\"cursor-pointer text-primary hover:underline\"\n (click)=\"openLazyPopover(); $event.stopPropagation()\"\n #lazyTrigger\n >\n {{ summaryLabel() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[280px] rounded-lg p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">{{ popoverHeader() }}</h3>\n </div>\n\n @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ resolveError() }}</div>\n } @else {\n <div class=\"flex max-h-64 flex-col gap-3\">\n @for (item of popoverListItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handlePopoverItemClick($index, $event)\"\n >\n {{ getPopoverItemLabel($index) }}\n </span>\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n </div>\n }\n </div>\n</ax-popover>\n" }]
26010
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXLoadingModule, AXPopoverModule], inputs: ['rawValue', 'rowData'], template: "@if (isHydratedStrategy()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n <span\n class=\"min-w-0 truncate\"\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n [attr.title]=\"getItemLabel($index)\"\n (click)=\"handleItemClick($index, $event)\"\n >\n {{ getItemLabel($index) }}\n </span>\n @if ($index < visibleItems().length - 1) {\n <span class=\"text-muted\">\u2022</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n @if (hasMoreItems()) {\n <span\n class=\"absolute end-0 flex h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems(); $event.stopPropagation()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"flex min-w-0 items-center gap-1\">\n @if (displayCount() > 0) {\n <span\n class=\"min-w-0 truncate cursor-pointer text-primary hover:underline\"\n [attr.title]=\"summaryLabel()\"\n (click)=\"openLazyPopover(); $event.stopPropagation()\"\n #lazyTrigger\n >\n {{ summaryLabel() }}\n </span>\n } @else {\n <span class=\"text-muted\">---</span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onPopoverOpenChange($event)\">\n <div class=\"lightest-surface dark:dark-surface min-w-[280px] rounded-lg p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">{{ popoverHeader() }}</h3>\n </div>\n\n @if (!isHydratedStrategy() && resolveStatus() === 'loading') {\n <div class=\"flex min-h-[120px] items-center justify-center\">\n <ax-loading></ax-loading>\n </div>\n } @else if (!isHydratedStrategy() && resolveStatus() === 'error') {\n <div class=\"text-danger text-sm\">{{ resolveError() }}</div>\n } @else {\n <div class=\"flex max-h-64 flex-col gap-3\">\n @for (item of popoverListItems(); track $index) {\n <span\n [class.cursor-pointer]=\"detailPopoverEnabled()\"\n [class.hover:text-primary]=\"detailPopoverEnabled()\"\n [class.hover:underline]=\"detailPopoverEnabled()\"\n (click)=\"handlePopoverItemClick($index, $event)\"\n >\n {{ getPopoverItemLabel($index) }}\n </span>\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n </div>\n }\n </div>\n</ax-popover>\n" }]
25944
26011
  }], ctorParameters: () => [], propDecorators: { moreButton: [{ type: i0.ViewChild, args: ['moreButton', { isSignal: true }] }], lazyTrigger: [{ type: i0.ViewChild, args: ['lazyTrigger', { isSignal: true }] }], morePopover: [{ type: i0.ViewChild, args: ['morePopover', { isSignal: true }] }] } });
25945
26012
 
25946
26013
  var lookupWidgetColumn_component = /*#__PURE__*/Object.freeze({
@@ -26278,6 +26345,7 @@ class AXPMultiSourceSelectorService {
26278
26345
  constructor() {
26279
26346
  //#region ---- Services & Dependencies ----
26280
26347
  this.popupService = inject(AXPopupService);
26348
+ this.dialogOpener = inject(AXPDialogOpener);
26281
26349
  this.definitionService = inject(AXPMultiSourceDefinitionProviderService);
26282
26350
  }
26283
26351
  //#endregion
@@ -26296,13 +26364,20 @@ class AXPMultiSourceSelectorService {
26296
26364
  * Open selector popup
26297
26365
  */
26298
26366
  async open(config) {
26299
- const component = await Promise.resolve().then(function () { return multiSourceSelector_component; }).then((c) => c.AXPMultiSourceSelectorComponent);
26300
- const result = await this.popupService.open(component, {
26301
- title: config.title || config.definition.title,
26302
- size: 'lg',
26367
+ const result = await this.dialogOpener.openPopup({
26368
+ load: () => Promise.resolve().then(function () { return multiSourceSelector_component; }).then((c) => c.AXPMultiSourceSelectorComponent),
26303
26369
  data: {
26304
- config: signal(config),
26370
+ provider: config.definition.name,
26371
+ title: config.title ?? config.definition.title,
26372
+ multiple: config.multiple,
26305
26373
  },
26374
+ show: (component) => this.popupService.open(component, {
26375
+ title: config.title || config.definition.title,
26376
+ size: 'lg',
26377
+ data: {
26378
+ config: signal(config),
26379
+ },
26380
+ }),
26306
26381
  });
26307
26382
  return result?.data || null;
26308
26383
  }
@@ -27309,11 +27384,11 @@ class AXPSelectorStructureWidgetColumnComponent extends AXPValueWidgetComponent
27309
27384
  }
27310
27385
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPSelectorStructureWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
27311
27386
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPSelectorStructureWidgetColumnComponent, isStandalone: true, selector: "axp-selector-structure-widget-column", usesInheritance: true, ngImport: i0, template: `
27312
- <span class="inline-flex items-center gap-2 text-sm" [title]="cellText()">
27387
+ <span class="inline-flex min-w-0 max-w-full items-center gap-2 text-sm" [title]="cellText()">
27313
27388
  @if (previewIcon()) {
27314
27389
  <i [class]="previewIcon()" aria-hidden="true"></i>
27315
27390
  }
27316
- <span>{{ cellText() }}</span>
27391
+ <span class="min-w-0 truncate">{{ cellText() }}</span>
27317
27392
  </span>
27318
27393
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27319
27394
  }
@@ -27323,11 +27398,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
27323
27398
  selector: 'axp-selector-structure-widget-column',
27324
27399
  changeDetection: ChangeDetectionStrategy.OnPush,
27325
27400
  template: `
27326
- <span class="inline-flex items-center gap-2 text-sm" [title]="cellText()">
27401
+ <span class="inline-flex min-w-0 max-w-full items-center gap-2 text-sm" [title]="cellText()">
27327
27402
  @if (previewIcon()) {
27328
27403
  <i [class]="previewIcon()" aria-hidden="true"></i>
27329
27404
  }
27330
- <span>{{ cellText() }}</span>
27405
+ <span class="min-w-0 truncate">{{ cellText() }}</span>
27331
27406
  </span>
27332
27407
  `,
27333
27408
  }]
@@ -30292,98 +30367,102 @@ class AXPMainEntityContentBuilder {
30292
30367
  return { section: s, hasProperties: visibleProperties.length > 0, visibleProperties };
30293
30368
  })))
30294
30369
  .filter((item) => item.hasProperties)
30295
- .map(({ section: s, visibleProperties }) => ({
30296
- type: 'grid-item-layout',
30297
- name: s.id,
30298
- options: toAxpGridItemWidgetOptions(s.layout),
30299
- children: [
30300
- {
30301
- type: 'fieldset-layout',
30302
- options: {
30303
- title: allGroups.find((g) => g.id === s.id)?.title ?? '',
30304
- icon: allGroups.find((g) => g.id === s.id)?.icon ?? '',
30305
- collapsible: true,
30306
- isOpen: !s.collapsed,
30307
- look: 'card',
30308
- showTitle: s.layout?.label?.visible !== false,
30309
- ...(s.layout?.visible != null && String(s.layout.visible).trim() !== ''
30310
- ? { visible: s.layout.visible }
30311
- : {}),
30312
- },
30313
- children: [
30314
- {
30315
- type: 'grid-layout',
30316
- options: {
30317
- grid: {
30318
- default: {
30319
- columns: 12,
30320
- rows: 1,
30321
- gap: '20px',
30370
+ .map(({ section: s, visibleProperties }) => {
30371
+ const sectionLook = s.look ?? 'card';
30372
+ const showSectionChrome = sectionLook !== 'container';
30373
+ return {
30374
+ type: 'grid-item-layout',
30375
+ name: s.id,
30376
+ options: toAxpGridItemWidgetOptions(s.layout),
30377
+ children: [
30378
+ {
30379
+ type: 'fieldset-layout',
30380
+ options: {
30381
+ title: allGroups.find((g) => g.id === s.id)?.title ?? '',
30382
+ icon: allGroups.find((g) => g.id === s.id)?.icon ?? '',
30383
+ collapsible: showSectionChrome,
30384
+ isOpen: !s.collapsed,
30385
+ look: sectionLook,
30386
+ showTitle: showSectionChrome && s.layout?.label?.visible !== false,
30387
+ ...(s.layout?.visible != null && String(s.layout.visible).trim() !== ''
30388
+ ? { visible: s.layout.visible }
30389
+ : {}),
30390
+ },
30391
+ children: [
30392
+ {
30393
+ type: 'grid-layout',
30394
+ options: {
30395
+ grid: {
30396
+ default: {
30397
+ columns: 12,
30398
+ rows: 1,
30399
+ gap: '20px',
30400
+ },
30322
30401
  },
30323
30402
  },
30324
- },
30325
- children: visibleProperties.map((p) => {
30326
- const layout = getPropertyLayout(p.name, p);
30327
- const viewProp = singleInterface?.properties?.find((vp) => vp.name === p.name);
30328
- const prefixed = resolveEntityPropertyBindPath(p.name, viewProp?.dataPath, p.__dataPath);
30329
- // Check if property is editable (exists in update interface)
30330
- const isEditable = p.__isEditable != null
30331
- ? p.__isEditable
30332
- : editablePropertyNames.has(p.name);
30333
- // Check if property has its own disabled option
30334
- const hasOwnDisabled = p.schema.interface?.options?.disabled !== undefined;
30335
- let formFieldVisible;
30336
- const sv = p.schema?.visible;
30337
- // Template strings are evaluated by `AXPExpressionEvaluatorService` in the widget renderer, not here.
30338
- if (typeof sv === 'string') {
30339
- formFieldVisible = sv;
30340
- }
30341
- else if (sv === false) {
30342
- formFieldVisible = false;
30343
- }
30344
- const interfaceType = p.schema.interface?.type ?? '';
30345
- const isReadonlyCodeEditor = interfaceType === 'code-editor' &&
30346
- (p.schema?.readonly === true ||
30347
- p.schema.interface?.options?.readOnly === true ||
30348
- !isEditable);
30349
- return {
30350
- type: 'form-field',
30351
- options: {
30352
- label: p.title,
30353
- showLabel: layout?.label?.visible ?? true,
30354
- ...toAxpGridItemWidgetOptions(layout),
30355
- ...(formFieldVisible !== undefined ? { visible: formFieldVisible } : {}),
30356
- ...(hintFormFieldOptionsFromDescription(p.description) ?? {}),
30357
- },
30358
- children: [
30359
- {
30360
- type: interfaceType,
30361
- path: prefixed,
30362
- name: prefixed,
30363
- ...(isReadonlyCodeEditor ? { mode: 'view' } : {}),
30364
- children: p.schema.interface?.children,
30365
- triggers: p.schema.interface?.triggers,
30366
- valueTransforms: p.schema.interface?.valueTransforms,
30367
- options: merge({}, p.schema.interface?.options, {
30368
- validations: p.validations?.map((c) => ({
30369
- rule: c.rule,
30370
- message: c.message,
30371
- options: c.options,
30372
- })),
30373
- // Attach dataPath for merged properties to be available in widgets/options if needed
30374
- dataPath: p.__dataPath,
30375
- },
30376
- // Only set disabled if property doesn't have its own disabled option
30377
- hasOwnDisabled ? {} : { disabled: !isEditable }),
30403
+ children: visibleProperties.map((p) => {
30404
+ const layout = getPropertyLayout(p.name, p);
30405
+ const viewProp = singleInterface?.properties?.find((vp) => vp.name === p.name);
30406
+ const prefixed = resolveEntityPropertyBindPath(p.name, viewProp?.dataPath, p.__dataPath);
30407
+ // Check if property is editable (exists in update interface)
30408
+ const isEditable = p.__isEditable != null
30409
+ ? p.__isEditable
30410
+ : editablePropertyNames.has(p.name);
30411
+ // Check if property has its own disabled option
30412
+ const hasOwnDisabled = p.schema.interface?.options?.disabled !== undefined;
30413
+ let formFieldVisible;
30414
+ const sv = p.schema?.visible;
30415
+ // Template strings are evaluated by `AXPExpressionEvaluatorService` in the widget renderer, not here.
30416
+ if (typeof sv === 'string') {
30417
+ formFieldVisible = sv;
30418
+ }
30419
+ else if (sv === false) {
30420
+ formFieldVisible = false;
30421
+ }
30422
+ const interfaceType = p.schema.interface?.type ?? '';
30423
+ const isReadonlyCodeEditor = interfaceType === 'code-editor' &&
30424
+ (p.schema?.readonly === true ||
30425
+ p.schema.interface?.options?.readOnly === true ||
30426
+ !isEditable);
30427
+ return {
30428
+ type: 'form-field',
30429
+ options: {
30430
+ label: p.title,
30431
+ showLabel: layout?.label?.visible ?? true,
30432
+ ...toAxpGridItemWidgetOptions(layout),
30433
+ ...(formFieldVisible !== undefined ? { visible: formFieldVisible } : {}),
30434
+ ...(hintFormFieldOptionsFromDescription(p.description) ?? {}),
30378
30435
  },
30379
- ],
30380
- };
30381
- }),
30382
- },
30383
- ],
30384
- },
30385
- ],
30386
- }))),
30436
+ children: [
30437
+ {
30438
+ type: interfaceType,
30439
+ path: prefixed,
30440
+ name: prefixed,
30441
+ ...(isReadonlyCodeEditor ? { mode: 'view' } : {}),
30442
+ children: p.schema.interface?.children,
30443
+ triggers: p.schema.interface?.triggers,
30444
+ valueTransforms: p.schema.interface?.valueTransforms,
30445
+ options: merge({}, p.schema.interface?.options, {
30446
+ validations: p.validations?.map((c) => ({
30447
+ rule: c.rule,
30448
+ message: c.message,
30449
+ options: c.options,
30450
+ })),
30451
+ // Attach dataPath for merged properties to be available in widgets/options if needed
30452
+ dataPath: p.__dataPath,
30453
+ },
30454
+ // Only set disabled if property doesn't have its own disabled option
30455
+ hasOwnDisabled ? {} : { disabled: !isEditable }),
30456
+ },
30457
+ ],
30458
+ };
30459
+ }),
30460
+ },
30461
+ ],
30462
+ },
30463
+ ],
30464
+ };
30465
+ })),
30387
30466
  },
30388
30467
  ],
30389
30468
  };
@@ -31874,7 +31953,7 @@ const AXPCrudModifier = {
31874
31953
  const parentKey = ctx.parentKey.get();
31875
31954
  const request = parentKey != null ? applyHierarchicalRootListFilter(e, parentKey) : e;
31876
31955
  const result = await queryService.fetch(ENTITY_QUERY_DEFAULT, { entity: entityKey, ...request });
31877
- console.log('event', e);
31956
+ console.log('event', entityKey, e);
31878
31957
  if (result && !result.success) {
31879
31958
  throw AXPRequestError.fromCommandResult(result);
31880
31959
  }
@@ -32297,7 +32376,7 @@ class AXPEntityModule {
32297
32376
  },
32298
32377
  {
32299
32378
  key: 'Entity:Bulk',
32300
- command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-DccwhqkT.mjs').then((c) => c.AXPBulkEntityCommand),
32379
+ command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-DITHE0f6.mjs').then((c) => c.AXPBulkEntityCommand),
32301
32380
  },
32302
32381
  {
32303
32382
  key: 'Entity:OpenList',
@@ -32458,7 +32537,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
32458
32537
  },
32459
32538
  {
32460
32539
  key: 'Entity:Bulk',
32461
- command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-DccwhqkT.mjs').then((c) => c.AXPBulkEntityCommand),
32540
+ command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-DITHE0f6.mjs').then((c) => c.AXPBulkEntityCommand),
32462
32541
  },
32463
32542
  {
32464
32543
  key: 'Entity:OpenList',
@@ -32784,4 +32863,4 @@ function detectEntityChanges(oldObj, newObj) {
32784
32863
  */
32785
32864
 
32786
32865
  export { AXPEntityListViewModelResolver as $, AXPEntityDefinitionRegistryService as A, AXPEntityCategoryWidgetViewComponent as B, AXPEntityCommandTriggerViewModel as C, AXPEntityCreateViewElementViewModel as D, AXPEntityCreateViewModelFactory as E, AXPEntityCreateViewSectionViewModel as F, AXPEntityDataProvider as G, AXPEntityDataProviderImpl as H, AXPEntityDataSelectorRowActionsService as I, AXPEntityDataSelectorService as J, AXPEntityDefinitionProviderWidget as K, AXPEntityDefinitionProviderWidgetEditComponent as L, AXPEntityDeletePerformService as M, AXPEntityDetailListViewModel as N, AXPEntityDetailPopoverComponent as O, AXPEntityDetailPopoverService as P, AXPEntityDetailViewModelFactory as Q, AXPEntityDetailViewModelResolver as R, AXPEntityEventDispatcherService as S, AXPEntityFormBuilderService as T, AXPEntityLifecycleHookKeys as U, AXPEntityListPersistenceModeDefault as V, AXPEntityListTableService as W, AXPEntityListToolbarService as X, AXPEntityListViewCardFieldViewModel as Y, AXPEntityListViewColumnViewModel as Z, AXPEntityListViewModelFactory as _, showOperationResultToast as a, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY as a$, AXPEntityListWidget as a0, AXPEntityListWidgetViewComponent as a1, AXPEntityMasterCreateViewModel as a2, AXPEntityMasterListCardSelectActionName as a3, AXPEntityMasterListViewModel as a4, AXPEntityMasterListViewQueryViewModel as a5, AXPEntityMasterSingleElementViewModel as a6, AXPEntityMasterSingleViewGroupViewModel as a7, AXPEntityMasterSingleViewModel as a8, AXPEntityMasterUpdateElementViewModel as a9, AXPLookupWidgetViewComponent as aA, AXPMiddlewareAbortError as aB, AXPMiddlewareEntityStorageService as aC, AXPMultiSourceDefinitionProviderContext as aD, AXPMultiSourceDefinitionProviderService as aE, AXPMultiSourceFederatedSearchService as aF, AXPMultiSourceSelectorComponent as aG, AXPMultiSourceSelectorService as aH, AXPMultiSourceSelectorWidget as aI, AXPMultiSourceSelectorWidgetColumnComponent as aJ, AXPMultiSourceSelectorWidgetEditComponent as aK, AXPMultiSourceSelectorWidgetViewComponent as aL, AXPMultiSourceType as aM, AXPOpenEntityDetailsCommand as aN, AXPOpenEntityListCommand as aO, AXPRelatedColumnEnrichmentService as aP, AXPRelatedColumnMetadataResolver as aQ, AXPSelectorStructureWidget as aR, AXPSelectorStructureWidgetColumnComponent as aS, AXPSelectorStructureWidgetEditComponent as aT, AXPSelectorStructureWidgetViewComponent as aU, AXPShowFileUploaderPopupCommand as aV, AXPTruncatedBreadcrumbComponent as aW, AXPUpdateEntityCommand as aX, AXPUpdateEntityStatusCommand as aY, AXPViewEntityDetailsCommand as aZ, AXP_APPEARANCE_SECTION_ORDER as a_, AXPEntityMasterUpdateViewModel as aa, AXPEntityMasterUpdateViewModelFactory as ab, AXPEntityMiddlewareSkipContext as ac, AXPEntityModule as ad, AXPEntityPreloadFiltersContainerComponent as ae, AXPEntityPreloadFiltersViewModel as af, AXPEntityPreloadFiltersViewModelResolver as ag, AXPEntityResolver as ah, AXPEntityRuntimeAccessorService as ai, AXPEntityService as aj, AXPEntityStorageService as ak, AXPEntityUpdateViewSectionViewModel as al, AXPFileListComponent as am, AXPFileUploaderLoadFilesQuery as an, AXPFileUploaderSaveFilesCommand as ao, AXPFileUploaderWidget as ap, AXPFileUploaderWidgetColumnComponent as aq, AXPFileUploaderWidgetEditComponent as ar, AXPFileUploaderWidgetService as as, AXPFileUploaderWidgetViewComponent as at, AXPGetEntityDetailsQuery as au, AXPLayoutOrderingConfigService as av, AXPLookupByKeyCacheService as aw, AXPLookupWidget as ax, AXPLookupWidgetColumnComponent as ay, AXPLookupWidgetEditComponent as az, buildSelectedIdsFilter as b, defaultSortPresetsMiddlewareProvider as b$, AXP_CLASSIFICATION_SECTION_ORDER as b0, AXP_CLIENT_LOCAL_DEFAULT_MAX_ITEMS as b1, AXP_CLIENT_LOCAL_PLUGIN_NAME as b2, AXP_DATA_SEEDER_TOKEN as b3, AXP_ENTITY_ACTION_PLUGIN as b4, AXP_ENTITY_CONFIG_TOKEN as b5, AXP_ENTITY_DEFINITION_LOADER as b6, AXP_ENTITY_MIDDLEWARE as b7, AXP_ENTITY_MODIFIER as b8, AXP_ENTITY_STORAGE_MIDDLEWARE as b9, axpShowFileUploaderPopupCommandDefinition as bA, axpUpdateEntityStatusCommandDefinition as bB, buildDataSourceTraceSnapshot as bC, canPersistEntityListState as bD, clientLocalPlugin as bE, cloneLayoutArrays as bF, columnOrderingMiddleware as bG, columnOrderingMiddlewareProvider as bH, columnWidthMiddleware as bI, columnWidthMiddlewareProvider as bJ, committedAttachments as bK, composeEntityMiddlewares as bL, composeEntityStorageMiddlewares as bM, computeEntityAggregates as bN, configureEntityListColumnsSettingsMigrateDrop as bO, configureEntityListColumnsSettingsVersion as bP, createColumnOrderingMiddlewareProvider as bQ, createEntityCardDisplayScope as bR, createEntityCardLogicScope as bS, createEntityMiddlewareContext as bT, createEntityStorageContext as bU, createLayoutOrderingMiddlewareProvider as bV, defaultCardLayoutMiddleware as bW, defaultCardLayoutMiddlewareProvider as bX, defaultMultiLanguageMiddleware as bY, defaultMultiLanguageMiddlewareProvider as bZ, defaultSortPresetsMiddleware as b_, AXP_LOOKUP_FILTER_DEFAULT_OPERATOR as ba, AXP_MULTI_SOURCE_DEFINITION_PROVIDER as bb, DEFAULT_COLUMN_ORDER as bc, DEFAULT_PAIR_SPAN_RULES as bd, DEFAULT_PROPERTY_ORDER as be, DEFAULT_SECTION_ORDER as bf, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE as bg, ENTITY_LIST_LAYOUT_META as bh, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY as bi, ENTITY_MASTER_LIST_TRACE_NS as bj, EntityBuilder as bk, EntityDataAccessor as bl, GALLERY_PAGE_COMPONENT_KEY as bm, TREE_CHILDREN_QUERY_TAKE as bn, actionExists as bo, applyDataSourcePagingWithoutLoad as bp, attachmentFieldCount as bq, attachmentNeedsHydration as br, attachmentsPlugin as bs, attachmentsSemanticallyEqual as bt, axpBuildEntityListPageContextSnapshot as bu, axpCreateEntityAiToolInputDefaults as bv, axpCreateEntityCommandDefinition as bw, axpDeleteEntityCommandDefinition as bx, axpOpenEntityListCommandDefinition as by, axpRunEntityListPageContextAction as bz, ATTACHMENTS_PAGE_COMPONENT_KEY as c, provideLocalEntityCatalog as c$, detectEntityChanges as c0, dispatchEntityModifiedSideEffects as c1, ensureHierarchicalRootFilter as c2, ensureLayoutPropertyView as c3, ensureLayoutSection as c4, ensureListActions as c5, entityCreateBridgeMiddleware as c6, entityDeleteBridgeMiddleware as c7, entityGetOneBridgeMiddleware as c8, entityListInstanceCurrentViewPath as c9, hasFileUploaderTitleOrDescriptionFields as cA, hydrateAttachmentFieldToFileList as cB, isAXPMiddlewareAbortError as cC, isAttachmentFieldPresentOnRow as cD, isAttachmentListEntry as cE, isAttachmentStorageRef as cF, isCategoryEntity as cG, isCategoryFilter as cH, isFileListItem as cI, isFileUploaderEditDialogAuto as cJ, isLegacyEntityDataSelectorOptions as cK, layoutOrderingMiddlewareFactory as cL, layoutOrderingMiddlewareProvider as cM, mapEntityStorageErrorToCommandResult as cN, mapLegacyEntityDataSelectorOptions as cO, mergeEntityListViewAndPersistedFilters as cP, normalizeEntityCardHeaderDisplayValue as cQ, normalizeEntityDataSelectorColumnSpecs as cR, normalizeEntityDataSelectorOptions as cS, normalizeEntityFieldToFileList as cT, normalizeEntityListPersistenceMode as cU, normalizeListPaging as cV, prefetchClientLocalRelated as cW, provideEntity as cX, provideEntityMiddlewareBridge as cY, provideEntityRealtimeHandlers as cZ, provideEntityStorageMiddlewareBridge as c_, entityListInstanceFilterPath as ca, entityListStylingRulesPath as cb, entityQueryBridgeMiddleware as cc, entityStorageCreateBridgeMiddleware as cd, entityStorageDeleteBridgeMiddleware as ce, entityStorageGetOneBridgeMiddleware as cf, entityStorageQueryBridgeMiddleware as cg, entityStorageUpdateBridgeMiddleware as ch, entityUpdateBridgeMiddleware as ci, eventDispatchMiddleware as cj, filterEntityMiddlewares as ck, filterEntityStorageMiddlewares as cl, filterSortEntityRows as cm, filterTouchesParentKey as cn, findEntityListRowDataInTree as co, fingerprintAttachmentItem as cp, fingerprintAttachments as cq, fireEntityLifecycleHook as cr, formatLookupItemDisplay as cs, formatLookupItemDisplayAsync as ct, galleryPlugin as cu, getDataSourcePageIndex as cv, getEntityListColumnsSettingsMigrateDrop as cw, getEntityListColumnsSettingsVersion as cx, getEntityListRowId as cy, getMasterInterfacePropertySortKey as cz, AXMEntityCrudService as d, readPersistedEntityListInstanceCurrentView as d0, readPersistedEntityListInstanceFilters as d1, readPersistedEntityListStylingRules as d2, resetPagingForTreeChildrenLoad as d3, resolveAttachmentFieldPath as d4, resolveEntityCardBadgeColorValue as d5, resolveEntityCardHeaderValue as d6, resolveEntityMasterFieldStylingClass as d7, resolveEntityMasterRecordStylingClass as d8, resolveEntityMasterStylingClass as d9, resolveEntityPluginDetailPageOrder as da, resolveFileUploaderEditDialog as db, resolveFileUploaderEntityScope as dc, resolveLookupDisplayField as dd, resolveLookupDisplayTemplate as de, resolveLookupEntityCacheKey as df, resolveLookupEntityKey as dg, resolveMasterInterfacePropertyOrder as dh, restoreEntityListExpandedRows as di, runEntityMiddlewarePipeline as dj, runEntityQuery as dk, runEntityStorageMiddlewarePipeline as dl, searchResultDescriptionMiddleware as dm, searchResultDescriptionMiddlewareProvider as dn, shouldLoadEntityListStateFromStorage as dp, shouldResetEntityListStateOnRouteEntry as dq, traceEntityMasterList as dr, AXMEntityCrudServiceImpl as e, AXPCategoryTreeService as f, AXPClientLocalPluginModule as g, AXPCreateEntityCommand as h, AXPDataSeederService as i, AXPDeleteEntityCommand as j, AXPDomainQueryEntityDefinitionLoader as k, AXPEditFileUploaderCommand as l, AXPEntityBulkPatchPerformService as m, newBulkExecutionId as n, AXPEntityCardComponent as o, persistedAttachments as p, AXPEntityCardFieldsResolver as q, resolveBulkFailureBody as r, settleAfterLoadingDialog as s, AXPEntityCardSelectActionName as t, AXPEntityCardSkeletonComponent as u, AXPEntityCategoryTreeSelectorComponent as v, watchBulkProgress as w, AXPEntityCategoryWidget as x, AXPEntityCategoryWidgetColumnComponent as y, AXPEntityCategoryWidgetEditComponent as z };
32787
- //# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DLW9GiJh.mjs.map
32866
+ //# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-jeOx-Rb8.mjs.map