@acorex-platform/framework-client 0.0.53 → 0.0.56

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 (87) hide show
  1. package/fesm2022/acorex-platform-framework-client-common.mjs +39 -20
  2. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +129 -52
  4. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +48 -34
  6. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  7. package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DS3F1_EN.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DLW9GiJh.mjs} +647 -333
  8. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DLW9GiJh.mjs.map +1 -0
  9. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-CWeKcj8t.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-BY_hDj8A.mjs} +2 -2
  10. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-CWeKcj8t.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-BY_hDj8A.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-CgsgFxT8.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-DccwhqkT.mjs} +2 -2
  12. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-CgsgFxT8.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-DccwhqkT.mjs.map} +1 -1
  13. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-Pfp7Lw_A.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-D7xxrauC.mjs} +2 -2
  14. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-Pfp7Lw_A.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-D7xxrauC.mjs.map} +1 -1
  15. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
  16. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +21 -10
  17. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  18. package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CWvC9Eh2.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-DuFZf8eb.mjs} +509 -380
  19. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-DuFZf8eb.mjs.map +1 -0
  20. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BkrPu1wO.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-Cw2yZfaz.mjs} +3 -3
  21. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BkrPu1wO.mjs.map → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-Cw2yZfaz.mjs.map} +1 -1
  22. package/fesm2022/{acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-WpiEHusZ.mjs → acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-Cbd5Va40.mjs} +3 -3
  23. package/fesm2022/{acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-WpiEHusZ.mjs.map → acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-Cbd5Va40.mjs.map} +1 -1
  24. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-Cadl6guA.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-CcBk1zN_.mjs} +3 -3
  25. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-Cadl6guA.mjs.map → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-CcBk1zN_.mjs.map} +1 -1
  26. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-MHOUqz2l.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BiGUrkFi.mjs} +2 -2
  27. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-MHOUqz2l.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BiGUrkFi.mjs.map} +1 -1
  28. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-BCLxS3rS.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs} +3 -3
  29. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-BCLxS3rS.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs.map} +1 -1
  30. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-D7P08nHH.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DP9mP1CR.mjs} +8 -5
  31. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DP9mP1CR.mjs.map +1 -0
  32. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-oLFeaHdz.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BYg6-PoM.mjs} +4 -4
  33. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-oLFeaHdz.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BYg6-PoM.mjs.map} +1 -1
  34. package/fesm2022/{acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs → acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-ZvUXJs3G.mjs} +3 -3
  35. package/fesm2022/{acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs.map → acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-ZvUXJs3G.mjs.map} +1 -1
  36. package/fesm2022/{acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs → acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.mjs} +5 -5
  37. package/fesm2022/{acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs.map → acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-B_OM0T7i.mjs.map} +1 -1
  38. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
  39. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-Dh_hRxZX.mjs → acorex-platform-framework-client-themes-default-entity-master-create-view.component-DwCoz2Du.mjs} +4 -4
  40. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-Dh_hRxZX.mjs.map → acorex-platform-framework-client-themes-default-entity-master-create-view.component-DwCoz2Du.mjs.map} +1 -1
  41. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-bC_uPN9l.mjs → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BCyFK60f.mjs} +4 -4
  42. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-bC_uPN9l.mjs.map → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BCyFK60f.mjs.map} +1 -1
  43. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-CDzBgDt7.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-2Re1-MvA.mjs} +4 -4
  44. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-CDzBgDt7.mjs.map → acorex-platform-framework-client-themes-default-entity-master-single-view.component-2Re1-MvA.mjs.map} +1 -1
  45. package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-CaV3MdRr.mjs → acorex-platform-framework-client-themes-default-error-401.component-1lfBpY_d.mjs} +3 -3
  46. package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-CaV3MdRr.mjs.map → acorex-platform-framework-client-themes-default-error-401.component-1lfBpY_d.mjs.map} +1 -1
  47. package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-CTA-lxYp.mjs → acorex-platform-framework-client-themes-default-error-404.component-BeWyRCJr.mjs} +3 -3
  48. package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-CTA-lxYp.mjs.map → acorex-platform-framework-client-themes-default-error-404.component-BeWyRCJr.mjs.map} +1 -1
  49. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-PvveUj5c.mjs +22 -0
  50. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-PvveUj5c.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +77 -51
  52. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  53. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +4 -4
  54. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  55. package/i18n/en-AU/activity-log.json +71 -0
  56. package/i18n/en-AU/common-plugins.json +96 -0
  57. package/i18n/en-AU/dynamic-form-designer.json +126 -0
  58. package/i18n/en-AU/general.json +2294 -0
  59. package/i18n/en-AU/layout-designer.json +173 -0
  60. package/i18n/en-AU/layout.json +258 -0
  61. package/i18n/en-AU/platform-layout-widgets.json +332 -0
  62. package/i18n/en-US/activity-log.json +71 -0
  63. package/i18n/en-US/common-plugins.json +96 -0
  64. package/i18n/en-US/dynamic-form-designer.json +126 -0
  65. package/i18n/en-US/general.json +2294 -0
  66. package/i18n/en-US/layout-designer.json +173 -0
  67. package/i18n/en-US/layout.json +258 -0
  68. package/i18n/en-US/platform-layout-widgets.json +336 -0
  69. package/i18n/fa-IR/activity-log.json +71 -0
  70. package/i18n/fa-IR/common-plugins.json +126 -0
  71. package/i18n/fa-IR/dynamic-form-designer.json +126 -0
  72. package/i18n/fa-IR/general.json +2295 -0
  73. package/i18n/fa-IR/layout-designer.json +173 -0
  74. package/i18n/fa-IR/layout.json +258 -0
  75. package/i18n/fa-IR/platform-layout-widgets.json +336 -0
  76. package/package.json +2 -2
  77. package/types/acorex-platform-framework-client-common.d.ts +3 -1
  78. package/types/acorex-platform-framework-client-layout-components.d.ts +3 -1
  79. package/types/acorex-platform-framework-client-layout-designer.d.ts +1 -0
  80. package/types/acorex-platform-framework-client-layout-entity.d.ts +30 -4
  81. package/types/acorex-platform-framework-client-layout-widgets.d.ts +36 -2
  82. package/types/acorex-platform-framework-client-themes-default.d.ts +5 -1
  83. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DS3F1_EN.mjs.map +0 -1
  84. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CWvC9Eh2.mjs.map +0 -1
  85. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-D7P08nHH.mjs.map +0 -1
  86. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-B85b0lsa.mjs +0 -19
  87. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-B85b0lsa.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, mergeDefinitionAndCustomQueryViews, isQueryViewDirty, isCustomQueryView, collectEntityListSortPresets, flattenEntityTableColumns, 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, ENTITY_ROW_POPUP_TITLE_OPTION, resolveEnabledPageListLayouts, resolveRelatedEntityListViews, 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';
@@ -44,7 +44,7 @@ import * as i1$5 from '@angular/forms';
44
44
  import { FormsModule } from '@angular/forms';
45
45
  import { AXUploaderModule } from '@acorex/components/uploader';
46
46
  import { createStringProperty, createBooleanProperty, createNumberProperty, AXPWidgetGroupEnum, AXPPageStatus, AXPWidgetStatus, createSelectProperty } from '@acorex-platform/framework-shared/widget-core';
47
- import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_DOWNLOADABLE_PROPERTY, AXP_READONLY_PROPERTY, AXP_DESCRIPTION_PROPERTY, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_DISABLED_PROPERTY, AXP_ALLOW_CLEAR_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_PLACEHOLDER_PROPERTY, AXPProviderSelectWidgetEditBase, isDataListColumnBand, AXP_ROW_EXPR_PREFIX, applyLeafVisibilityToDataListColumnTree, AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from '@acorex-platform/framework-client/layout/widgets';
47
+ import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_DOWNLOADABLE_PROPERTY, AXP_READONLY_PROPERTY, AXP_DESCRIPTION_PROPERTY, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_DISABLED_PROPERTY, AXP_ALLOW_CLEAR_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_PLACEHOLDER_PROPERTY, AXPProviderSelectWidgetEditBase, flattenDataListWidgetColumns, isDataListColumnBand, AXP_ROW_EXPR_PREFIX, applyLeafVisibilityToDataListColumnTree, AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from '@acorex-platform/framework-client/layout/widgets';
48
48
  import { AXPopupService } from '@acorex/components/popup';
49
49
  import * as i1$4 from '@acorex/components/skeleton';
50
50
  import { AXSkeletonModule } from '@acorex/components/skeleton';
@@ -2686,32 +2686,32 @@ const axpCreateEntityAiToolInputDefaults = {
2686
2686
  };
2687
2687
  const axpCreateEntityCommandDefinition = defineCommand({
2688
2688
  key: 'Entity:Create',
2689
- title: 'Create entity (dialog)',
2689
+ title: '@general:command-catalog.entity.create.title',
2690
2690
  description: 'AXPCreateEntityCommand reads flat input (entity, entityInfo, data, options, metadata) and optional root dialogSize; builds AXPEntityFormBuilderService create chain with exclude/include, decoration header title, layout size; submits insert via entity form flow.',
2691
2691
  executionMode: 'frontend',
2692
2692
  inputs: [
2693
2693
  {
2694
2694
  name: 'dialogSize',
2695
- title: 'Dialog size',
2695
+ title: '@general:command-catalog.entity.create.inputs.dialog-size.title',
2696
2696
  description: 'Optional root dialogSize; layout.size from options can override.',
2697
2697
  interface: { name: 'text-editor' },
2698
2698
  },
2699
2699
  {
2700
2700
  name: 'entity',
2701
- title: 'Entity',
2701
+ title: '@general:command-catalog.entity.create.inputs.entity.title',
2702
2702
  description: 'Entity full name (Module.Entity).',
2703
2703
  interface: { name: 'text-editor' },
2704
2704
  validations: [{ rule: 'required' }],
2705
2705
  },
2706
2706
  {
2707
2707
  name: 'data',
2708
- title: 'Seed data',
2708
+ title: '@general:command-catalog.entity.create.inputs.data.title',
2709
2709
  description: 'Optional create form seed as a JSON object (not a string). Include resolved lookup ids and dates.',
2710
2710
  interface: { name: 'json' },
2711
2711
  },
2712
2712
  {
2713
2713
  name: 'options',
2714
- title: 'Options',
2714
+ title: '@general:command-catalog.entity.create.inputs.options.title',
2715
2715
  description: 'excludeProperties, includeProperties, decoration, layout, process { redirect }. For AI/tool calls, defaults include options.process.redirect = false.',
2716
2716
  interface: { name: 'json' },
2717
2717
  },
@@ -3164,25 +3164,25 @@ var deleteEntity_command = /*#__PURE__*/Object.freeze({
3164
3164
  */
3165
3165
  const axpDeleteEntityCommandDefinition = defineCommand({
3166
3166
  key: 'Entity:Remove',
3167
- title: 'Delete entity',
3167
+ title: '@general:command-catalog.entity.remove.title',
3168
3168
  description: 'AXPDeleteEntityCommand shows a confirm dialog, then deletes entity record(s) with loading UI, toasts, and refresh events.',
3169
3169
  executionMode: 'frontend',
3170
3170
  inputs: [
3171
3171
  {
3172
3172
  name: 'entity',
3173
- title: 'Entity',
3173
+ title: '@general:command-catalog.entity.remove.inputs.entity.title',
3174
3174
  description: 'Entity full name (Module.Entity).',
3175
3175
  interface: { name: 'text-editor' },
3176
3176
  },
3177
3177
  {
3178
3178
  name: 'data',
3179
- title: 'Record(s)',
3179
+ title: '@general:command-catalog.entity.remove.inputs.data.title',
3180
3180
  description: 'Single/bulk row data for delete.',
3181
3181
  interface: { name: 'json' },
3182
3182
  },
3183
3183
  {
3184
3184
  name: 'entities',
3185
- title: 'Multi-entity delete',
3185
+ title: '@general:command-catalog.entity.remove.inputs.entities.title',
3186
3186
  description: 'Optional entities[] for multi-entity delete.',
3187
3187
  interface: { name: 'json' },
3188
3188
  },
@@ -3303,19 +3303,19 @@ var openEntityList_command = /*#__PURE__*/Object.freeze({
3303
3303
  */
3304
3304
  const axpOpenEntityListCommandDefinition = defineCommand({
3305
3305
  key: 'Entity:OpenList',
3306
- title: 'Open entity list',
3306
+ title: '@general:command-catalog.entity.open-list.title',
3307
3307
  description: 'AXPOpenEntityListCommand navigates to /{app}/m/{module}/e/{entity}/list with optional filter query params.',
3308
3308
  executionMode: 'frontend',
3309
3309
  inputs: [
3310
3310
  {
3311
3311
  name: 'entity',
3312
- title: 'Entity',
3312
+ title: '@general:command-catalog.entity.open-list.inputs.entity.title',
3313
3313
  description: 'Entity full name (Module.Entity).',
3314
3314
  interface: { name: 'text-editor' },
3315
3315
  },
3316
3316
  {
3317
3317
  name: 'conditions',
3318
- title: 'List filters',
3318
+ title: '@general:command-catalog.entity.open-list.inputs.conditions.title',
3319
3319
  description: 'Optional conditions for list filters.',
3320
3320
  interface: { name: 'json' },
3321
3321
  },
@@ -5945,19 +5945,19 @@ var showFileUploaderPopup_command = /*#__PURE__*/Object.freeze({
5945
5945
  */
5946
5946
  const axpShowFileUploaderPopupCommandDefinition = defineCommand({
5947
5947
  key: 'FileUploader:ShowPopup',
5948
- title: 'Show file uploader popup',
5948
+ title: '@general:command-catalog.file-uploader.show-popup.title',
5949
5949
  description: 'AXPShowFileUploaderPopupCommand opens the file list popup, saves via FileUploader:SaveFiles, then dispatches entity modify side-effects.',
5950
5950
  executionMode: 'frontend',
5951
5951
  inputs: [
5952
5952
  {
5953
5953
  name: 'entity',
5954
- title: 'Entity',
5954
+ title: '@general:command-catalog.file-uploader.show-popup.inputs.entity.title',
5955
5955
  description: 'Optional entity full name when not nested under options.entity.',
5956
5956
  interface: { name: 'text-editor' },
5957
5957
  },
5958
5958
  {
5959
5959
  name: 'options',
5960
- title: 'Uploader options',
5960
+ title: '@general:command-catalog.file-uploader.show-popup.inputs.options.title',
5961
5961
  description: 'Requires options.entity (name, id, field) from attachments plugin or equivalent.',
5962
5962
  interface: { name: 'json' },
5963
5963
  },
@@ -6750,39 +6750,39 @@ var updateEntityStatus_command = /*#__PURE__*/Object.freeze({
6750
6750
  */
6751
6751
  const axpUpdateEntityStatusCommandDefinition = defineCommand({
6752
6752
  key: 'Entity:UpdateStatus',
6753
- title: 'Update entity status',
6753
+ title: '@general:command-catalog.entity.update-status.title',
6754
6754
  description: 'AXPUpdateEntityStatusCommand patches a status field on one or more records (entity, status, statusField, id|ids) via the entity update path; used as the default status-chip transition command.',
6755
6755
  executionMode: 'frontend',
6756
6756
  inputs: [
6757
6757
  {
6758
6758
  name: 'entity',
6759
- title: 'Entity',
6759
+ title: '@general:command-catalog.entity.update-status.inputs.entity.title',
6760
6760
  description: 'Full entity key (Module.Entity).',
6761
6761
  interface: { name: 'text-editor' },
6762
6762
  validations: [{ rule: 'required' }],
6763
6763
  },
6764
6764
  {
6765
6765
  name: 'status',
6766
- title: 'Status',
6766
+ title: '@general:command-catalog.entity.update-status.inputs.status.title',
6767
6767
  description: 'Target status name/value to write.',
6768
6768
  interface: { name: 'text-editor' },
6769
6769
  validations: [{ rule: 'required' }],
6770
6770
  },
6771
6771
  {
6772
6772
  name: 'statusField',
6773
- title: 'Status field',
6773
+ title: '@general:command-catalog.entity.update-status.inputs.status-field.title',
6774
6774
  description: 'Property path to patch (default statusId).',
6775
6775
  interface: { name: 'text-editor' },
6776
6776
  },
6777
6777
  {
6778
6778
  name: 'id',
6779
- title: 'Record id',
6779
+ title: '@general:command-catalog.entity.update-status.inputs.id.title',
6780
6780
  description: 'Single record id (use ids for bulk).',
6781
6781
  interface: { name: 'text-editor' },
6782
6782
  },
6783
6783
  {
6784
6784
  name: 'ids',
6785
- title: 'Record ids',
6785
+ title: '@general:command-catalog.entity.update-status.inputs.ids.title',
6786
6786
  description: 'Bulk record ids.',
6787
6787
  interface: { name: 'json' },
6788
6788
  },
@@ -9749,17 +9749,17 @@ const ENTITY_LIST_ACTIONS = [
9749
9749
  },
9750
9750
  {
9751
9751
  id: 'remove-filter',
9752
- title: 'Remove filter',
9752
+ title: '@general:terms.interface.voice-list.remove-filter',
9753
9753
  params: [{ name: 'field', required: true, description: 'Visible filter field to remove (not hidden view conditions).' }],
9754
9754
  },
9755
9755
  {
9756
9756
  id: 'clear-filters',
9757
- title: 'Clear filters',
9757
+ title: '@general:terms.interface.voice-list.clear-filters',
9758
9758
  params: [],
9759
9759
  },
9760
9760
  {
9761
9761
  id: 'set-search',
9762
- title: 'Set list search',
9762
+ title: '@general:terms.interface.voice-list.set-search',
9763
9763
  params: [{ name: 'text', required: false, description: 'Quick-search text. Empty string clears search.' }],
9764
9764
  },
9765
9765
  ];
@@ -10065,6 +10065,114 @@ function buildDataSourceTraceSnapshot(dataSource, extras) {
10065
10065
  };
10066
10066
  }
10067
10067
 
10068
+ //#endregion
10069
+ //#region ----- Specs -----
10070
+ function collectEntityColumnFooterSpecs(columns) {
10071
+ if (!columns?.length) {
10072
+ return [];
10073
+ }
10074
+ const specs = [];
10075
+ for (const column of flattenEntityTableColumns(columns)) {
10076
+ const footer = column.footer;
10077
+ if (!footer) {
10078
+ continue;
10079
+ }
10080
+ specs.push({
10081
+ name: column.name,
10082
+ field: column.options?.dataPath || column.name,
10083
+ operation: footer.operation,
10084
+ });
10085
+ }
10086
+ return specs;
10087
+ }
10088
+ //#endregion
10089
+ //#region ----- Loader -----
10090
+ /**
10091
+ * Loads column footer aggregates without blocking the list page.
10092
+ * The request uses the list filter and ignores skip/take.
10093
+ */
10094
+ class AXPEntityListColumnFooterLoader {
10095
+ constructor(aggregate) {
10096
+ this.aggregate = aggregate;
10097
+ this.state = signal({
10098
+ loading: false,
10099
+ values: {},
10100
+ }, /* @ts-ignore */
10101
+ ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
10102
+ this.cache = {
10103
+ filterKey: '',
10104
+ requestId: 0,
10105
+ inFlight: false,
10106
+ };
10107
+ }
10108
+ request(specs, filter) {
10109
+ if (!specs.length) {
10110
+ return;
10111
+ }
10112
+ const filterKey = JSON.stringify(filter ?? null);
10113
+ const sameFilter = this.cache.filterKey === filterKey;
10114
+ if (this.cache.inFlight && sameFilter) {
10115
+ return;
10116
+ }
10117
+ this.cache.filterKey = filterKey;
10118
+ this.cache.inFlight = true;
10119
+ const requestId = ++this.cache.requestId;
10120
+ if (!sameFilter) {
10121
+ this.state.set({ loading: true, values: {} });
10122
+ }
10123
+ const measures = specs.map((spec) => ({
10124
+ reducer: spec.operation,
10125
+ field: spec.operation === 'count' ? undefined : spec.field,
10126
+ alias: spec.name,
10127
+ }));
10128
+ void this.load(specs, filter, measures, requestId);
10129
+ }
10130
+ async load(specs, filter, measures, requestId) {
10131
+ try {
10132
+ const result = await this.aggregate({
10133
+ groupBy: [],
10134
+ measures,
10135
+ filter,
10136
+ });
10137
+ if (requestId !== this.cache.requestId) {
10138
+ return;
10139
+ }
10140
+ const row = result.rows[0];
10141
+ const values = {};
10142
+ for (const spec of specs) {
10143
+ if (!row) {
10144
+ values[spec.name] = spec.operation === 'sum' || spec.operation === 'count' ? 0 : null;
10145
+ continue;
10146
+ }
10147
+ values[spec.name] = coerceFooterNumber(row[spec.name]);
10148
+ }
10149
+ this.state.set({ loading: false, values });
10150
+ }
10151
+ catch {
10152
+ if (requestId !== this.cache.requestId) {
10153
+ return;
10154
+ }
10155
+ this.state.set({ loading: false, values: {} });
10156
+ }
10157
+ finally {
10158
+ if (requestId === this.cache.requestId) {
10159
+ this.cache.inFlight = false;
10160
+ }
10161
+ }
10162
+ }
10163
+ }
10164
+ function coerceFooterNumber(value) {
10165
+ if (typeof value === 'number' && Number.isFinite(value)) {
10166
+ return value;
10167
+ }
10168
+ if (typeof value === 'string' && value.trim().length > 0) {
10169
+ const parsed = Number(value);
10170
+ return Number.isFinite(parsed) ? parsed : null;
10171
+ }
10172
+ return null;
10173
+ }
10174
+ //#endregion
10175
+
10068
10176
  /** @deprecated Use {@link AXPEntityCardSelectActionName}. */
10069
10177
  const AXPEntityMasterListCardSelectActionName = AXPEntityCardSelectActionName;
10070
10178
  class AXPEntityMasterListViewQueryViewModel {
@@ -10317,6 +10425,9 @@ class AXPEntityMasterListViewModel {
10317
10425
  this.filterOperatorMiddleware = this.injector.get(AXPFilterOperatorMiddlewareService);
10318
10426
  this.entityDefinitionRegistry = this.injector.get(AXPEntityDefinitionRegistryService);
10319
10427
  this.cardFieldsResolver = this.injector.get(AXPEntityCardFieldsResolver);
10428
+ this.columnFooterLoader = new AXPEntityListColumnFooterLoader((request) => this.injector.get(AXPEntityRuntimeAccessorService).aggregate(getEntityInfo(this.entityDef).source, request));
10429
+ /** Whole-table footer aggregates for columns that declare `footer`. */
10430
+ this.columnFooter = this.columnFooterLoader.state;
10320
10431
  this.settingEntityKey = `${this.config.module}:${this.config.name}`;
10321
10432
  this.destroyed = new Subject();
10322
10433
  this.lastAppliedSortKey = null;
@@ -10441,6 +10552,7 @@ class AXPEntityMasterListViewModel {
10441
10552
  load: async (e) => {
10442
10553
  resetPagingForTreeChildrenLoad(e, this.entityDef.parentKey);
10443
10554
  const listRequest = this.entityDef.parentKey != null ? applyHierarchicalRootListFilter(e, this.entityDef.parentKey) : e;
10555
+ this.columnFooterLoader.request(collectEntityColumnFooterSpecs(this.entityDef.columns), listRequest.filter);
10444
10556
  const fields = this.buildColumnQueryFields();
10445
10557
  const requestWithFields = fields?.length ? { ...listRequest, fields } : listRequest;
10446
10558
  const execute = this.entityDef.queries?.list?.execute;
@@ -10776,6 +10888,9 @@ class AXPEntityMasterListViewModel {
10776
10888
  }
10777
10889
  return next;
10778
10890
  });
10891
+ // `columnTree` snapshots `visible` when columns are first built. Refresh that snapshot
10892
+ // so a persisted `visible: false` actually hides the column after reload.
10893
+ this.rebuildColumnTree();
10779
10894
  }
10780
10895
  if (Array.isArray(sorts) && sorts.length) {
10781
10896
  this.setActiveSortsFromQueries(sorts);
@@ -11020,6 +11135,18 @@ class AXPEntityMasterListViewModel {
11020
11135
  return next;
11021
11136
  });
11022
11137
  }
11138
+ /**
11139
+ * Table resize events send `column.name` (for example `title`).
11140
+ * Older columns used a `col-` prefix. Persisted settings store `dataPath` when set.
11141
+ */
11142
+ resolvePersistedColumnName(dataField) {
11143
+ const raw = dataField.startsWith('col-') ? dataField.slice(4) : dataField;
11144
+ const match = this.columns().find((column) => {
11145
+ const persistedName = column.column?.options?.dataPath ?? column.name;
11146
+ return column.name === raw || persistedName === raw;
11147
+ });
11148
+ return match ? (match.column?.options?.dataPath ?? match.name) : raw;
11149
+ }
11023
11150
  async saveSettings(changesType, data) {
11024
11151
  if (!(await this.shouldPersistListState())) {
11025
11152
  return;
@@ -11027,8 +11154,29 @@ class AXPEntityMasterListViewModel {
11027
11154
  switch (changesType) {
11028
11155
  case 'columnSizes': {
11029
11156
  const columnSizeData = data;
11157
+ const dataField = String(columnSizeData?.dataField ?? '');
11158
+ const width = toPersistedColumnWidth(columnSizeData?.width);
11159
+ if (!dataField || !width) {
11160
+ break;
11161
+ }
11162
+ const persistedName = this.resolvePersistedColumnName(dataField);
11163
+ this.columns.update((columns) => {
11164
+ let changed = false;
11165
+ const next = columns.map((column) => {
11166
+ const key = column.column?.options?.dataPath ?? column.name;
11167
+ if (key !== persistedName && column.name !== persistedName) {
11168
+ return column;
11169
+ }
11170
+ if (column.width === width) {
11171
+ return column;
11172
+ }
11173
+ changed = true;
11174
+ column.width = width;
11175
+ return column;
11176
+ });
11177
+ return changed ? next : columns;
11178
+ });
11030
11179
  await this.enqueueSettingsUpdate((prev) => {
11031
- const field = columnSizeData.dataField.split('-')[1];
11032
11180
  const newSettings = { ...prev };
11033
11181
  const existingColumns = prev?.list?.views?.[this.view().name]?.columns;
11034
11182
  const baseColumns = Array.isArray(existingColumns) && existingColumns.length
@@ -11040,7 +11188,7 @@ class AXPEntityMasterListViewModel {
11040
11188
  }));
11041
11189
  const updatedColumns = baseColumns.map((c) => ({
11042
11190
  ...c,
11043
- width: c.name === field ? columnSizeData.width : c.width,
11191
+ width: c.name === persistedName ? width : c.width,
11044
11192
  }));
11045
11193
  set(newSettings, `list.views.${this.view().name}.columns`, updatedColumns);
11046
11194
  set(newSettings, `list.views.${this.view().name}.columnsVersion`, getEntityListColumnsSettingsVersion());
@@ -11475,7 +11623,7 @@ class AXPEntityMasterListViewModel {
11475
11623
  */
11476
11624
  async loadFilterDefinitions() {
11477
11625
  const definitions = await collectEntityListFilterDefinitions(this.entityDef, (moduleName, entityName) => this.entityDefinitionRegistry.resolve(moduleName, entityName).catch(() => null), {
11478
- resolveWidget: (type) => this.widgetResolver.resolve(type),
11626
+ resolveWidget: (type) => this.widgetResolver.getOptional(type),
11479
11627
  });
11480
11628
  this.filterDefinitions.set(definitions);
11481
11629
  }
@@ -12260,6 +12408,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
12260
12408
  type: Injectable,
12261
12409
  args: [{ providedIn: 'root' }]
12262
12410
  }] });
12411
+ function toPersistedColumnWidth(width) {
12412
+ if (typeof width === 'number' && Number.isFinite(width) && width > 0) {
12413
+ return `${Math.round(width)}px`;
12414
+ }
12415
+ if (typeof width !== 'string') {
12416
+ return undefined;
12417
+ }
12418
+ const trimmed = width.trim();
12419
+ if (!trimmed || trimmed === 'auto') {
12420
+ return undefined;
12421
+ }
12422
+ if (/^\d+(\.\d+)?$/.test(trimmed)) {
12423
+ const parsed = Number(trimmed);
12424
+ return Number.isFinite(parsed) && parsed > 0 ? `${Math.round(parsed)}px` : undefined;
12425
+ }
12426
+ return trimmed;
12427
+ }
12263
12428
  const AXPEntityListViewModelResolver = async (route, state, service = inject(AXPEntityListViewModelFactory), router = inject(Router), hooks = inject(AXPHookService)) => {
12264
12429
  const moduleName = route.parent?.paramMap.get('module');
12265
12430
  const entityName = route.paramMap.get('entity');
@@ -13159,7 +13324,7 @@ class AXPEntityPreloadFiltersViewModel {
13159
13324
  //#region ---- Methods ----
13160
13325
  async loadFilterDefinitions() {
13161
13326
  const definitions = await collectEntityListFilterDefinitions(this.entityDef, (moduleName, entityName) => this.entityRegistry.resolve(moduleName, entityName).catch(() => null), {
13162
- resolveWidget: (type) => this.widgetResolver.resolve(type),
13327
+ resolveWidget: (type) => this.widgetResolver.getOptional(type),
13163
13328
  });
13164
13329
  this.filterDefinitions.set(definitions);
13165
13330
  }
@@ -13835,7 +14000,7 @@ class AXMAttachmentsPageComponentProvider {
13835
14000
  return [
13836
14001
  {
13837
14002
  key: ATTACHMENTS_PAGE_COMPONENT_KEY,
13838
- loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-CWeKcj8t.mjs').then((m) => m.AXMAttachmentsPageComponent),
14003
+ loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-BY_hDj8A.mjs').then((m) => m.AXMAttachmentsPageComponent),
13839
14004
  },
13840
14005
  ];
13841
14006
  }
@@ -14372,7 +14537,7 @@ class AXMGalleryPageComponentProvider {
14372
14537
  return [
14373
14538
  {
14374
14539
  key: GALLERY_PAGE_COMPONENT_KEY,
14375
- loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-Pfp7Lw_A.mjs').then((m) => m.AXMGalleryPageComponent),
14540
+ loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-D7xxrauC.mjs').then((m) => m.AXMGalleryPageComponent),
14376
14541
  },
14377
14542
  ];
14378
14543
  }
@@ -17332,7 +17497,7 @@ class AXPTruncatedBreadcrumbComponent {
17332
17497
  <span
17333
17498
  class="text-sm text-primary cursor-pointer hover:opacity-75 ml-1"
17334
17499
  (click)="handleCollapseClick($event)"
17335
- title="Collapse"
17500
+ [attr.title]="'@general:terms.interface.collapse-path' | translate | async"
17336
17501
  >
17337
17502
  <ax-icon [class]="eyeIcon()" class="text-primary"></ax-icon>
17338
17503
  </span>
@@ -17388,7 +17553,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
17388
17553
  <span
17389
17554
  class="text-sm text-primary cursor-pointer hover:opacity-75 ml-1"
17390
17555
  (click)="handleCollapseClick($event)"
17391
- title="Collapse"
17556
+ [attr.title]="'@general:terms.interface.collapse-path' | translate | async"
17392
17557
  >
17393
17558
  <ax-icon [class]="eyeIcon()" class="text-primary"></ax-icon>
17394
17559
  </span>
@@ -18528,9 +18693,25 @@ function mapEntityColumnToWidgetColumn(entity, column) {
18528
18693
  title: columnDef.title || property?.title || columnDef.name,
18529
18694
  width: columnDef.options?.width,
18530
18695
  visible: columnDef.options?.visible !== false,
18696
+ ...(columnDef.footer ? { footer: columnDef.footer } : {}),
18531
18697
  widget,
18532
18698
  };
18533
18699
  }
18700
+ function collectDataListColumnFooterSpecs(columns) {
18701
+ const specs = [];
18702
+ for (const column of flattenDataListWidgetColumns(columns)) {
18703
+ const footer = column.footer;
18704
+ if (!footer) {
18705
+ continue;
18706
+ }
18707
+ specs.push({
18708
+ name: column.name,
18709
+ field: column.widget?.path || column.name,
18710
+ operation: footer.operation,
18711
+ });
18712
+ }
18713
+ return specs;
18714
+ }
18534
18715
  /**
18535
18716
  * Applies entity column width (explicit or resolved via {@link AXPColumnWidthService}) to data-list columns.
18536
18717
  */
@@ -18612,6 +18793,7 @@ class AXPEntityListTableService {
18612
18793
  this.contextEvalFactory = inject(AXPContextEvalFactory);
18613
18794
  this.settings = inject(AXPSettingsService);
18614
18795
  this.columnWidthService = inject(AXPColumnWidthService);
18796
+ this.entityAccessor = inject(AXPEntityRuntimeAccessorService);
18615
18797
  this.evaluateExpressions = async (options, data) => {
18616
18798
  if (!options) {
18617
18799
  return {};
@@ -18640,11 +18822,16 @@ class AXPEntityListTableService {
18640
18822
  showIndex = false;
18641
18823
  }
18642
18824
  }
18825
+ const columns = this.createColumnsFromProperties(entity, options);
18826
+ const footerSpecs = collectDataListColumnFooterSpecs(columns);
18827
+ const columnFooter = footerSpecs.length
18828
+ ? new AXPEntityListColumnFooterLoader((request) => this.entityAccessor.aggregate(getEntityInfo(entity).source, request))
18829
+ : undefined;
18643
18830
  const listOptions = {
18644
18831
  // 📊 Data Source
18645
- dataSource: this.createDataSource(entity, options),
18832
+ dataSource: this.createDataSource(entity, options, columnFooter, footerSpecs),
18646
18833
  // 📋 Columns from Properties
18647
- columns: this.createColumnsFromProperties(entity, options),
18834
+ columns,
18648
18835
  // 🎯 Row Commands from Actions
18649
18836
  primaryCommands: this.createRowCommands(allActions, 'primary'),
18650
18837
  secondaryCommands: this.createRowCommands(allActions, 'secondary'),
@@ -18653,7 +18840,8 @@ class AXPEntityListTableService {
18653
18840
  allowSelection: this.hasSelectedScopeActions(entity),
18654
18841
  paging: true,
18655
18842
  showHeader: true,
18656
- showFooter: false,
18843
+ showFooter: footerSpecs.length > 0,
18844
+ ...(columnFooter ? { columnFooter: columnFooter.state } : {}),
18657
18845
  // 🔗 Entity Configuration
18658
18846
  parentField: entity.parentKey,
18659
18847
  fetchDataMode: 'manual',
@@ -18673,7 +18861,7 @@ class AXPEntityListTableService {
18673
18861
  /**
18674
18862
  * Create DataSource for Entity
18675
18863
  */
18676
- createDataSource(entity, options) {
18864
+ createDataSource(entity, options, columnFooter, footerSpecs) {
18677
18865
  return new AXDataSource({
18678
18866
  byKey: (key) => {
18679
18867
  const func = entity.queries?.byKey?.execute;
@@ -18685,6 +18873,10 @@ class AXPEntityListTableService {
18685
18873
  throw new Error(`Entity ${entity.name} does not have a list query`);
18686
18874
  }
18687
18875
  resetPagingForTreeChildrenLoad(e, entity.parentKey);
18876
+ if (columnFooter && footerSpecs.length) {
18877
+ const scoped = entity.parentKey ? applyHierarchicalRootListFilter(e, entity.parentKey) : e;
18878
+ columnFooter.request(footerSpecs, scoped.filter);
18879
+ }
18688
18880
  return func(e);
18689
18881
  },
18690
18882
  pageSize: options?.pageSize || entity.interfaces?.master?.list?.views?.[0]?.pageSize || 10,
@@ -18931,7 +19123,7 @@ class AXPEntityListToolbarService {
18931
19123
  */
18932
19124
  async createFilterDefinitions(entity) {
18933
19125
  return collectEntityListFilterDefinitions(entity, (moduleName, entityName) => this.entityRegistry.resolve(moduleName, entityName).catch(() => null), {
18934
- resolveWidget: (type) => this.widgetResolver.resolve(type),
19126
+ resolveWidget: (type) => this.widgetResolver.getOptional(type),
18935
19127
  });
18936
19128
  }
18937
19129
  /**
@@ -19994,7 +20186,9 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
19994
20186
  defaultValue: this.getValue()?.table,
19995
20187
  });
19996
20188
  const parentFilters = this.getMergedToolbarFilters();
19997
- const viewFilters = initialView ? queryViewConditionsToFilterQueries(initialView) : [];
20189
+ const viewFilters = initialView
20190
+ ? withQueryViewFilterVisibility(initialView, queryViewConditionsToFilterQueries(initialView))
20191
+ : [];
19998
20192
  const toolbarState = {
19999
20193
  view: initialView?.name,
20000
20194
  filters: initialView ? [...parentFilters, ...viewFilters] : parentFilters,
@@ -21369,98 +21563,195 @@ var lookupWidgetView_component = /*#__PURE__*/Object.freeze({
21369
21563
  AXPLookupWidgetViewComponent: AXPLookupWidgetViewComponent
21370
21564
  });
21371
21565
 
21372
- //#region ---- Expression Scope ----
21373
- /**
21374
- * Builds the expression scope used to evaluate lookup `create.context` templates.
21375
- * Matches widget-renderer `context.eval` / `context.set` semantics.
21376
- */
21377
- function buildLookupExpressionScope(contextService, parentPath) {
21378
- return {
21379
- context: {
21380
- eval: (path) => {
21381
- const fullPath = path.startsWith('>') && parentPath ? `${parentPath}.${path.substring(1)}` : path;
21382
- return contextService.getValue(fullPath);
21566
+ const AXP_LOOKUP_FILTER_DEFAULT_OPERATOR = 'equal';
21567
+ const AXPLookupWidget = {
21568
+ name: 'lookup-editor',
21569
+ title: 'Lookup',
21570
+ categories: [],
21571
+ groups: [AXPWidgetGroupEnum.EntityWidget],
21572
+ defaultFilterWidgetName: 'lookup-filter',
21573
+ type: 'editor',
21574
+ icon: 'fa-light fa-list-radio',
21575
+ properties: [
21576
+ AXP_DISABLED_PROPERTY,
21577
+ AXP_ALLOW_CLEAR_PROPERTY,
21578
+ AXP_DATA_PATH_PROPERTY,
21579
+ {
21580
+ name: 'expose',
21581
+ title: 'Expose',
21582
+ group: AXP_DATA_PROPERTY_GROUP,
21583
+ schema: {
21584
+ dataType: 'string',
21585
+ interface: {
21586
+ name: 'expose',
21587
+ path: 'options.expose',
21588
+ type: AXPWidgetsCatalog.select,
21589
+ },
21383
21590
  },
21384
- set: (path, value) => {
21385
- contextService.update(path, value, { origin: 'user' });
21591
+ visible: true,
21592
+ },
21593
+ {
21594
+ name: 'entity',
21595
+ title: 'Entity',
21596
+ group: AXP_DATA_PROPERTY_GROUP,
21597
+ schema: {
21598
+ dataType: 'string',
21599
+ interface: {
21600
+ name: 'entity',
21601
+ path: 'options.entity',
21602
+ type: AXPWidgetsCatalog.text,
21603
+ },
21386
21604
  },
21387
- data: () => contextService.data(),
21388
- isDirty: () => {
21389
- if (!contextService.isSavedCommitted()) {
21390
- return false;
21391
- }
21392
- return contextService.isDirty();
21605
+ visible: true,
21606
+ },
21607
+ AXP_ALLOW_MULTIPLE_PROPERTY,
21608
+ createBooleanProperty({
21609
+ name: 'popoverEnabled',
21610
+ title: 'Entity Detail Popover',
21611
+ path: 'options.popover.enabled',
21612
+ group: AXP_BEHAVIOR_PROPERTY_GROUP,
21613
+ defaultValue: true,
21614
+ }),
21615
+ {
21616
+ name: 'displayFormat',
21617
+ title: 'Display Format',
21618
+ group: AXP_DATA_PROPERTY_GROUP,
21619
+ schema: {
21620
+ dataType: 'string',
21621
+ interface: {
21622
+ name: 'displayFormat',
21623
+ path: 'options.displayFormat',
21624
+ type: AXPWidgetsCatalog.template,
21625
+ },
21393
21626
  },
21394
- options: (path) => {
21395
- if (path == null || path === '') {
21396
- return contextService.getValue('options');
21397
- }
21398
- return contextService.getValue(`options.${path}`);
21627
+ visible: true,
21628
+ },
21629
+ {
21630
+ name: 'columnResolveStrategy',
21631
+ title: 'Column resolve strategy',
21632
+ group: AXP_DATA_PROPERTY_GROUP,
21633
+ schema: {
21634
+ dataType: 'string',
21635
+ defaultValue: 'hydrated',
21636
+ interface: {
21637
+ name: 'columnResolveStrategy',
21638
+ path: 'options.columnResolve.strategy',
21639
+ type: AXPWidgetsCatalog.select,
21640
+ valueTransforms: objectKeyValueTransforms('id'),
21641
+ options: {
21642
+ dataSource: [
21643
+ { id: 'hydrated', title: 'Hydrated (titles on row)' },
21644
+ { id: 'idsWithCount', title: 'Ids + count on row (load titles on open)' },
21645
+ { id: 'countOnly', title: 'Count on row (named query on open)' },
21646
+ ],
21647
+ },
21648
+ },
21399
21649
  },
21650
+ visible: true,
21400
21651
  },
21401
- events: {},
21402
- widget: {},
21403
- methods: {},
21404
- vars: {},
21405
- };
21406
- }
21407
- //#endregion
21408
- //#region ---- Create Context Evaluation ----
21409
- /**
21410
- * Deep-evaluates expression strings inside lookup `create.context` (e.g. parentId from context).
21411
- */
21412
- async function evaluateLookupCreateContext(template, expressionEvaluator, scope) {
21413
- if (!template || !isObjectLike(template)) {
21414
- return {};
21415
- }
21416
- return (await evaluateLookupCreateContextValue(template, expressionEvaluator, scope));
21417
- }
21418
- async function evaluateLookupCreateContextValue(value, expressionEvaluator, scope) {
21419
- if (typeof value === 'string' && expressionEvaluator.isExpression(value)) {
21420
- return expressionEvaluator.evaluate(value, scope);
21421
- }
21422
- if (isArray(value)) {
21423
- const results = await Promise.all(value.map((entry) => evaluateLookupCreateContextValue(entry, expressionEvaluator, scope)));
21424
- return results;
21425
- }
21426
- if (isObjectLike(value)) {
21427
- const result = {};
21428
- for (const [key, entry] of Object.entries(value)) {
21429
- result[key] = await evaluateLookupCreateContextValue(entry, expressionEvaluator, scope);
21430
- }
21431
- return result;
21432
- }
21433
- return value;
21434
- }
21435
- /**
21436
- * Removes null/undefined entries from resolved create context before Entity:Create.
21437
- */
21438
- function compactLookupCreateContext(data) {
21439
- const result = {};
21440
- for (const [key, value] of Object.entries(cloneDeep(data))) {
21441
- if (!isNil(value) && value !== '') {
21442
- result[key] = value;
21443
- }
21444
- }
21445
- return result;
21446
- }
21447
- //#endregion
21448
-
21449
- //#endregion
21450
- class AXPEntityDataSelectorRowActionsService {
21451
- constructor() {
21452
- //#region ---- Services & Dependencies ----
21453
- this.expressionEvaluator = inject(AXPExpressionEvaluatorService);
21454
- this.commandService = inject(AXPCommandService);
21455
- }
21456
- //#endregion
21457
- //#region ---- Public Methods ----
21458
- /**
21459
- * Build a row-actions handler for {@link AXPDataSelectorComponent} from entity list actions.
21460
- */
21461
- createHandler(entity, config) {
21462
- const primaryFilters = config.primary ?? [];
21463
- const secondaryFilters = config.secondary ?? [];
21652
+ {
21653
+ name: 'columnResolveCountFieldPath',
21654
+ title: 'Column resolve — count field path',
21655
+ group: AXP_DATA_PROPERTY_GROUP,
21656
+ schema: {
21657
+ dataType: 'string',
21658
+ interface: {
21659
+ name: 'columnResolveCountFieldPath',
21660
+ path: 'options.columnResolve.countFieldPath',
21661
+ type: AXPWidgetsCatalog.text,
21662
+ },
21663
+ },
21664
+ visible: true,
21665
+ },
21666
+ {
21667
+ name: 'columnResolveIdsPath',
21668
+ title: 'Column resolve — ids path',
21669
+ group: AXP_DATA_PROPERTY_GROUP,
21670
+ schema: {
21671
+ dataType: 'string',
21672
+ interface: {
21673
+ name: 'columnResolveIdsPath',
21674
+ path: 'options.columnResolve.idsPath',
21675
+ type: AXPWidgetsCatalog.text,
21676
+ },
21677
+ },
21678
+ visible: true,
21679
+ },
21680
+ {
21681
+ name: 'columnResolveQueryKey',
21682
+ title: 'Column resolve — query key (countOnly)',
21683
+ group: AXP_DATA_PROPERTY_GROUP,
21684
+ schema: {
21685
+ dataType: 'string',
21686
+ interface: {
21687
+ name: 'columnResolveQueryKey',
21688
+ path: 'options.columnResolve.queryKey',
21689
+ type: AXPWidgetsCatalog.text,
21690
+ },
21691
+ },
21692
+ visible: true,
21693
+ },
21694
+ {
21695
+ name: 'columnResolveQueryParams',
21696
+ title: 'Column resolve — query params (JSON: param → row path)',
21697
+ group: AXP_DATA_PROPERTY_GROUP,
21698
+ schema: {
21699
+ dataType: 'string',
21700
+ interface: {
21701
+ name: 'columnResolveQueryParams',
21702
+ path: 'options.columnResolve.queryParams',
21703
+ type: AXPWidgetsCatalog.text,
21704
+ },
21705
+ },
21706
+ visible: true,
21707
+ },
21708
+ {
21709
+ name: 'columnResolveQueryResultItemsPath',
21710
+ title: 'Column resolve — query result items path',
21711
+ group: AXP_DATA_PROPERTY_GROUP,
21712
+ schema: {
21713
+ dataType: 'string',
21714
+ defaultValue: 'items',
21715
+ interface: {
21716
+ name: 'columnResolveQueryResultItemsPath',
21717
+ path: 'options.columnResolve.queryResultItemsPath',
21718
+ type: AXPWidgetsCatalog.text,
21719
+ },
21720
+ },
21721
+ visible: true,
21722
+ },
21723
+ ],
21724
+ components: {
21725
+ view: {
21726
+ component: () => Promise.resolve().then(function () { return lookupWidgetView_component; }).then((c) => c.AXPLookupWidgetViewComponent),
21727
+ },
21728
+ edit: {
21729
+ component: () => Promise.resolve().then(function () { return lookupWidgetEdit_component; }).then((c) => c.AXPLookupWidgetEditComponent),
21730
+ },
21731
+ column: {
21732
+ component: () => Promise.resolve().then(function () { return lookupWidgetColumn_component; }).then((c) => c.AXPLookupWidgetColumnComponent),
21733
+ },
21734
+ designer: {
21735
+ component: () => Promise.resolve().then(function () { return lookupWidgetEdit_component; }).then((c) => c.AXPLookupWidgetEditComponent),
21736
+ },
21737
+ },
21738
+ };
21739
+
21740
+ //#endregion
21741
+ class AXPEntityDataSelectorRowActionsService {
21742
+ constructor() {
21743
+ //#region ---- Services & Dependencies ----
21744
+ this.expressionEvaluator = inject(AXPExpressionEvaluatorService);
21745
+ this.commandService = inject(AXPCommandService);
21746
+ }
21747
+ //#endregion
21748
+ //#region ---- Public Methods ----
21749
+ /**
21750
+ * Build a row-actions handler for {@link AXPDataSelectorComponent} from entity list actions.
21751
+ */
21752
+ createHandler(entity, config) {
21753
+ const primaryFilters = config.primary ?? [];
21754
+ const secondaryFilters = config.secondary ?? [];
21464
21755
  if (primaryFilters.length === 0 && secondaryFilters.length === 0) {
21465
21756
  return undefined;
21466
21757
  }
@@ -21629,6 +21920,83 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
21629
21920
  }]
21630
21921
  }] });
21631
21922
 
21923
+ //#region ---- Expression Scope ----
21924
+ /**
21925
+ * Builds the expression scope used to evaluate lookup `create.context` templates.
21926
+ * Matches widget-renderer `context.eval` / `context.set` semantics.
21927
+ */
21928
+ function buildLookupExpressionScope(contextService, parentPath) {
21929
+ return {
21930
+ context: {
21931
+ eval: (path) => {
21932
+ const fullPath = path.startsWith('>') && parentPath ? `${parentPath}.${path.substring(1)}` : path;
21933
+ return contextService.getValue(fullPath);
21934
+ },
21935
+ set: (path, value) => {
21936
+ contextService.update(path, value, { origin: 'user' });
21937
+ },
21938
+ data: () => contextService.data(),
21939
+ isDirty: () => {
21940
+ if (!contextService.isSavedCommitted()) {
21941
+ return false;
21942
+ }
21943
+ return contextService.isDirty();
21944
+ },
21945
+ options: (path) => {
21946
+ if (path == null || path === '') {
21947
+ return contextService.getValue('options');
21948
+ }
21949
+ return contextService.getValue(`options.${path}`);
21950
+ },
21951
+ },
21952
+ events: {},
21953
+ widget: {},
21954
+ methods: {},
21955
+ vars: {},
21956
+ };
21957
+ }
21958
+ //#endregion
21959
+ //#region ---- Create Context Evaluation ----
21960
+ /**
21961
+ * Deep-evaluates expression strings inside lookup `create.context` (e.g. parentId from context).
21962
+ */
21963
+ async function evaluateLookupCreateContext(template, expressionEvaluator, scope) {
21964
+ if (!template || !isObjectLike(template)) {
21965
+ return {};
21966
+ }
21967
+ return (await evaluateLookupCreateContextValue(template, expressionEvaluator, scope));
21968
+ }
21969
+ async function evaluateLookupCreateContextValue(value, expressionEvaluator, scope) {
21970
+ if (typeof value === 'string' && expressionEvaluator.isExpression(value)) {
21971
+ return expressionEvaluator.evaluate(value, scope);
21972
+ }
21973
+ if (isArray(value)) {
21974
+ const results = await Promise.all(value.map((entry) => evaluateLookupCreateContextValue(entry, expressionEvaluator, scope)));
21975
+ return results;
21976
+ }
21977
+ if (isObjectLike(value)) {
21978
+ const result = {};
21979
+ for (const [key, entry] of Object.entries(value)) {
21980
+ result[key] = await evaluateLookupCreateContextValue(entry, expressionEvaluator, scope);
21981
+ }
21982
+ return result;
21983
+ }
21984
+ return value;
21985
+ }
21986
+ /**
21987
+ * Removes null/undefined entries from resolved create context before Entity:Create.
21988
+ */
21989
+ function compactLookupCreateContext(data) {
21990
+ const result = {};
21991
+ for (const [key, value] of Object.entries(cloneDeep(data))) {
21992
+ if (!isNil(value) && value !== '') {
21993
+ result[key] = value;
21994
+ }
21995
+ }
21996
+ return result;
21997
+ }
21998
+ //#endregion
21999
+
21632
22000
  const LEGACY_ENTITY_DATA_SELECTOR_OPTION_KEYS = [
21633
22001
  'allowMultiple',
21634
22002
  'allowUnselect',
@@ -22800,6 +23168,18 @@ function createLookupEntityTreeDataSource(config) {
22800
23168
  //#endregion
22801
23169
  //#region ---- Helpers ----
22802
23170
  const LOADING_LABEL = '@acorex:common.status.loading';
23171
+ /**
23172
+ * Entity keys can come back as strings from `byKey` while the bound value is numeric (or vice versa).
23173
+ */
23174
+ function isSameLookupKey(left, right) {
23175
+ if (left === right) {
23176
+ return true;
23177
+ }
23178
+ if (left == null || right == null) {
23179
+ return false;
23180
+ }
23181
+ return String(left) === String(right);
23182
+ }
22803
23183
  /**
22804
23184
  * Resolves stored widget value(s) to entity key(s).
22805
23185
  */
@@ -22856,7 +23236,7 @@ function areLookupSelectionItemsHydrated(rawValue, items, options) {
22856
23236
  }
22857
23237
  const { valueField } = options;
22858
23238
  return ids.every((id) => {
22859
- const item = items.find((candidate) => get(candidate, valueField) === id);
23239
+ const item = items.find((candidate) => isSameLookupKey(get(candidate, valueField), id));
22860
23240
  return item != null && isLookupItemHydrated(item, options);
22861
23241
  });
22862
23242
  }
@@ -23254,6 +23634,8 @@ function findTreeNode(nodes, valueField, key) {
23254
23634
  //#region ----- Component -----
23255
23635
  class AXPLookupWidgetTablePanelComponent {
23256
23636
  #loadedItems;
23637
+ /** Set when a row command fires so the following row click does not select. */
23638
+ #skipNextRowSelection;
23257
23639
  #totalCount;
23258
23640
  //#endregion
23259
23641
  //#region ----- Lifecycle -----
@@ -23282,9 +23664,13 @@ class AXPLookupWidgetTablePanelComponent {
23282
23664
  /** When set, matching text in table cells is highlighted. */
23283
23665
  this.highlightText = input('', /* @ts-ignore */
23284
23666
  ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
23667
+ /** Entity list row actions (preview, etc.) shown as command columns. */
23668
+ this.rowActions = input(/* @ts-ignore */
23669
+ ...(ngDevMode ? [undefined, { debugName: "rowActions" }] : /* istanbul ignore next */ []));
23285
23670
  //#endregion
23286
23671
  //#region ----- Outputs -----
23287
23672
  this.itemClick = output();
23673
+ this.rowAction = output();
23288
23674
  //#endregion
23289
23675
  //#region ----- View Children -----
23290
23676
  this.tableRef = viewChild(AXDataTableComponent, /* @ts-ignore */
@@ -23293,7 +23679,20 @@ class AXPLookupWidgetTablePanelComponent {
23293
23679
  //#region ----- State -----
23294
23680
  this.visibleColumns = computed(() => this.columns().filter((column) => column.visible !== false), /* @ts-ignore */
23295
23681
  ...(ngDevMode ? [{ debugName: "visibleColumns" }] : /* istanbul ignore next */ []));
23682
+ this.hasRowActionPrimary = computed(() => this.rowActions()?.hasPrimary() ?? false, /* @ts-ignore */
23683
+ ...(ngDevMode ? [{ debugName: "hasRowActionPrimary" }] : /* istanbul ignore next */ []));
23684
+ this.hasRowActionDropdown = computed(() => this.rowActions()?.hasDropdown() ?? false, /* @ts-ignore */
23685
+ ...(ngDevMode ? [{ debugName: "hasRowActionDropdown" }] : /* istanbul ignore next */ []));
23686
+ this.primaryRowActionItems = computed(() => (this.rowActions()?.getPrimaryItems() ?? []), /* @ts-ignore */
23687
+ ...(ngDevMode ? [{ debugName: "primaryRowActionItems" }] : /* istanbul ignore next */ []));
23688
+ this.primaryRowActionColumnWidth = computed(() => {
23689
+ const count = this.primaryRowActionItems().length;
23690
+ return count > 0 ? `${count * 70}px` : '60px';
23691
+ }, /* @ts-ignore */
23692
+ ...(ngDevMode ? [{ debugName: "primaryRowActionColumnWidth" }] : /* istanbul ignore next */ []));
23296
23693
  this.#loadedItems = [];
23694
+ /** Set when a row command fires so the following row click does not select. */
23695
+ this.#skipNextRowSelection = false;
23297
23696
  this.#totalCount = signal(0, /* @ts-ignore */
23298
23697
  ...(ngDevMode ? [{ debugName: "#totalCount" }] : /* istanbul ignore next */ []));
23299
23698
  this.tableDataSource = new AXDataSource({
@@ -23323,6 +23722,13 @@ class AXPLookupWidgetTablePanelComponent {
23323
23722
  }), /* @ts-ignore */
23324
23723
  ...(ngDevMode ? [{ debugName: "loadingConfig" }] : /* istanbul ignore next */ []));
23325
23724
  this.host = inject((ElementRef));
23725
+ this.getDropdownRowActionItems = (rowData) => {
23726
+ const handler = this.rowActions();
23727
+ if (!handler) {
23728
+ return Promise.resolve([]);
23729
+ }
23730
+ return handler.getDropdownItems(rowData).then((items) => items);
23731
+ };
23326
23732
  //#endregion
23327
23733
  //#region ----- Row State -----
23328
23734
  this.resolveRowCssClass = (row) => {
@@ -23385,8 +23791,22 @@ class AXPLookupWidgetTablePanelComponent {
23385
23791
  //#endregion
23386
23792
  //#region ----- Event Handlers -----
23387
23793
  handleRowClick(event) {
23794
+ if (this.#skipNextRowSelection) {
23795
+ this.#skipNextRowSelection = false;
23796
+ return;
23797
+ }
23388
23798
  this.#handleItemClick(event.data);
23389
23799
  }
23800
+ handleRowActionClick(event) {
23801
+ event.nativeEvent.preventDefault();
23802
+ event.nativeEvent.stopPropagation();
23803
+ this.#skipNextRowSelection = true;
23804
+ const item = event.data;
23805
+ if (!item) {
23806
+ return;
23807
+ }
23808
+ this.rowAction.emit({ name: event.name, item });
23809
+ }
23390
23810
  handleItemMouseDown(event, item) {
23391
23811
  event.preventDefault();
23392
23812
  event.stopPropagation();
@@ -23438,7 +23858,7 @@ class AXPLookupWidgetTablePanelComponent {
23438
23858
  return Boolean(item[this.disabledField()]);
23439
23859
  }
23440
23860
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetTablePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23441
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetTablePanelComponent, isStandalone: true, selector: "axp-lookup-widget-table-panel", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, parentField: { classPropertyName: "parentField", publicName: "parentField", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenField: { classPropertyName: "hasChildrenField", publicName: "hasChildrenField", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, highlightText: { classPropertyName: "highlightText", publicName: "highlightText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, host: { properties: { "class.ax-lookup-multi-column-tree": "!!parentField()", "style.height.px": "tableHeight()" }, classAttribute: "ax-lookup-multi-column block min-h-0" }, viewQueries: [{ propertyName: "tableRef", first: true, predicate: AXDataTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-data-table\n class=\"ax-lookup-multi-column-table\"\n look=\"minimal\"\n [dataSource]=\"parentField() ? dataSource() : tableDataSource\"\n [parentField]=\"parentField() ?? ''\"\n [hasChildrenField]=\"hasChildrenField()\"\n [itemHeight]=\"itemHeight()\"\n [alternative]=\"alternate()\"\n [highlightText]=\"highlightText()\"\n [loading]=\"loadingConfig()\"\n [paging]=\"false\"\n [showHeader]=\"true\"\n [fixedHeader]=\"true\"\n [showFooter]=\"false\"\n [allowReordering]=\"false\"\n [rowCssClass]=\"resolveRowCssClass\"\n (onRowClick)=\"handleRowClick($event)\"\n>\n @for (column of visibleColumns(); track column.name) {\n <axp-widget-column-renderer\n [expandHandler]=\"$index === 0 && !!parentField()\"\n [caption]=\"column.title\"\n [customWidth]=\"resolveColumnWidth(column)\"\n [node]=\"column.node\"\n ></axp-widget-column-renderer>\n }\n</ax-data-table>\n", dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$7.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$6.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "columnKey", "node", "footerTemplate", "expandHandler", "sortEnabled", "headerSortDirection", "headerSortPriority", "columnFixed", "cellTemplate", "headerTemplate"], outputs: ["sortToggle"] }, { kind: "ngmodule", type: AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23861
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetTablePanelComponent, isStandalone: true, selector: "axp-lookup-widget-table-panel", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, parentField: { classPropertyName: "parentField", publicName: "parentField", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenField: { classPropertyName: "hasChildrenField", publicName: "hasChildrenField", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, highlightText: { classPropertyName: "highlightText", publicName: "highlightText", isSignal: true, isRequired: false, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", rowAction: "rowAction" }, host: { properties: { "class.ax-lookup-multi-column-tree": "!!parentField()", "style.height.px": "tableHeight()" }, classAttribute: "ax-lookup-multi-column block min-h-0" }, viewQueries: [{ propertyName: "tableRef", first: true, predicate: AXDataTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-data-table\n class=\"ax-lookup-multi-column-table\"\n look=\"minimal\"\n [dataSource]=\"parentField() ? dataSource() : tableDataSource\"\n [parentField]=\"parentField() ?? ''\"\n [hasChildrenField]=\"hasChildrenField()\"\n [itemHeight]=\"itemHeight()\"\n [alternative]=\"alternate()\"\n [highlightText]=\"highlightText()\"\n [loading]=\"loadingConfig()\"\n [paging]=\"false\"\n [showHeader]=\"true\"\n [fixedHeader]=\"true\"\n [showFooter]=\"false\"\n [allowReordering]=\"false\"\n [rowCssClass]=\"resolveRowCssClass\"\n (onRowClick)=\"handleRowClick($event)\"\n>\n @for (column of visibleColumns(); track column.name) {\n <axp-widget-column-renderer\n [expandHandler]=\"$index === 0 && !!parentField()\"\n [caption]=\"column.title\"\n [customWidth]=\"resolveColumnWidth(column)\"\n [node]=\"column.node\"\n ></axp-widget-column-renderer>\n }\n <!-- ----- Entity row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"primaryRowActionColumnWidth()\"\n [items]=\"primaryRowActionItems()\"\n (onItemClick)=\"handleRowActionClick($event)\"\n ></ax-command-column>\n }\n @if (hasRowActionDropdown()) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowActionItems\"\n (onItemClick)=\"handleRowActionClick($event)\"\n ></ax-dropdown-command-column>\n }\n</ax-data-table>\n", dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$7.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$7.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i1$7.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "emptyStateTemplate", "emptyStateText", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$6.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "columnKey", "node", "footerTemplate", "expandHandler", "sortEnabled", "headerSortDirection", "headerSortPriority", "columnFixed", "cellTemplate", "headerTemplate"], outputs: ["sortToggle"] }, { kind: "ngmodule", type: AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23442
23862
  }
23443
23863
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetTablePanelComponent, decorators: [{
23444
23864
  type: Component,
@@ -23446,8 +23866,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
23446
23866
  class: 'ax-lookup-multi-column block min-h-0',
23447
23867
  '[class.ax-lookup-multi-column-tree]': '!!parentField()',
23448
23868
  '[style.height.px]': 'tableHeight()',
23449
- }, template: "<ax-data-table\n class=\"ax-lookup-multi-column-table\"\n look=\"minimal\"\n [dataSource]=\"parentField() ? dataSource() : tableDataSource\"\n [parentField]=\"parentField() ?? ''\"\n [hasChildrenField]=\"hasChildrenField()\"\n [itemHeight]=\"itemHeight()\"\n [alternative]=\"alternate()\"\n [highlightText]=\"highlightText()\"\n [loading]=\"loadingConfig()\"\n [paging]=\"false\"\n [showHeader]=\"true\"\n [fixedHeader]=\"true\"\n [showFooter]=\"false\"\n [allowReordering]=\"false\"\n [rowCssClass]=\"resolveRowCssClass\"\n (onRowClick)=\"handleRowClick($event)\"\n>\n @for (column of visibleColumns(); track column.name) {\n <axp-widget-column-renderer\n [expandHandler]=\"$index === 0 && !!parentField()\"\n [caption]=\"column.title\"\n [customWidth]=\"resolveColumnWidth(column)\"\n [node]=\"column.node\"\n ></axp-widget-column-renderer>\n }\n</ax-data-table>\n" }]
23450
- }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], parentField: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentField", required: false }] }], hasChildrenField: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasChildrenField", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], highlightText: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightText", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], tableRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXDataTableComponent), { isSignal: true }] }] } });
23869
+ }, template: "<ax-data-table\n class=\"ax-lookup-multi-column-table\"\n look=\"minimal\"\n [dataSource]=\"parentField() ? dataSource() : tableDataSource\"\n [parentField]=\"parentField() ?? ''\"\n [hasChildrenField]=\"hasChildrenField()\"\n [itemHeight]=\"itemHeight()\"\n [alternative]=\"alternate()\"\n [highlightText]=\"highlightText()\"\n [loading]=\"loadingConfig()\"\n [paging]=\"false\"\n [showHeader]=\"true\"\n [fixedHeader]=\"true\"\n [showFooter]=\"false\"\n [allowReordering]=\"false\"\n [rowCssClass]=\"resolveRowCssClass\"\n (onRowClick)=\"handleRowClick($event)\"\n>\n @for (column of visibleColumns(); track column.name) {\n <axp-widget-column-renderer\n [expandHandler]=\"$index === 0 && !!parentField()\"\n [caption]=\"column.title\"\n [customWidth]=\"resolveColumnWidth(column)\"\n [node]=\"column.node\"\n ></axp-widget-column-renderer>\n }\n <!-- ----- Entity row actions (preview, etc.) ----- -->\n @if (hasRowActionPrimary()) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"primaryRowActionColumnWidth()\"\n [items]=\"primaryRowActionItems()\"\n (onItemClick)=\"handleRowActionClick($event)\"\n ></ax-command-column>\n }\n @if (hasRowActionDropdown()) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowActionItems\"\n (onItemClick)=\"handleRowActionClick($event)\"\n ></ax-dropdown-command-column>\n }\n</ax-data-table>\n" }]
23870
+ }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], parentField: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentField", required: false }] }], hasChildrenField: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasChildrenField", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], highlightText: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightText", required: false }] }], rowActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowActions", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], rowAction: [{ type: i0.Output, args: ["rowAction"] }], tableRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXDataTableComponent), { isSignal: true }] }] } });
23451
23871
 
23452
23872
  //#region ----- Imports -----
23453
23873
  //#endregion
@@ -23504,6 +23924,8 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
23504
23924
  ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
23505
23925
  this.selectedTemplate = input(undefined, /* @ts-ignore */
23506
23926
  ...(ngDevMode ? [{ debugName: "selectedTemplate" }] : /* istanbul ignore next */ []));
23927
+ this.rowActions = input(/* @ts-ignore */
23928
+ ...(ngDevMode ? [undefined, { debugName: "rowActions" }] : /* istanbul ignore next */ []));
23507
23929
  //#endregion
23508
23930
  //#region ----- Outputs -----
23509
23931
  this.onItemSelected = output();
@@ -23547,7 +23969,7 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
23547
23969
  * the selection (same as ax-lookup).
23548
23970
  */
23549
23971
  this.showSelectedTemplate = computed(() => {
23550
- if (!this.selectedTemplate() || this.valueItems().length === 0) {
23972
+ if (!this.selectedTemplate() || this.valueItems().length === 0 || !this.displayText()) {
23551
23973
  return false;
23552
23974
  }
23553
23975
  return !this.expanded() && this.searchText() === this.displayText();
@@ -23648,6 +24070,14 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
23648
24070
  this.expanded.set(true);
23649
24071
  }
23650
24072
  }
24073
+ async handleTableRowAction(event) {
24074
+ const handler = this.rowActions();
24075
+ if (!handler) {
24076
+ return;
24077
+ }
24078
+ this.expanded.set(false);
24079
+ await handler.execute(event.name, event.item);
24080
+ }
23651
24081
  handleTableItemClick(event) {
23652
24082
  this.onItemSelected.emit({
23653
24083
  component: this,
@@ -23760,11 +24190,11 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
23760
24190
  return this.#hydrationPromise;
23761
24191
  }
23762
24192
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetTableHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23763
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetTableHostComponent, isStandalone: true, selector: "axp-lookup-widget-table-host", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, treeDataSource: { classPropertyName: "treeDataSource", publicName: "treeDataSource", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, parentField: { classPropertyName: "parentField", publicName: "parentField", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenField: { classPropertyName: "hasChildrenField", publicName: "hasChildrenField", isSignal: true, isRequired: false, transformFunction: null }, searchFields: { classPropertyName: "searchFields", publicName: "searchFields", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, valueItems: { classPropertyName: "valueItems", publicName: "valueItems", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onItemSelected: "onItemSelected" }, host: { classAttribute: "block w-full" }, providers: [
24193
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPLookupWidgetTableHostComponent, isStandalone: true, selector: "axp-lookup-widget-table-host", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, treeDataSource: { classPropertyName: "treeDataSource", publicName: "treeDataSource", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, parentField: { classPropertyName: "parentField", publicName: "parentField", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenField: { classPropertyName: "hasChildrenField", publicName: "hasChildrenField", isSignal: true, isRequired: false, transformFunction: null }, searchFields: { classPropertyName: "searchFields", publicName: "searchFields", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, valueItems: { classPropertyName: "valueItems", publicName: "valueItems", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: true, isRequired: false, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onItemSelected: "onItemSelected" }, host: { classAttribute: "block w-full" }, providers: [
23764
24194
  { provide: AXComponent, useExisting: AXPLookupWidgetTableHostComponent },
23765
24195
  { provide: AXClearableComponent, useExisting: AXPLookupWidgetTableHostComponent },
23766
24196
  { provide: AXValuableComponent, useExisting: AXPLookupWidgetTableHostComponent },
23767
- ], 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 (itemClick)=\"handleTableItemClick($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"], outputs: ["itemClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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 }); }
23768
24198
  }
23769
24199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetTableHostComponent, decorators: [{
23770
24200
  type: Component,
@@ -23774,8 +24204,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
23774
24204
  { provide: AXComponent, useExisting: AXPLookupWidgetTableHostComponent },
23775
24205
  { provide: AXClearableComponent, useExisting: AXPLookupWidgetTableHostComponent },
23776
24206
  { provide: AXValuableComponent, useExisting: AXPLookupWidgetTableHostComponent },
23777
- ], 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 (itemClick)=\"handleTableItemClick($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"] }]
23778
- }], 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 }] }], onItemSelected: [{ type: i0.Output, args: ["onItemSelected"] }], triggerSearchInput: [{ type: i0.ViewChild, args: ['triggerSearchInput', { isSignal: true }] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }] } });
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"] }]
24208
+ }], 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 }] }] } });
23779
24209
 
23780
24210
  //#region ----- Imports -----
23781
24211
  //#endregion
@@ -23800,6 +24230,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
23800
24230
  this.localeService = inject(AXLocaleService);
23801
24231
  this.destroyRef = inject(DestroyRef);
23802
24232
  this.lookupByKeyCache = inject(AXPLookupByKeyCacheService);
24233
+ this.rowActionsService = inject(AXPEntityDataSelectorRowActionsService);
23803
24234
  //#endregion
23804
24235
  //#region ----- View Children -----
23805
24236
  this.lookup = viewChild(AXLookupComponent, /* @ts-ignore */
@@ -23829,6 +24260,8 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
23829
24260
  ...(ngDevMode ? [{ debugName: "shouldFocus" }] : /* istanbul ignore next */ []));
23830
24261
  /** Skips one {@link findByValue} pass after inline create when selection is already hydrated. */
23831
24262
  this.skipFindByValueOnce = false;
24263
+ /** Latest {@link findByValue} run; older in-flight runs must not overwrite its result. */
24264
+ this.findByValueRequestId = 0;
23832
24265
  this.lastEditorLocaleKey = this.resolveEditorLocaleKey();
23833
24266
  //#endregion
23834
24267
  //#region ----- Computed Properties -----
@@ -23907,6 +24340,20 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
23907
24340
  allowCreate: this.options()['allowCreate'],
23908
24341
  }), /* @ts-ignore */
23909
24342
  ...(ngDevMode ? [{ debugName: "resolvedCreate" }] : /* istanbul ignore next */ []));
24343
+ this.rowActionsConfig = computed(() => this.options()['rowActions'] ?? undefined, { ...(ngDevMode ? { debugName: "rowActionsConfig" } : /* istanbul ignore next */ {}), equal: isEqual });
24344
+ this.rowActionsHandler = computed(() => {
24345
+ const entity = this.entityDef();
24346
+ const config = this.rowActionsConfig();
24347
+ if (!entity || !config) {
24348
+ return undefined;
24349
+ }
24350
+ return this.rowActionsService.createHandler(entity, config);
24351
+ }, /* @ts-ignore */
24352
+ ...(ngDevMode ? [{ debugName: "rowActionsHandler" }] : /* istanbul ignore next */ []));
24353
+ this.rowActionPrimaryItems = computed(() => this.rowActionsHandler()?.getPrimaryItems() ?? [], /* @ts-ignore */
24354
+ ...(ngDevMode ? [{ debugName: "rowActionPrimaryItems" }] : /* istanbul ignore next */ []));
24355
+ this.hasRowActionPrimary = computed(() => this.rowActionPrimaryItems().length > 0, /* @ts-ignore */
24356
+ ...(ngDevMode ? [{ debugName: "hasRowActionPrimary" }] : /* istanbul ignore next */ []));
23910
24357
  this.valueField = computed(() => {
23911
24358
  const explicit = this.options()['valueField']?.trim();
23912
24359
  if (explicit) {
@@ -24089,6 +24536,23 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24089
24536
  }
24090
24537
  }, /* @ts-ignore */
24091
24538
  ...(ngDevMode ? [{ debugName: "#efValue" }] : /* istanbul ignore next */ []));
24539
+ /** Value can be bound before the entity definition resolves; hydrate the selection label once it does. */
24540
+ this.#efEntityHydration = effect(() => {
24541
+ if (!this.entityDef()) {
24542
+ return;
24543
+ }
24544
+ untracked(() => {
24545
+ const currentValue = this.getValue();
24546
+ if (!this.hasValue(currentValue)) {
24547
+ return;
24548
+ }
24549
+ if (areLookupSelectionItemsHydrated(currentValue, this.selectedItems(), this.getHydrationOptions())) {
24550
+ return;
24551
+ }
24552
+ void this.findByValue();
24553
+ });
24554
+ }, /* @ts-ignore */
24555
+ ...(ngDevMode ? [{ debugName: "#efEntityHydration" }] : /* istanbul ignore next */ []));
24092
24556
  this.#filterEffect = effect(() => {
24093
24557
  const entity = this.entityDef();
24094
24558
  const pending = this.hasPendingCascadeFilter();
@@ -24159,7 +24623,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24159
24623
  value: newValue,
24160
24624
  displayText: this.multiple() ? labels.join(', ') : (labels[0] ?? ''),
24161
24625
  operation: {
24162
- type: this.multiple() ? 'in' : 'equal',
24626
+ type: this.multiple() ? 'in' : AXP_LOOKUP_FILTER_DEFAULT_OPERATOR,
24163
24627
  },
24164
24628
  });
24165
24629
  }
@@ -24174,10 +24638,25 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24174
24638
  #efEntity;
24175
24639
  #hydrateBoundValue;
24176
24640
  #efValue;
24641
+ /** Value can be bound before the entity definition resolves; hydrate the selection label once it does. */
24642
+ #efEntityHydration;
24177
24643
  #filterEffect;
24178
24644
  #focusEffect;
24179
24645
  //#endregion
24180
24646
  //#region ----- Event Handlers -----
24647
+ async handleItemRowAction(event, commandName, item) {
24648
+ event.nativeEvent?.preventDefault();
24649
+ event.nativeEvent?.stopPropagation();
24650
+ const handler = this.rowActionsHandler();
24651
+ if (!handler) {
24652
+ return;
24653
+ }
24654
+ await handler.execute(commandName, item);
24655
+ }
24656
+ handleLookupItemRowActionMouseDown(event) {
24657
+ event.preventDefault();
24658
+ event.stopPropagation();
24659
+ }
24181
24660
  handleLookupItemSelected(e) {
24182
24661
  const item = e.item;
24183
24662
  if (item == null) {
@@ -24207,7 +24686,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24207
24686
  value,
24208
24687
  displayText: this.multiple() ? [] : '',
24209
24688
  operation: {
24210
- type: this.multiple() ? 'in' : 'equal',
24689
+ type: this.multiple() ? 'in' : AXP_LOOKUP_FILTER_DEFAULT_OPERATOR,
24211
24690
  },
24212
24691
  });
24213
24692
  return;
@@ -24343,30 +24822,33 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24343
24822
  this.setItems(currentItems, false);
24344
24823
  return;
24345
24824
  }
24825
+ // Without the entity definition the rows cannot be fetched; `#efEntityHydration` retries once it resolves.
24826
+ const entityDef = this.entityDef();
24827
+ if (!entityDef) {
24828
+ return;
24829
+ }
24830
+ const requestId = ++this.findByValueRequestId;
24346
24831
  this.isLoading.set(true);
24347
24832
  this.beginHydration();
24348
24833
  try {
24349
- const entityDef = this.entityDef();
24350
24834
  const entityDataAccessor = this.entityService.withEntity(this.entity()).data();
24351
24835
  const valueField = hydration.valueField;
24352
24836
  const idsToFetch = ids.filter((id) => {
24353
- const existing = currentItems.find((item) => get(item, valueField) === id);
24837
+ const existing = currentItems.find((item) => isSameLookupKey(get(item, valueField), id));
24354
24838
  return existing == null || !isLookupItemHydrated(existing, hydration);
24355
24839
  });
24356
24840
  const entityKey = this.entity();
24357
- const fetchedById = entityDef
24358
- ? await fetchLookupRowsByKeys({
24359
- entity: entityDef,
24360
- valueField,
24361
- keys: idsToFetch,
24362
- getQueryFields: () => this.lookupQueryFields(),
24363
- byKey: this.lookupByKeyCache.wrap(entityKey, (id) => entityDataAccessor.byKey(id)),
24364
- queryList: (request) => entityDataAccessor.query(request),
24365
- onRow: (key, row) => this.lookupByKeyCache.remember(entityKey, key, row),
24366
- })
24367
- : new Map();
24841
+ const fetchedById = await fetchLookupRowsByKeys({
24842
+ entity: entityDef,
24843
+ valueField,
24844
+ keys: idsToFetch,
24845
+ getQueryFields: () => this.lookupQueryFields(),
24846
+ byKey: this.lookupByKeyCache.wrap(entityKey, (id) => entityDataAccessor.byKey(id)),
24847
+ queryList: (request) => entityDataAccessor.query(request),
24848
+ onRow: (key, row) => this.lookupByKeyCache.remember(entityKey, key, row),
24849
+ });
24368
24850
  const mergedItems = (await Promise.all(ids.map(async (id) => {
24369
- const existing = currentItems.find((item) => get(item, valueField) === id);
24851
+ const existing = currentItems.find((item) => isSameLookupKey(get(item, valueField), id));
24370
24852
  if (existing != null && isLookupItemHydrated(existing, hydration)) {
24371
24853
  return existing;
24372
24854
  }
@@ -24376,11 +24858,15 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24376
24858
  }
24377
24859
  return this.decorateLookupItem(fetched);
24378
24860
  }))).filter((item) => item != null);
24379
- this.setItems(mergedItems, false);
24861
+ if (requestId === this.findByValueRequestId) {
24862
+ this.setItems(mergedItems, false);
24863
+ }
24380
24864
  }
24381
24865
  catch (error) {
24382
24866
  console.error('[LookupWidget] findByValue() error:', error);
24383
- this.setItems([], false);
24867
+ if (requestId === this.findByValueRequestId) {
24868
+ this.setItems([], false);
24869
+ }
24384
24870
  }
24385
24871
  finally {
24386
24872
  this.isLoading.set(false);
@@ -24653,7 +25139,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
24653
25139
  this.shouldFocus.set(true);
24654
25140
  }
24655
25141
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
24656
- 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 (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]=\"$any(multiple() ? lookupItemTemplate : lookupDropDownListItemTemplate)\"\n [selectedTemplate]=\"lookupItemTemplate\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </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 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 </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"], 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 }); }
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 }); }
24657
25143
  }
24658
25144
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLookupWidgetEditComponent, decorators: [{
24659
25145
  type: Component,
@@ -24672,7 +25158,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
24672
25158
  AXTagBoxModule,
24673
25159
  AXTranslationModule,
24674
25160
  AXValidationModule,
24675
- ], 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 (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]=\"$any(multiple() ? lookupItemTemplate : lookupDropDownListItemTemplate)\"\n [selectedTemplate]=\"lookupItemTemplate\"\n (valueChange)=\"handleLookupModelChange($event)\"\n (onItemSelected)=\"handleLookupItemSelected($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"$safeNavigationMigration(validation.options?.message)\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </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 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 </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" }]
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" }]
24676
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 }] }] } });
24677
25163
 
24678
25164
  var lookupWidgetEdit_component = /*#__PURE__*/Object.freeze({
@@ -25462,179 +25948,6 @@ var lookupWidgetColumn_component = /*#__PURE__*/Object.freeze({
25462
25948
  AXPLookupWidgetColumnComponent: AXPLookupWidgetColumnComponent
25463
25949
  });
25464
25950
 
25465
- const AXPLookupWidget = {
25466
- name: 'lookup-editor',
25467
- title: 'Lookup',
25468
- categories: [],
25469
- groups: [AXPWidgetGroupEnum.EntityWidget],
25470
- defaultFilterWidgetName: 'lookup-filter',
25471
- type: 'editor',
25472
- icon: 'fa-light fa-list-radio',
25473
- properties: [
25474
- AXP_DISABLED_PROPERTY,
25475
- AXP_ALLOW_CLEAR_PROPERTY,
25476
- AXP_DATA_PATH_PROPERTY,
25477
- {
25478
- name: 'expose',
25479
- title: 'Expose',
25480
- group: AXP_DATA_PROPERTY_GROUP,
25481
- schema: {
25482
- dataType: 'string',
25483
- interface: {
25484
- name: 'expose',
25485
- path: 'options.expose',
25486
- type: AXPWidgetsCatalog.select,
25487
- },
25488
- },
25489
- visible: true,
25490
- },
25491
- {
25492
- name: 'entity',
25493
- title: 'Entity',
25494
- group: AXP_DATA_PROPERTY_GROUP,
25495
- schema: {
25496
- dataType: 'string',
25497
- interface: {
25498
- name: 'entity',
25499
- path: 'options.entity',
25500
- type: AXPWidgetsCatalog.text,
25501
- },
25502
- },
25503
- visible: true,
25504
- },
25505
- AXP_ALLOW_MULTIPLE_PROPERTY,
25506
- createBooleanProperty({
25507
- name: 'popoverEnabled',
25508
- title: 'Entity Detail Popover',
25509
- path: 'options.popover.enabled',
25510
- group: AXP_BEHAVIOR_PROPERTY_GROUP,
25511
- defaultValue: true,
25512
- }),
25513
- {
25514
- name: 'displayFormat',
25515
- title: 'Display Format',
25516
- group: AXP_DATA_PROPERTY_GROUP,
25517
- schema: {
25518
- dataType: 'string',
25519
- interface: {
25520
- name: 'displayFormat',
25521
- path: 'options.displayFormat',
25522
- type: AXPWidgetsCatalog.template,
25523
- },
25524
- },
25525
- visible: true,
25526
- },
25527
- {
25528
- name: 'columnResolveStrategy',
25529
- title: 'Column resolve strategy',
25530
- group: AXP_DATA_PROPERTY_GROUP,
25531
- schema: {
25532
- dataType: 'string',
25533
- defaultValue: 'hydrated',
25534
- interface: {
25535
- name: 'columnResolveStrategy',
25536
- path: 'options.columnResolve.strategy',
25537
- type: AXPWidgetsCatalog.select,
25538
- valueTransforms: objectKeyValueTransforms('id'),
25539
- options: {
25540
- dataSource: [
25541
- { id: 'hydrated', title: 'Hydrated (titles on row)' },
25542
- { id: 'idsWithCount', title: 'Ids + count on row (load titles on open)' },
25543
- { id: 'countOnly', title: 'Count on row (named query on open)' },
25544
- ],
25545
- },
25546
- },
25547
- },
25548
- visible: true,
25549
- },
25550
- {
25551
- name: 'columnResolveCountFieldPath',
25552
- title: 'Column resolve — count field path',
25553
- group: AXP_DATA_PROPERTY_GROUP,
25554
- schema: {
25555
- dataType: 'string',
25556
- interface: {
25557
- name: 'columnResolveCountFieldPath',
25558
- path: 'options.columnResolve.countFieldPath',
25559
- type: AXPWidgetsCatalog.text,
25560
- },
25561
- },
25562
- visible: true,
25563
- },
25564
- {
25565
- name: 'columnResolveIdsPath',
25566
- title: 'Column resolve — ids path',
25567
- group: AXP_DATA_PROPERTY_GROUP,
25568
- schema: {
25569
- dataType: 'string',
25570
- interface: {
25571
- name: 'columnResolveIdsPath',
25572
- path: 'options.columnResolve.idsPath',
25573
- type: AXPWidgetsCatalog.text,
25574
- },
25575
- },
25576
- visible: true,
25577
- },
25578
- {
25579
- name: 'columnResolveQueryKey',
25580
- title: 'Column resolve — query key (countOnly)',
25581
- group: AXP_DATA_PROPERTY_GROUP,
25582
- schema: {
25583
- dataType: 'string',
25584
- interface: {
25585
- name: 'columnResolveQueryKey',
25586
- path: 'options.columnResolve.queryKey',
25587
- type: AXPWidgetsCatalog.text,
25588
- },
25589
- },
25590
- visible: true,
25591
- },
25592
- {
25593
- name: 'columnResolveQueryParams',
25594
- title: 'Column resolve — query params (JSON: param → row path)',
25595
- group: AXP_DATA_PROPERTY_GROUP,
25596
- schema: {
25597
- dataType: 'string',
25598
- interface: {
25599
- name: 'columnResolveQueryParams',
25600
- path: 'options.columnResolve.queryParams',
25601
- type: AXPWidgetsCatalog.text,
25602
- },
25603
- },
25604
- visible: true,
25605
- },
25606
- {
25607
- name: 'columnResolveQueryResultItemsPath',
25608
- title: 'Column resolve — query result items path',
25609
- group: AXP_DATA_PROPERTY_GROUP,
25610
- schema: {
25611
- dataType: 'string',
25612
- defaultValue: 'items',
25613
- interface: {
25614
- name: 'columnResolveQueryResultItemsPath',
25615
- path: 'options.columnResolve.queryResultItemsPath',
25616
- type: AXPWidgetsCatalog.text,
25617
- },
25618
- },
25619
- visible: true,
25620
- },
25621
- ],
25622
- components: {
25623
- view: {
25624
- component: () => Promise.resolve().then(function () { return lookupWidgetView_component; }).then((c) => c.AXPLookupWidgetViewComponent),
25625
- },
25626
- edit: {
25627
- component: () => Promise.resolve().then(function () { return lookupWidgetEdit_component; }).then((c) => c.AXPLookupWidgetEditComponent),
25628
- },
25629
- column: {
25630
- component: () => Promise.resolve().then(function () { return lookupWidgetColumn_component; }).then((c) => c.AXPLookupWidgetColumnComponent),
25631
- },
25632
- designer: {
25633
- component: () => Promise.resolve().then(function () { return lookupWidgetEdit_component; }).then((c) => c.AXPLookupWidgetEditComponent),
25634
- },
25635
- },
25636
- };
25637
-
25638
25951
  /**
25639
25952
  * Source type
25640
25953
  */
@@ -28278,6 +28591,7 @@ const ENTITY_EXTENDED_WIDGETS = [
28278
28591
  categories: AXP_WIDGETS_EDITOR_CATEGORY,
28279
28592
  groups: [AXPWidgetGroupEnum.EntityWidget],
28280
28593
  type: 'filter',
28594
+ defaultFilterOperator: AXP_LOOKUP_FILTER_DEFAULT_OPERATOR,
28281
28595
  components: {},
28282
28596
  options: {
28283
28597
  look: 'select',
@@ -31983,7 +32297,7 @@ class AXPEntityModule {
31983
32297
  },
31984
32298
  {
31985
32299
  key: 'Entity:Bulk',
31986
- command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-CgsgFxT8.mjs').then((c) => c.AXPBulkEntityCommand),
32300
+ command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-DccwhqkT.mjs').then((c) => c.AXPBulkEntityCommand),
31987
32301
  },
31988
32302
  {
31989
32303
  key: 'Entity:OpenList',
@@ -32144,7 +32458,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
32144
32458
  },
32145
32459
  {
32146
32460
  key: 'Entity:Bulk',
32147
- command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-CgsgFxT8.mjs').then((c) => c.AXPBulkEntityCommand),
32461
+ command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-DccwhqkT.mjs').then((c) => c.AXPBulkEntityCommand),
32148
32462
  },
32149
32463
  {
32150
32464
  key: 'Entity:OpenList',
@@ -32469,5 +32783,5 @@ function detectEntityChanges(oldObj, newObj) {
32469
32783
  * Generated bundle index. Do not edit.
32470
32784
  */
32471
32785
 
32472
- 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, detectEntityChanges 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, axpUpdateEntityStatusCommandDefinition as bA, buildDataSourceTraceSnapshot as bB, canPersistEntityListState as bC, clientLocalPlugin as bD, cloneLayoutArrays as bE, columnOrderingMiddleware as bF, columnOrderingMiddlewareProvider as bG, columnWidthMiddleware as bH, columnWidthMiddlewareProvider as bI, committedAttachments as bJ, composeEntityMiddlewares as bK, composeEntityStorageMiddlewares as bL, computeEntityAggregates as bM, configureEntityListColumnsSettingsMigrateDrop as bN, configureEntityListColumnsSettingsVersion as bO, createColumnOrderingMiddlewareProvider as bP, createEntityCardDisplayScope as bQ, createEntityCardLogicScope as bR, createEntityMiddlewareContext as bS, createEntityStorageContext as bT, createLayoutOrderingMiddlewareProvider as bU, defaultCardLayoutMiddleware as bV, defaultCardLayoutMiddlewareProvider as bW, defaultMultiLanguageMiddleware as bX, defaultMultiLanguageMiddlewareProvider as bY, defaultSortPresetsMiddleware as bZ, defaultSortPresetsMiddlewareProvider as b_, AXP_MULTI_SOURCE_DEFINITION_PROVIDER as ba, DEFAULT_COLUMN_ORDER as bb, DEFAULT_PAIR_SPAN_RULES as bc, DEFAULT_PROPERTY_ORDER as bd, DEFAULT_SECTION_ORDER as be, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE as bf, ENTITY_LIST_LAYOUT_META as bg, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY as bh, ENTITY_MASTER_LIST_TRACE_NS as bi, EntityBuilder as bj, EntityDataAccessor as bk, GALLERY_PAGE_COMPONENT_KEY as bl, TREE_CHILDREN_QUERY_TAKE as bm, actionExists as bn, applyDataSourcePagingWithoutLoad as bo, attachmentFieldCount as bp, attachmentNeedsHydration as bq, attachmentsPlugin as br, attachmentsSemanticallyEqual as bs, axpBuildEntityListPageContextSnapshot as bt, axpCreateEntityAiToolInputDefaults as bu, axpCreateEntityCommandDefinition as bv, axpDeleteEntityCommandDefinition as bw, axpOpenEntityListCommandDefinition as bx, axpRunEntityListPageContextAction as by, axpShowFileUploaderPopupCommandDefinition as bz, ATTACHMENTS_PAGE_COMPONENT_KEY as c, readPersistedEntityListInstanceCurrentView as c$, dispatchEntityModifiedSideEffects as c0, ensureHierarchicalRootFilter as c1, ensureLayoutPropertyView as c2, ensureLayoutSection as c3, ensureListActions as c4, entityCreateBridgeMiddleware as c5, entityDeleteBridgeMiddleware as c6, entityGetOneBridgeMiddleware as c7, entityListInstanceCurrentViewPath as c8, entityListInstanceFilterPath as c9, hydrateAttachmentFieldToFileList as cA, isAXPMiddlewareAbortError as cB, isAttachmentFieldPresentOnRow as cC, isAttachmentListEntry as cD, isAttachmentStorageRef as cE, isCategoryEntity as cF, isCategoryFilter as cG, isFileListItem as cH, isFileUploaderEditDialogAuto as cI, isLegacyEntityDataSelectorOptions as cJ, layoutOrderingMiddlewareFactory as cK, layoutOrderingMiddlewareProvider as cL, mapEntityStorageErrorToCommandResult as cM, mapLegacyEntityDataSelectorOptions as cN, mergeEntityListViewAndPersistedFilters as cO, normalizeEntityCardHeaderDisplayValue as cP, normalizeEntityDataSelectorColumnSpecs as cQ, normalizeEntityDataSelectorOptions as cR, normalizeEntityFieldToFileList as cS, normalizeEntityListPersistenceMode as cT, normalizeListPaging as cU, prefetchClientLocalRelated as cV, provideEntity as cW, provideEntityMiddlewareBridge as cX, provideEntityRealtimeHandlers as cY, provideEntityStorageMiddlewareBridge as cZ, provideLocalEntityCatalog as c_, entityListStylingRulesPath as ca, entityQueryBridgeMiddleware as cb, entityStorageCreateBridgeMiddleware as cc, entityStorageDeleteBridgeMiddleware as cd, entityStorageGetOneBridgeMiddleware as ce, entityStorageQueryBridgeMiddleware as cf, entityStorageUpdateBridgeMiddleware as cg, entityUpdateBridgeMiddleware as ch, eventDispatchMiddleware as ci, filterEntityMiddlewares as cj, filterEntityStorageMiddlewares as ck, filterSortEntityRows as cl, filterTouchesParentKey as cm, findEntityListRowDataInTree as cn, fingerprintAttachmentItem as co, fingerprintAttachments as cp, fireEntityLifecycleHook as cq, formatLookupItemDisplay as cr, formatLookupItemDisplayAsync as cs, galleryPlugin as ct, getDataSourcePageIndex as cu, getEntityListColumnsSettingsMigrateDrop as cv, getEntityListColumnsSettingsVersion as cw, getEntityListRowId as cx, getMasterInterfacePropertySortKey as cy, hasFileUploaderTitleOrDescriptionFields as cz, AXMEntityCrudService as d, readPersistedEntityListInstanceFilters as d0, readPersistedEntityListStylingRules as d1, resetPagingForTreeChildrenLoad as d2, resolveAttachmentFieldPath as d3, resolveEntityCardBadgeColorValue as d4, resolveEntityCardHeaderValue as d5, resolveEntityMasterFieldStylingClass as d6, resolveEntityMasterRecordStylingClass as d7, resolveEntityMasterStylingClass as d8, resolveEntityPluginDetailPageOrder as d9, resolveFileUploaderEditDialog as da, resolveFileUploaderEntityScope as db, resolveLookupDisplayField as dc, resolveLookupDisplayTemplate as dd, resolveLookupEntityCacheKey as de, resolveLookupEntityKey as df, resolveMasterInterfacePropertyOrder as dg, restoreEntityListExpandedRows as dh, runEntityMiddlewarePipeline as di, runEntityQuery as dj, runEntityStorageMiddlewarePipeline as dk, searchResultDescriptionMiddleware as dl, searchResultDescriptionMiddlewareProvider as dm, shouldLoadEntityListStateFromStorage as dn, shouldResetEntityListStateOnRouteEntry as dp, traceEntityMasterList as dq, 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 };
32473
- //# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DS3F1_EN.mjs.map
32786
+ 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