@acorex-platform/framework-client 2.0.0-next.24 → 2.0.0-next.26

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 (26) hide show
  1. package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Ca3hnWpz.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BTLgOdQN.mjs} +243 -29
  2. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BTLgOdQN.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-D70kS0q4.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-DH2Wq7ux.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-D70kS0q4.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-DH2Wq7ux.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-2uNcMFTM.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-DMgR7yq0.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-2uNcMFTM.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-DMgR7yq0.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-Cj27Eok3.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-DLt5p2Iy.mjs} +2 -2
  8. package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-Cj27Eok3.mjs.map → acorex-platform-framework-client-layout-entity-file-list-popup.component-DLt5p2Iy.mjs.map} +1 -1
  9. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-CNyKkM7m.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-C_JIijQZ.mjs} +2 -2
  10. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-CNyKkM7m.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-C_JIijQZ.mjs.map} +1 -1
  11. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
  12. package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CELbt6ig.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-DRh91YCL.mjs} +26 -5
  13. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-DRh91YCL.mjs.map +1 -0
  14. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BSjcMKNA.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Ddx_b04d.mjs} +2 -2
  15. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BSjcMKNA.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Ddx_b04d.mjs.map} +1 -1
  16. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Co5_b33I.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-DqIuIn76.mjs} +2 -2
  17. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Co5_b33I.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-DqIuIn76.mjs.map} +1 -1
  18. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
  19. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +168 -81
  20. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  21. package/package.json +2 -2
  22. package/types/acorex-platform-framework-client-layout-entity.d.ts +57 -2
  23. package/types/acorex-platform-framework-client-layout-widgets.d.ts +2 -0
  24. package/types/acorex-platform-framework-client-themes-default.d.ts +4 -5
  25. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Ca3hnWpz.mjs.map +0 -1
  26. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CELbt6ig.mjs.map +0 -1
@@ -6195,7 +6195,7 @@ class AXPFileUploaderWidgetService {
6195
6195
  };
6196
6196
  let title = '';
6197
6197
  const result = await this.dialogOpener.openPopup({
6198
- load: () => import('./acorex-platform-framework-client-layout-entity-file-list-popup.component-Cj27Eok3.mjs').then((m) => m.AXPFileListPopupComponent),
6198
+ load: () => import('./acorex-platform-framework-client-layout-entity-file-list-popup.component-DLt5p2Iy.mjs').then((m) => m.AXPFileListPopupComponent),
6199
6199
  data: {
6200
6200
  entity: entity ?? null,
6201
6201
  readonly: resolved.readonly,
@@ -9392,6 +9392,57 @@ function getDataSourcePageIndex(dataSource) {
9392
9392
  const ds = dataSource;
9393
9393
  return ds._page ?? 0;
9394
9394
  }
9395
+ /**
9396
+ * Resolves when the next load cycle finishes.
9397
+ * A `loading=false` from an older cycle is ignored until this watch sees `loading=true`.
9398
+ * `stop` settles immediately (cache no-op, or a newer view switch owns the list).
9399
+ */
9400
+ function watchNextDataSourceLoad(dataSource, isCurrent = () => true) {
9401
+ let settled = false;
9402
+ let sawLoadingStart = false;
9403
+ let loadingSub = { unsubscribe: () => undefined };
9404
+ let changedSub = { unsubscribe: () => undefined };
9405
+ let timeoutId;
9406
+ let resolveLoad = () => undefined;
9407
+ const stop = () => {
9408
+ if (settled) {
9409
+ return;
9410
+ }
9411
+ settled = true;
9412
+ if (timeoutId != null) {
9413
+ clearTimeout(timeoutId);
9414
+ }
9415
+ loadingSub.unsubscribe();
9416
+ changedSub.unsubscribe();
9417
+ resolveLoad();
9418
+ };
9419
+ const promise = new Promise((done) => {
9420
+ resolveLoad = done;
9421
+ });
9422
+ const finish = () => {
9423
+ queueMicrotask(stop);
9424
+ };
9425
+ changedSub = dataSource.onChanged.subscribe(() => {
9426
+ if (!isCurrent() || (sawLoadingStart && !dataSource.isLoading)) {
9427
+ finish();
9428
+ }
9429
+ });
9430
+ loadingSub = dataSource.onLoadingChanged.subscribe((isLoading) => {
9431
+ if (!isCurrent()) {
9432
+ finish();
9433
+ return;
9434
+ }
9435
+ if (isLoading) {
9436
+ sawLoadingStart = true;
9437
+ return;
9438
+ }
9439
+ if (sawLoadingStart) {
9440
+ finish();
9441
+ }
9442
+ });
9443
+ timeoutId = setTimeout(stop, 10_000);
9444
+ return { promise, stop };
9445
+ }
9395
9446
  function normalizeListPaging(paging, defaultTake) {
9396
9447
  const take = typeof paging?.take === 'number' && paging.take > 0 ? paging.take : defaultTake;
9397
9448
  const skip = typeof paging?.skip === 'number' && paging.skip >= 0 ? paging.skip : 0;
@@ -10931,7 +10982,58 @@ class AXPEntityMasterListViewModel {
10931
10982
  const resolvedCommand = await this.resolveCommandNameExpression(commandPart, data);
10932
10983
  return `${resolvedCommand}${suffix}`;
10933
10984
  }
10934
- async setView(viewName = null) {
10985
+ /**
10986
+ * Marks every in-flight view switch as stale. Call only when the selected view name changes.
10987
+ * Does not clear rows or start a request; {@link setView} does that once this epoch is still current.
10988
+ */
10989
+ beginViewSwitch() {
10990
+ this.viewSwitchEpochValue += 1;
10991
+ return this.viewSwitchEpochValue;
10992
+ }
10993
+ viewSwitchEpoch() {
10994
+ return this.viewSwitchEpochValue;
10995
+ }
10996
+ isViewSwitchCurrent(epoch) {
10997
+ return epoch === this.viewSwitchEpochValue;
10998
+ }
10999
+ /** Clears the switch skeleton only for the load that still belongs to `epoch`. */
11000
+ finishListTransition(epoch) {
11001
+ if (!this.isViewSwitchCurrent(epoch)) {
11002
+ return;
11003
+ }
11004
+ this.listTransitionLoading.set(false);
11005
+ }
11006
+ async setView(viewName = null, viewSwitchEpoch) {
11007
+ const run = this.setViewChain.then(() => this.applySetView(viewName, viewSwitchEpoch));
11008
+ this.setViewChain = run.then(() => undefined, () => undefined);
11009
+ await run;
11010
+ }
11011
+ isStaleViewSwitch(viewSwitchEpoch) {
11012
+ return viewSwitchEpoch != null && !this.isViewSwitchCurrent(viewSwitchEpoch);
11013
+ }
11014
+ /**
11015
+ * Drops an in-flight list result so it cannot paint on the new view.
11016
+ * Restores the current filter/sort because `AXDataSource.reset()` clears them.
11017
+ * The replacement request starts later, after columns and filters for this view are ready.
11018
+ */
11019
+ discardInFlightListPresentation() {
11020
+ const currentQuery = this.dataSource.query;
11021
+ const filter = currentQuery.filter;
11022
+ const sort = currentQuery.sort ?? [];
11023
+ this.listResultDiscarded = true;
11024
+ this.listTransitionLoading.set(true);
11025
+ this.dataSource.reset();
11026
+ if (filter != null) {
11027
+ this.dataSource.filter(filter);
11028
+ }
11029
+ if (sort.length > 0) {
11030
+ this.dataSource.sort(...sort);
11031
+ }
11032
+ }
11033
+ async applySetView(viewName, viewSwitchEpoch) {
11034
+ if (this.isStaleViewSwitch(viewSwitchEpoch)) {
11035
+ return;
11036
+ }
10935
11037
  const previousViewName = this.view().name;
10936
11038
  traceEntityMasterList('viewmodel', 'setView start', () => ({
10937
11039
  entity: getEntityInfo(this.entityDef).source,
@@ -10943,6 +11045,9 @@ class AXPEntityMasterListViewModel {
10943
11045
  await this.loadUserStylingRules();
10944
11046
  await this.loadCustomQueryViews();
10945
11047
  await this.refreshVisibleViews();
11048
+ if (this.isStaleViewSwitch(viewSwitchEpoch)) {
11049
+ return;
11050
+ }
10946
11051
  const availableViews = this.views();
10947
11052
  if (!availableViews.length) {
10948
11053
  return;
@@ -10955,6 +11060,9 @@ class AXPEntityMasterListViewModel {
10955
11060
  const entitySetting = await this.settings.get(this.settingEntityKey);
10956
11061
  resolvedViewName = readPersistedEntityListInstanceCurrentView(entitySetting, this.listInstanceId());
10957
11062
  }
11063
+ if (this.isStaleViewSwitch(viewSwitchEpoch)) {
11064
+ return;
11065
+ }
10958
11066
  const currentViewName = this.view().name;
10959
11067
  const currentViewUnavailable = !availableViews.some((v) => v.name === currentViewName);
10960
11068
  const targetView = availableViews.find((c) => c.name === resolvedViewName) ?? (currentViewUnavailable ? availableViews[0] : this.view());
@@ -10966,13 +11074,25 @@ class AXPEntityMasterListViewModel {
10966
11074
  if (viewChanged) {
10967
11075
  this.view.set(targetView);
10968
11076
  this.resolvedListPaging.set(null);
11077
+ if (viewSwitchEpoch != null) {
11078
+ this.discardInFlightListPresentation();
11079
+ }
11080
+ }
11081
+ if (this.isStaleViewSwitch(viewSwitchEpoch)) {
11082
+ return;
10969
11083
  }
10970
11084
  if (shouldInitializeListState) {
10971
11085
  this.applyViewSorts();
10972
11086
  await this.applyViewColumns();
11087
+ if (this.isStaleViewSwitch(viewSwitchEpoch)) {
11088
+ return;
11089
+ }
10973
11090
  this.applyCardFields();
10974
11091
  this.applyViewFilters();
10975
11092
  await this.applySettings();
11093
+ if (this.isStaleViewSwitch(viewSwitchEpoch)) {
11094
+ return;
11095
+ }
10976
11096
  this.initialListSettingsApplied = true;
10977
11097
  }
10978
11098
  traceEntityMasterList('viewmodel', 'setView complete', () => ({
@@ -11012,6 +11132,14 @@ class AXPEntityMasterListViewModel {
11012
11132
  this.destroyed = new Subject();
11013
11133
  this.lastAppliedSortKey = null;
11014
11134
  this.lastAppliedFilterKey = null;
11135
+ /** Latest view-tab switch. Older `setView` / refresh continuations must not load. */
11136
+ this.viewSwitchEpochValue = 0;
11137
+ /** `reset()` dropped the in-flight rows; the next criteria apply must refresh even if the keys match. */
11138
+ this.listResultDiscarded = false;
11139
+ this.setViewChain = Promise.resolve();
11140
+ /** True after a view switch discards rows, until that switch's own load finishes. */
11141
+ this.listTransitionLoading = signal(false, /* @ts-ignore */
11142
+ ...(ngDevMode ? [{ debugName: "listTransitionLoading" }] : /* istanbul ignore next */ []));
11015
11143
  this.hasQueryParamsFilters = false; // Flag to prevent overriding queryParams filters
11016
11144
  this.routeQueryContextKey = null;
11017
11145
  this.listInstanceId = signal(ENTITY_LIST_DEFAULT_INSTANCE_ID, /* @ts-ignore */
@@ -12148,26 +12276,41 @@ class AXPEntityMasterListViewModel {
12148
12276
  this.hasQueryParamsFilters = false;
12149
12277
  }
12150
12278
  const previousViewName = this.view().name;
12151
- await this.setView(queryParamMap.get('view'));
12279
+ const requestedView = queryParamMap.get('view');
12280
+ const viewSwitchEpoch = requestedView != null && requestedView !== previousViewName ? this.beginViewSwitch() : undefined;
12281
+ await this.setView(requestedView, viewSwitchEpoch);
12282
+ if (viewSwitchEpoch != null && !this.isViewSwitchCurrent(viewSwitchEpoch)) {
12283
+ return { reloadList: false };
12284
+ }
12152
12285
  if (instanceChanged) {
12153
12286
  this.applyViewFilters();
12154
12287
  this.applyViewSorts();
12155
12288
  await this.loadPersistedInstanceFilters();
12289
+ if (viewSwitchEpoch != null && !this.isViewSwitchCurrent(viewSwitchEpoch)) {
12290
+ return { reloadList: false };
12291
+ }
12156
12292
  this.listFilterSeedEpoch.update((epoch) => epoch + 1);
12157
12293
  }
12158
12294
  const filtersChanged = await this.syncFiltersFromRouteQueryParam(queryParamMap.get('filters'));
12159
12295
  await this.refreshVisibleViews();
12296
+ if (viewSwitchEpoch != null && !this.isViewSwitchCurrent(viewSwitchEpoch)) {
12297
+ return { reloadList: false };
12298
+ }
12160
12299
  const viewChanged = this.view().name !== previousViewName;
12161
12300
  // Query-filter chips follow toolbar `initialFilters`, re-seeded only when this epoch changes.
12162
12301
  if (viewChanged) {
12163
12302
  this.listFilterSeedEpoch.update((epoch) => epoch + 1);
12164
12303
  }
12165
- if (filtersChanged || viewChanged || instanceChanged) {
12304
+ if (filtersChanged || viewChanged || instanceChanged || viewSwitchEpoch != null) {
12166
12305
  this.lastAppliedFilterKey = null;
12167
12306
  this.lastAppliedSortKey = null;
12168
12307
  // Keys were cleared to force apply; pass reset so URL view/filter changes still reset paging
12169
12308
  // (previously done by the caller via reloadListData(true)).
12170
- await this.applyFilterAndSort({ resetPagination: true });
12309
+ await this.applyFilterAndSort({
12310
+ resetPagination: true,
12311
+ viewSwitchEpoch,
12312
+ forceReload: viewSwitchEpoch != null,
12313
+ });
12171
12314
  }
12172
12315
  return { reloadList: false };
12173
12316
  }
@@ -12256,6 +12399,13 @@ class AXPEntityMasterListViewModel {
12256
12399
  }
12257
12400
  async applyFilterAndSort(options) {
12258
12401
  await this.ensureListPagingResolved();
12402
+ if (this.isStaleViewSwitch(options?.viewSwitchEpoch)) {
12403
+ return;
12404
+ }
12405
+ // A view switch already dropped the previous result. Only that switch may start the replacement load.
12406
+ if (this.listResultDiscarded && options?.viewSwitchEpoch == null && options?.forceReload !== true) {
12407
+ return;
12408
+ }
12259
12409
  const sorts = this.sortedFields()
12260
12410
  .filter((sf) => sf.dir)
12261
12411
  .map((s) => ({ name: s.name, dir: s.dir }));
@@ -12269,7 +12419,8 @@ class AXPEntityMasterListViewModel {
12269
12419
  filters: filters,
12270
12420
  });
12271
12421
  const filterKey = JSON.stringify(transformedFilter);
12272
- if (sortKey === this.lastAppliedSortKey && filterKey === this.lastAppliedFilterKey) {
12422
+ const presentationDiscarded = this.listResultDiscarded;
12423
+ if (sortKey === this.lastAppliedSortKey && filterKey === this.lastAppliedFilterKey && !presentationDiscarded && options?.forceReload !== true) {
12273
12424
  traceEntityMasterList('viewmodel', 'applyFilterAndSort skipped (no effective change)', () => ({
12274
12425
  entity: getEntityInfo(this.entityDef).source,
12275
12426
  activeListLayout: this.activeListLayout(),
@@ -12277,10 +12428,14 @@ class AXPEntityMasterListViewModel {
12277
12428
  }));
12278
12429
  return; // No effective change; avoid redundant refresh
12279
12430
  }
12431
+ if (this.isStaleViewSwitch(options?.viewSwitchEpoch)) {
12432
+ return;
12433
+ }
12434
+ this.listResultDiscarded = false;
12280
12435
  this.updateAppliedInlineFilterHighlightText(toolbarFilters);
12281
12436
  const filtersChanged = this.lastAppliedFilterKey != null && filterKey !== this.lastAppliedFilterKey;
12282
12437
  const sortsChanged = this.lastAppliedSortKey != null && sortKey !== this.lastAppliedSortKey;
12283
- const shouldResetPagination = options?.resetPagination === true || filtersChanged;
12438
+ const shouldResetPagination = options?.resetPagination === true || filtersChanged || presentationDiscarded;
12284
12439
  this.lastAppliedSortKey = sortKey;
12285
12440
  this.lastAppliedFilterKey = filterKey;
12286
12441
  if (shouldResetPagination) {
@@ -14611,7 +14766,7 @@ class AXMAttachmentsPageComponentProvider {
14611
14766
  return [
14612
14767
  {
14613
14768
  key: ATTACHMENTS_PAGE_COMPONENT_KEY,
14614
- loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-D70kS0q4.mjs').then((m) => m.AXMAttachmentsPageComponent),
14769
+ loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-DH2Wq7ux.mjs').then((m) => m.AXMAttachmentsPageComponent),
14615
14770
  },
14616
14771
  ];
14617
14772
  }
@@ -15148,7 +15303,7 @@ class AXMGalleryPageComponentProvider {
15148
15303
  return [
15149
15304
  {
15150
15305
  key: GALLERY_PAGE_COMPONENT_KEY,
15151
- loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-CNyKkM7m.mjs').then((m) => m.AXMGalleryPageComponent),
15306
+ loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-C_JIijQZ.mjs').then((m) => m.AXMGalleryPageComponent),
15152
15307
  },
15153
15308
  ];
15154
15309
  }
@@ -20181,7 +20336,9 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
20181
20336
  inst.__axpEntityListRefreshPatched = true;
20182
20337
  const originalRefresh = inst.refresh.bind(inst);
20183
20338
  this.boundDataListRefresh = originalRefresh;
20339
+ const showPlaceholders = inst.showLoadingPlaceholders?.bind(inst);
20184
20340
  inst.refresh = () => {
20341
+ showPlaceholders?.();
20185
20342
  void (async () => {
20186
20343
  if (this.#relatedFilterReloadInProgress) {
20187
20344
  // Filters are being (re)applied by the in-progress sync — only re-fetch.
@@ -20679,7 +20836,11 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
20679
20836
  const listInstance = this.listWidget()?.instance;
20680
20837
  const dataSource = listInstance?.options?.()?.['dataSource'];
20681
20838
  const toolbar = this.getValue()?.toolbar;
20682
- if (!dataSource?.filter || !toolbar?.filters?.length) {
20839
+ if (!dataSource?.filter) {
20840
+ return false;
20841
+ }
20842
+ dataSource.sort?.(...this.toDataSourceSortOptions(toolbar?.sorts));
20843
+ if (!toolbar?.filters?.length) {
20683
20844
  return false;
20684
20845
  }
20685
20846
  dataSource.filter({ filters: toolbar.filters });
@@ -20867,7 +21028,9 @@ class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
20867
21028
  if (!isMounted) {
20868
21029
  return;
20869
21030
  }
20870
- if (changeTracker.isFilterChanged || changeTracker.isSortChanged) {
21031
+ if (changeTracker.isFilterChanged ||
21032
+ changeTracker.isSortChanged ||
21033
+ changeTracker.isViewChanged) {
20871
21034
  this.pushToolbarFiltersToDataSource();
20872
21035
  listInstance.call('refresh');
20873
21036
  }
@@ -23907,6 +24070,9 @@ function resolveKnownLookupTreeChildrenCount(item) {
23907
24070
  if (Array.isArray(item['children'])) {
23908
24071
  return item['children'].length;
23909
24072
  }
24073
+ if (item['hasChild'] === false || item['hasChildren'] === false) {
24074
+ return 0;
24075
+ }
23910
24076
  return undefined;
23911
24077
  }
23912
24078
  async function loadLookupTreeChildrenCounts(execute, parentKey, parentIds, config) {
@@ -23944,8 +24110,9 @@ async function loadLookupTreeChildrenCounts(execute, parentKey, parentIds, confi
23944
24110
  * Lazy tree for hierarchical lookup entities (`parentKey`).
23945
24111
  * Roots use `parentKey isEmpty` unless the widget filter already constrains the parent;
23946
24112
  * expanding a node loads `parentKey = nodeId`.
23947
- * `childrenCount` is taken from the row when present; otherwise one `parentKey in ids`
23948
- * query marks leaves as 0 so ax-tree-view does not show an expander.
24113
+ * `childrenCount` is taken from the row when present. Otherwise the row is marked expandable,
24114
+ * unless `prefetchChildrenCount` is set, in which case one `parentKey in ids` query marks
24115
+ * leaves as 0 so no expander is shown.
23949
24116
  */
23950
24117
  function createLookupEntityTreeDataSource(config) {
23951
24118
  const parentKey = config.entity.parentKey?.trim();
@@ -23983,14 +24150,23 @@ function createLookupEntityTreeDataSource(config) {
23983
24150
  const query = queryFields?.length ? { ...request, fields: queryFields } : request;
23984
24151
  const result = await execute(query);
23985
24152
  const items = await decorateListItems(result?.items, decorateItem);
23986
- const unknownParentIds = items
23987
- .filter((item) => resolveKnownLookupTreeChildrenCount(item) == null)
23988
- .map((item) => item[valueField])
23989
- .filter((id) => id != null);
24153
+ const unknownParentIds = config.prefetchChildrenCount
24154
+ ? items
24155
+ .filter((item) => resolveKnownLookupTreeChildrenCount(item) == null)
24156
+ .map((item) => item[valueField])
24157
+ .filter((id) => id != null)
24158
+ : [];
23990
24159
  const fetchedCounts = unknownParentIds.length > 0 ? await loadLookupTreeChildrenCounts(execute, parentKey, unknownParentIds, config) : new Map();
23991
24160
  return items.map((item) => {
23992
24161
  const key = item[valueField];
23993
24162
  const knownCount = resolveKnownLookupTreeChildrenCount(item);
24163
+ if (knownCount == null && !config.prefetchChildrenCount) {
24164
+ const node = { ...item, hasChild: key != null };
24165
+ if (key != null && node[valueField] == null) {
24166
+ node[valueField] = key;
24167
+ }
24168
+ return node;
24169
+ }
23994
24170
  const childrenCount = knownCount ?? (key == null ? 0 : (fetchedCounts.get(String(key)) ?? 0));
23995
24171
  const node = {
23996
24172
  ...item,
@@ -24513,6 +24689,8 @@ class AXPLookupWidgetTablePanelComponent {
24513
24689
  /** Set when a row command fires so the following row click does not select. */
24514
24690
  #skipNextRowSelection;
24515
24691
  #totalCount;
24692
+ /** True until the entity list finishes its first fetch for this panel open. */
24693
+ #awaitingEntityRows;
24516
24694
  //#endregion
24517
24695
  //#region ----- Lifecycle -----
24518
24696
  constructor() {
@@ -24574,13 +24752,23 @@ class AXPLookupWidgetTablePanelComponent {
24574
24752
  this.#skipNextRowSelection = false;
24575
24753
  this.#totalCount = signal(0, /* @ts-ignore */
24576
24754
  ...(ngDevMode ? [{ debugName: "#totalCount" }] : /* istanbul ignore next */ []));
24755
+ /** True until the entity list finishes its first fetch for this panel open. */
24756
+ this.#awaitingEntityRows = signal(false, /* @ts-ignore */
24757
+ ...(ngDevMode ? [{ debugName: "#awaitingEntityRows" }] : /* istanbul ignore next */ []));
24577
24758
  this.tableDataSource = new AXDataSource({
24578
24759
  pageSize: 1,
24579
24760
  key: 'id',
24580
- load: async () => ({
24581
- items: this.#loadedItems,
24582
- total: this.#loadedItems.length,
24583
- }),
24761
+ load: async () => {
24762
+ const source = this.dataSource();
24763
+ if (this.#loadedItems.length === 0 && (source.isLoading || this.#awaitingEntityRows())) {
24764
+ await watchNextDataSourceLoad(source).promise;
24765
+ }
24766
+ const total = this.#totalCount();
24767
+ return {
24768
+ items: this.#loadedItems,
24769
+ total: total > 0 ? total : this.#loadedItems.length,
24770
+ };
24771
+ },
24584
24772
  });
24585
24773
  /**
24586
24774
  * Source bound to `ax-data-table`. The table only subscribes to `dataSource` in `ngOnInit`,
@@ -24598,6 +24786,9 @@ class AXPLookupWidgetTablePanelComponent {
24598
24786
  return header + maxVisible * itemHeight;
24599
24787
  }
24600
24788
  const total = this.#totalCount();
24789
+ if (this.#awaitingEntityRows() && total === 0) {
24790
+ return header + maxVisible * itemHeight;
24791
+ }
24601
24792
  const rows = total > 0 ? total : Math.min(3, maxVisible);
24602
24793
  return header + Math.min(rows, maxVisible) * itemHeight;
24603
24794
  }, /* @ts-ignore */
@@ -24646,17 +24837,30 @@ class AXPLookupWidgetTablePanelComponent {
24646
24837
  return;
24647
24838
  }
24648
24839
  untracked(() => {
24649
- this.#applyLoadedItems(source.cachedItems, source.totalCount);
24840
+ this.#awaitingEntityRows.set(true);
24841
+ const hasCachedRows = source.cachedItems.some((item) => item != null);
24842
+ if (hasCachedRows) {
24843
+ this.#applyLoadedItems(source.cachedItems, source.totalCount);
24844
+ }
24845
+ else {
24846
+ this.#loadedItems.length = 0;
24847
+ this.#totalCount.set(0);
24848
+ }
24650
24849
  });
24651
24850
  const changedSub = source.onChanged.subscribe((event) => {
24652
24851
  this.#applyLoadedItems(event.cachedItems, event.totalCount);
24653
24852
  });
24853
+ // Same as tree mode: always load when the panel opens (do not rely on cache after close).
24654
24854
  queueMicrotask(() => {
24855
+ source.setPage(0);
24655
24856
  if (!source.cachedItems.some((item) => item != null)) {
24656
- source.setPage(0);
24857
+ this.tableDataSource.refresh({ reset: true });
24657
24858
  }
24658
24859
  });
24659
- onCleanup(() => changedSub.unsubscribe());
24860
+ onCleanup(() => {
24861
+ changedSub.unsubscribe();
24862
+ this.#awaitingEntityRows.set(false);
24863
+ });
24660
24864
  });
24661
24865
  effect((onCleanup) => {
24662
24866
  if (this.parentField()) {
@@ -24718,6 +24922,7 @@ class AXPLookupWidgetTablePanelComponent {
24718
24922
  this.#loadedItems.length = 0;
24719
24923
  this.#loadedItems.push(...cachedItems.filter((item) => item != null));
24720
24924
  this.#totalCount.set(totalCount);
24925
+ this.#awaitingEntityRows.set(false);
24721
24926
  this.tableDataSource.config.pageSize = Math.max(this.#loadedItems.length, 1);
24722
24927
  this.tableDataSource.refresh({ reset: true });
24723
24928
  }
@@ -25034,7 +25239,10 @@ class AXPLookupWidgetTableHostComponent extends NXValueComponent {
25034
25239
  this.highlightQuery.set(query);
25035
25240
  if (!query) {
25036
25241
  source.clearFilter();
25037
- source.refresh();
25242
+ // List load is gated while the popover is closed; refresh here would cache empty rows.
25243
+ if (this.expanded()) {
25244
+ source.refresh();
25245
+ }
25038
25246
  return;
25039
25247
  }
25040
25248
  if (this.parentField() && this.treeDataSource() && typeof this.treeDataSource() === 'function') {
@@ -25208,6 +25416,9 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
25208
25416
  /** When false, an empty cascade filter does not lock the editor. Explicit `disabled` is independent. */
25209
25417
  this.waitForCascade = computed(() => this.options()['waitForCascade'] ?? true, /* @ts-ignore */
25210
25418
  ...(ngDevMode ? [{ debugName: "waitForCascade" }] : /* istanbul ignore next */ []));
25419
+ /** ax-tree-view only lazy-loads nodes with `childrenCount > 0`, so non-table tree modes always prefetch. */
25420
+ this.prefetchChildrenCount = computed(() => this.options()['prefetchChildrenCount'] === true || !this.isTableLookupMode(), /* @ts-ignore */
25421
+ ...(ngDevMode ? [{ debugName: "prefetchChildrenCount" }] : /* istanbul ignore next */ []));
25211
25422
  /** Parent cascade with an empty value. Structurally empty filters and top-level not-in stay enabled. */
25212
25423
  this.hasPendingCascadeFilter = computed(() => {
25213
25424
  if (this.filterMode() || !this.waitForCascade()) {
@@ -25345,8 +25556,10 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
25345
25556
  });
25346
25557
  }, /* @ts-ignore */
25347
25558
  ...(ngDevMode ? [{ debugName: "entityDataSource" }] : /* istanbul ignore next */ []));
25559
+ /** New identity per filter so the table host drops its per-loader node cache. */
25348
25560
  this.entityTreeDataSource = computed(() => {
25349
25561
  this.localeEpoch();
25562
+ this.customFilter();
25350
25563
  const entity = this.entityDef();
25351
25564
  if (!entity?.parentKey || this.look() === 'select') {
25352
25565
  return EMPTY_TREE_DATA_SOURCE;
@@ -25361,6 +25574,7 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
25361
25574
  getQueryFields: () => this.lookupQueryFields(),
25362
25575
  getCustomFilter: () => this.customFilter(),
25363
25576
  shouldQuery: () => this.shouldRunLookupListQuery(),
25577
+ prefetchChildrenCount: this.prefetchChildrenCount(),
25364
25578
  transformFilter: (filter) => this.filterOperatorMiddleware.transformFilter(filter),
25365
25579
  decorateItem: (item) => this.decorateLookupItem(item),
25366
25580
  }) ?? EMPTY_TREE_DATA_SOURCE);
@@ -33401,7 +33615,7 @@ class AXPEntityModule {
33401
33615
  },
33402
33616
  {
33403
33617
  key: 'Entity:Bulk',
33404
- command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-2uNcMFTM.mjs').then((c) => c.AXPBulkEntityCommand),
33618
+ command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-DMgR7yq0.mjs').then((c) => c.AXPBulkEntityCommand),
33405
33619
  },
33406
33620
  {
33407
33621
  key: 'Entity:OpenList',
@@ -33563,7 +33777,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
33563
33777
  },
33564
33778
  {
33565
33779
  key: 'Entity:Bulk',
33566
- command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-2uNcMFTM.mjs').then((c) => c.AXPBulkEntityCommand),
33780
+ command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-DMgR7yq0.mjs').then((c) => c.AXPBulkEntityCommand),
33567
33781
  },
33568
33782
  {
33569
33783
  key: 'Entity:OpenList',
@@ -33888,5 +34102,5 @@ function detectEntityChanges(oldObj, newObj) {
33888
34102
  * Generated bundle index. Do not edit.
33889
34103
  */
33890
34104
 
33891
- export { AXPEntityListViewCardFieldViewModel as $, AXPEntityDefinitionRegistryService as A, AXPEntityCategoryWidget as B, AXPEntityCategoryWidgetColumnComponent as C, AXPEntityCategoryWidgetEditComponent as D, AXPEntityCategoryWidgetViewComponent as E, AXPEntityCommandTriggerViewModel as F, AXPEntityCreateViewElementViewModel as G, AXPEntityCreateViewModelFactory as H, AXPEntityCreateViewSectionViewModel as I, AXPEntityDataProvider as J, AXPEntityDataProviderImpl as K, AXPEntityDataSelectorRowActionsService as L, AXPEntityDataSelectorService as M, AXPEntityDefinitionProviderWidget as N, AXPEntityDefinitionProviderWidgetEditComponent as O, AXPEntityDeletePerformService as P, AXPEntityDetailListViewModel as Q, AXPEntityDetailPopoverComponent as R, AXPEntityDetailPopoverService as S, AXPEntityDetailViewModelFactory as T, AXPEntityDetailViewModelResolver as U, AXPEntityEventDispatcherService as V, AXPEntityFormBuilderService as W, AXPEntityLifecycleHookKeys as X, AXPEntityListPersistenceModeDefault as Y, AXPEntityListTableService as Z, AXPEntityListToolbarService as _, showOperationResultToast as a, AXPUpdateEntityStatusCommand as a$, AXPEntityListViewColumnViewModel as a0, AXPEntityListViewModelFactory as a1, AXPEntityListViewModelResolver as a2, AXPEntityListWidget as a3, AXPEntityListWidgetViewComponent as a4, AXPEntityMasterCreateViewModel as a5, AXPEntityMasterListCardSelectActionName as a6, AXPEntityMasterListViewModel as a7, AXPEntityMasterListViewQueryViewModel as a8, AXPEntityMasterSingleElementViewModel as a9, AXPLookupWidget as aA, AXPLookupWidgetColumnComponent as aB, AXPLookupWidgetEditComponent as aC, AXPLookupWidgetViewComponent as aD, AXPMiddlewareAbortError as aE, AXPMiddlewareEntityStorageService as aF, AXPMultiSourceDefinitionProviderContext as aG, AXPMultiSourceDefinitionProviderService as aH, AXPMultiSourceFederatedSearchService as aI, AXPMultiSourceSelectorComponent as aJ, AXPMultiSourceSelectorService as aK, AXPMultiSourceSelectorWidget as aL, AXPMultiSourceSelectorWidgetColumnComponent as aM, AXPMultiSourceSelectorWidgetEditComponent as aN, AXPMultiSourceSelectorWidgetViewComponent as aO, AXPMultiSourceType as aP, AXPOpenEntityDetailsCommand as aQ, AXPOpenEntityListCommand as aR, AXPRelatedColumnEnrichmentService as aS, AXPRelatedColumnMetadataResolver as aT, AXPSelectorStructureWidget as aU, AXPSelectorStructureWidgetColumnComponent as aV, AXPSelectorStructureWidgetEditComponent as aW, AXPSelectorStructureWidgetViewComponent as aX, AXPShowFileUploaderPopupCommand as aY, AXPTruncatedBreadcrumbComponent as aZ, AXPUpdateEntityCommand as a_, AXPEntityMasterSingleViewGroupViewModel as aa, AXPEntityMasterSingleViewModel as ab, AXPEntityMasterUpdateElementViewModel as ac, AXPEntityMasterUpdateViewModel as ad, AXPEntityMasterUpdateViewModelFactory as ae, AXPEntityMiddlewareSkipContext as af, AXPEntityModule as ag, AXPEntityPreloadFiltersContainerComponent as ah, AXPEntityPreloadFiltersViewModel as ai, AXPEntityPreloadFiltersViewModelResolver as aj, AXPEntityResolver as ak, AXPEntityRuntimeAccessorService as al, AXPEntityService as am, AXPEntityStorageService as an, AXPEntityUpdateViewSectionViewModel as ao, AXPFileListComponent as ap, AXPFileUploaderLoadFilesQuery as aq, AXPFileUploaderSaveFilesCommand as ar, AXPFileUploaderWidget as as, AXPFileUploaderWidgetColumnComponent as at, AXPFileUploaderWidgetEditComponent as au, AXPFileUploaderWidgetService as av, AXPFileUploaderWidgetViewComponent as aw, AXPGetEntityDetailsQuery as ax, AXPLayoutOrderingConfigService as ay, AXPLookupByKeyCacheService as az, buildSelectedIdsFilter as b, defaultMultiLanguageMiddleware as b$, AXPViewEntityDetailsCommand as b0, AXP_APPEARANCE_SECTION_ORDER as b1, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY as b2, AXP_CLASSIFICATION_SECTION_ORDER as b3, AXP_CLIENT_LOCAL_DEFAULT_MAX_ITEMS as b4, AXP_CLIENT_LOCAL_PLUGIN_NAME as b5, AXP_DATA_SEEDER_TOKEN as b6, AXP_ENTITY_ACTION_PLUGIN as b7, AXP_ENTITY_CONFIG_TOKEN as b8, AXP_ENTITY_DEFINITION_LOADER as b9, axpDeleteEntityCommandDefinition as bA, axpOpenEntityListCommandDefinition as bB, axpRunEntityListPageContextAction as bC, axpShowFileUploaderPopupCommandDefinition as bD, axpUpdateEntityStatusCommandDefinition as bE, buildDataSourceTraceSnapshot as bF, canPersistEntityListState as bG, clientLocalPlugin as bH, cloneLayoutArrays as bI, columnOrderingMiddleware as bJ, columnOrderingMiddlewareProvider as bK, columnWidthMiddleware as bL, columnWidthMiddlewareProvider as bM, committedAttachments as bN, composeEntityMiddlewares as bO, composeEntityStorageMiddlewares as bP, computeEntityAggregates as bQ, configureEntityListColumnsSettingsMigrateDrop as bR, configureEntityListColumnsSettingsVersion as bS, createColumnOrderingMiddlewareProvider as bT, createEntityCardDisplayScope as bU, createEntityCardLogicScope as bV, createEntityMiddlewareContext as bW, createEntityStorageContext as bX, createLayoutOrderingMiddlewareProvider as bY, defaultCardLayoutMiddleware as bZ, defaultCardLayoutMiddlewareProvider as b_, AXP_ENTITY_MIDDLEWARE as ba, AXP_ENTITY_MODIFIER as bb, AXP_ENTITY_STORAGE_MIDDLEWARE as bc, AXP_LOOKUP_FILTER_DEFAULT_OPERATOR as bd, AXP_MULTI_SOURCE_DEFINITION_PROVIDER as be, DEFAULT_COLUMN_ORDER as bf, DEFAULT_GROUP_SPAN_RULES as bg, DEFAULT_PAIR_SPAN_RULES as bh, DEFAULT_PROPERTY_ORDER as bi, DEFAULT_SECTION_ORDER as bj, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE as bk, ENTITY_LIST_LAYOUT_META as bl, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY as bm, ENTITY_MASTER_LIST_TRACE_NS as bn, EntityBuilder as bo, EntityDataAccessor as bp, GALLERY_PAGE_COMPONENT_KEY as bq, TREE_CHILDREN_QUERY_TAKE as br, actionExists as bs, applyDataSourcePagingWithoutLoad as bt, attachmentFieldCount as bu, attachmentsPlugin as bv, attachmentsSemanticallyEqual as bw, axpBuildEntityListPageContextSnapshot as bx, axpCreateEntityAiToolInputDefaults as by, axpCreateEntityCommandDefinition as bz, readLiveAttachmentValue as c, provideEntityMiddlewareBridge as c$, defaultMultiLanguageMiddlewareProvider as c0, defaultSortPresetsMiddleware as c1, defaultSortPresetsMiddlewareProvider as c2, detectEntityChanges as c3, dispatchEntityModifiedSideEffects as c4, ensureHierarchicalRootFilter as c5, ensureLayoutPropertyView as c6, ensureLayoutSection as c7, ensureListActions as c8, entityCreateBridgeMiddleware as c9, getEntityListColumnsSettingsVersion as cA, getEntityListRowId as cB, getMasterInterfacePropertySortKey as cC, hasFileUploaderTitleOrDescriptionFields as cD, hydrateAttachmentFieldToFileList as cE, isAXPMiddlewareAbortError as cF, isAttachmentFieldPresentOnRow as cG, isAttachmentListEntry as cH, isAttachmentStorageRef as cI, isCategoryEntity as cJ, isCategoryFilter as cK, isFileListItem as cL, isFileUploaderEditDialogAuto as cM, isLegacyEntityDataSelectorOptions as cN, layoutOrderingMiddlewareFactory as cO, layoutOrderingMiddlewareProvider as cP, mapEntityStorageErrorToCommandResult as cQ, mapLegacyEntityDataSelectorOptions as cR, mergeEntityListViewAndPersistedFilters as cS, normalizeEntityCardHeaderDisplayValue as cT, normalizeEntityDataSelectorColumnSpecs as cU, normalizeEntityDataSelectorOptions as cV, normalizeEntityFieldToFileList as cW, normalizeEntityListPersistenceMode as cX, normalizeListPaging as cY, prefetchClientLocalRelated as cZ, provideEntity as c_, entityDeleteBridgeMiddleware as ca, entityGetOneBridgeMiddleware as cb, entityListInstanceCurrentViewPath as cc, entityListInstanceFilterPath as cd, entityListStylingRulesPath as ce, entityQueryBridgeMiddleware as cf, entityStorageCreateBridgeMiddleware as cg, entityStorageDeleteBridgeMiddleware as ch, entityStorageGetOneBridgeMiddleware as ci, entityStorageQueryBridgeMiddleware as cj, entityStorageUpdateBridgeMiddleware as ck, entityUpdateBridgeMiddleware as cl, eventDispatchMiddleware as cm, filterEntityMiddlewares as cn, filterEntityStorageMiddlewares as co, filterSortEntityRows as cp, filterTouchesParentKey as cq, findEntityListRowDataInTree as cr, fingerprintAttachmentItem as cs, fingerprintAttachments as ct, fireEntityLifecycleHook as cu, formatLookupItemDisplay as cv, formatLookupItemDisplayAsync as cw, galleryPlugin as cx, getDataSourcePageIndex as cy, getEntityListColumnsSettingsMigrateDrop as cz, saveAttachmentsThroughEntityUpdate as d, provideEntityRealtimeHandlers as d0, provideEntityStorageMiddlewareBridge as d1, provideLocalEntityCatalog as d2, readPersistedEntityListInstanceCurrentView as d3, readPersistedEntityListInstanceFilters as d4, readPersistedEntityListStylingRules as d5, resetPagingForTreeChildrenLoad as d6, resolveAttachmentFieldPath as d7, resolveEntityCardBadgeColorValue as d8, resolveEntityCardHeaderValue as d9, resolveEntityMasterFieldStylingClass as da, resolveEntityMasterRecordStylingClass as db, resolveEntityMasterStylingClass as dc, resolveEntityPluginDetailPageOrder as dd, resolveFileUploaderEditDialog as de, resolveFileUploaderEntityScope as df, resolveLookupDisplayField as dg, resolveLookupDisplayTemplate as dh, resolveLookupEntityCacheKey as di, resolveLookupEntityKey as dj, resolveMasterInterfacePropertyOrder as dk, restoreEntityListExpandedRows as dl, runEntityMiddlewarePipeline as dm, runEntityQuery as dn, runEntityStorageMiddlewarePipeline as dp, searchResultDescriptionMiddleware as dq, searchResultDescriptionMiddlewareProvider as dr, shouldLoadEntityListStateFromStorage as ds, shouldResetEntityListStateOnRouteEntry as dt, traceEntityMasterList as du, attachmentNeedsHydration as e, ATTACHMENTS_PAGE_COMPONENT_KEY as f, AXMEntityCrudService as g, AXMEntityCrudServiceImpl as h, AXPCategoryTreeService as i, AXPClientLocalPluginModule as j, AXPCreateEntityCommand as k, AXPDataSeederService as l, AXPDeleteEntityCommand as m, newBulkExecutionId as n, AXPDomainQueryEntityDefinitionLoader as o, persistedAttachments as p, AXPEditFileUploaderCommand as q, resolveBulkFailureBody as r, settleAfterLoadingDialog as s, AXPEntityBulkPatchPerformService as t, AXPEntityCardComponent as u, AXPEntityCardFieldsResolver as v, watchBulkProgress as w, AXPEntityCardSelectActionName as x, AXPEntityCardSkeletonComponent as y, AXPEntityCategoryTreeSelectorComponent as z };
33892
- //# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Ca3hnWpz.mjs.map
34105
+ export { AXPEntityListViewCardFieldViewModel as $, AXPEntityDefinitionRegistryService as A, AXPEntityCategoryWidget as B, AXPEntityCategoryWidgetColumnComponent as C, AXPEntityCategoryWidgetEditComponent as D, AXPEntityCategoryWidgetViewComponent as E, AXPEntityCommandTriggerViewModel as F, AXPEntityCreateViewElementViewModel as G, AXPEntityCreateViewModelFactory as H, AXPEntityCreateViewSectionViewModel as I, AXPEntityDataProvider as J, AXPEntityDataProviderImpl as K, AXPEntityDataSelectorRowActionsService as L, AXPEntityDataSelectorService as M, AXPEntityDefinitionProviderWidget as N, AXPEntityDefinitionProviderWidgetEditComponent as O, AXPEntityDeletePerformService as P, AXPEntityDetailListViewModel as Q, AXPEntityDetailPopoverComponent as R, AXPEntityDetailPopoverService as S, AXPEntityDetailViewModelFactory as T, AXPEntityDetailViewModelResolver as U, AXPEntityEventDispatcherService as V, AXPEntityFormBuilderService as W, AXPEntityLifecycleHookKeys as X, AXPEntityListPersistenceModeDefault as Y, AXPEntityListTableService as Z, AXPEntityListToolbarService as _, showOperationResultToast as a, AXPUpdateEntityStatusCommand as a$, AXPEntityListViewColumnViewModel as a0, AXPEntityListViewModelFactory as a1, AXPEntityListViewModelResolver as a2, AXPEntityListWidget as a3, AXPEntityListWidgetViewComponent as a4, AXPEntityMasterCreateViewModel as a5, AXPEntityMasterListCardSelectActionName as a6, AXPEntityMasterListViewModel as a7, AXPEntityMasterListViewQueryViewModel as a8, AXPEntityMasterSingleElementViewModel as a9, AXPLookupWidget as aA, AXPLookupWidgetColumnComponent as aB, AXPLookupWidgetEditComponent as aC, AXPLookupWidgetViewComponent as aD, AXPMiddlewareAbortError as aE, AXPMiddlewareEntityStorageService as aF, AXPMultiSourceDefinitionProviderContext as aG, AXPMultiSourceDefinitionProviderService as aH, AXPMultiSourceFederatedSearchService as aI, AXPMultiSourceSelectorComponent as aJ, AXPMultiSourceSelectorService as aK, AXPMultiSourceSelectorWidget as aL, AXPMultiSourceSelectorWidgetColumnComponent as aM, AXPMultiSourceSelectorWidgetEditComponent as aN, AXPMultiSourceSelectorWidgetViewComponent as aO, AXPMultiSourceType as aP, AXPOpenEntityDetailsCommand as aQ, AXPOpenEntityListCommand as aR, AXPRelatedColumnEnrichmentService as aS, AXPRelatedColumnMetadataResolver as aT, AXPSelectorStructureWidget as aU, AXPSelectorStructureWidgetColumnComponent as aV, AXPSelectorStructureWidgetEditComponent as aW, AXPSelectorStructureWidgetViewComponent as aX, AXPShowFileUploaderPopupCommand as aY, AXPTruncatedBreadcrumbComponent as aZ, AXPUpdateEntityCommand as a_, AXPEntityMasterSingleViewGroupViewModel as aa, AXPEntityMasterSingleViewModel as ab, AXPEntityMasterUpdateElementViewModel as ac, AXPEntityMasterUpdateViewModel as ad, AXPEntityMasterUpdateViewModelFactory as ae, AXPEntityMiddlewareSkipContext as af, AXPEntityModule as ag, AXPEntityPreloadFiltersContainerComponent as ah, AXPEntityPreloadFiltersViewModel as ai, AXPEntityPreloadFiltersViewModelResolver as aj, AXPEntityResolver as ak, AXPEntityRuntimeAccessorService as al, AXPEntityService as am, AXPEntityStorageService as an, AXPEntityUpdateViewSectionViewModel as ao, AXPFileListComponent as ap, AXPFileUploaderLoadFilesQuery as aq, AXPFileUploaderSaveFilesCommand as ar, AXPFileUploaderWidget as as, AXPFileUploaderWidgetColumnComponent as at, AXPFileUploaderWidgetEditComponent as au, AXPFileUploaderWidgetService as av, AXPFileUploaderWidgetViewComponent as aw, AXPGetEntityDetailsQuery as ax, AXPLayoutOrderingConfigService as ay, AXPLookupByKeyCacheService as az, buildSelectedIdsFilter as b, defaultMultiLanguageMiddleware as b$, AXPViewEntityDetailsCommand as b0, AXP_APPEARANCE_SECTION_ORDER as b1, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY as b2, AXP_CLASSIFICATION_SECTION_ORDER as b3, AXP_CLIENT_LOCAL_DEFAULT_MAX_ITEMS as b4, AXP_CLIENT_LOCAL_PLUGIN_NAME as b5, AXP_DATA_SEEDER_TOKEN as b6, AXP_ENTITY_ACTION_PLUGIN as b7, AXP_ENTITY_CONFIG_TOKEN as b8, AXP_ENTITY_DEFINITION_LOADER as b9, axpDeleteEntityCommandDefinition as bA, axpOpenEntityListCommandDefinition as bB, axpRunEntityListPageContextAction as bC, axpShowFileUploaderPopupCommandDefinition as bD, axpUpdateEntityStatusCommandDefinition as bE, buildDataSourceTraceSnapshot as bF, canPersistEntityListState as bG, clientLocalPlugin as bH, cloneLayoutArrays as bI, columnOrderingMiddleware as bJ, columnOrderingMiddlewareProvider as bK, columnWidthMiddleware as bL, columnWidthMiddlewareProvider as bM, committedAttachments as bN, composeEntityMiddlewares as bO, composeEntityStorageMiddlewares as bP, computeEntityAggregates as bQ, configureEntityListColumnsSettingsMigrateDrop as bR, configureEntityListColumnsSettingsVersion as bS, createColumnOrderingMiddlewareProvider as bT, createEntityCardDisplayScope as bU, createEntityCardLogicScope as bV, createEntityMiddlewareContext as bW, createEntityStorageContext as bX, createLayoutOrderingMiddlewareProvider as bY, defaultCardLayoutMiddleware as bZ, defaultCardLayoutMiddlewareProvider as b_, AXP_ENTITY_MIDDLEWARE as ba, AXP_ENTITY_MODIFIER as bb, AXP_ENTITY_STORAGE_MIDDLEWARE as bc, AXP_LOOKUP_FILTER_DEFAULT_OPERATOR as bd, AXP_MULTI_SOURCE_DEFINITION_PROVIDER as be, DEFAULT_COLUMN_ORDER as bf, DEFAULT_GROUP_SPAN_RULES as bg, DEFAULT_PAIR_SPAN_RULES as bh, DEFAULT_PROPERTY_ORDER as bi, DEFAULT_SECTION_ORDER as bj, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE as bk, ENTITY_LIST_LAYOUT_META as bl, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY as bm, ENTITY_MASTER_LIST_TRACE_NS as bn, EntityBuilder as bo, EntityDataAccessor as bp, GALLERY_PAGE_COMPONENT_KEY as bq, TREE_CHILDREN_QUERY_TAKE as br, actionExists as bs, applyDataSourcePagingWithoutLoad as bt, attachmentFieldCount as bu, attachmentsPlugin as bv, attachmentsSemanticallyEqual as bw, axpBuildEntityListPageContextSnapshot as bx, axpCreateEntityAiToolInputDefaults as by, axpCreateEntityCommandDefinition as bz, readLiveAttachmentValue as c, provideEntityMiddlewareBridge as c$, defaultMultiLanguageMiddlewareProvider as c0, defaultSortPresetsMiddleware as c1, defaultSortPresetsMiddlewareProvider as c2, detectEntityChanges as c3, dispatchEntityModifiedSideEffects as c4, ensureHierarchicalRootFilter as c5, ensureLayoutPropertyView as c6, ensureLayoutSection as c7, ensureListActions as c8, entityCreateBridgeMiddleware as c9, getEntityListColumnsSettingsVersion as cA, getEntityListRowId as cB, getMasterInterfacePropertySortKey as cC, hasFileUploaderTitleOrDescriptionFields as cD, hydrateAttachmentFieldToFileList as cE, isAXPMiddlewareAbortError as cF, isAttachmentFieldPresentOnRow as cG, isAttachmentListEntry as cH, isAttachmentStorageRef as cI, isCategoryEntity as cJ, isCategoryFilter as cK, isFileListItem as cL, isFileUploaderEditDialogAuto as cM, isLegacyEntityDataSelectorOptions as cN, layoutOrderingMiddlewareFactory as cO, layoutOrderingMiddlewareProvider as cP, mapEntityStorageErrorToCommandResult as cQ, mapLegacyEntityDataSelectorOptions as cR, mergeEntityListViewAndPersistedFilters as cS, normalizeEntityCardHeaderDisplayValue as cT, normalizeEntityDataSelectorColumnSpecs as cU, normalizeEntityDataSelectorOptions as cV, normalizeEntityFieldToFileList as cW, normalizeEntityListPersistenceMode as cX, normalizeListPaging as cY, prefetchClientLocalRelated as cZ, provideEntity as c_, entityDeleteBridgeMiddleware as ca, entityGetOneBridgeMiddleware as cb, entityListInstanceCurrentViewPath as cc, entityListInstanceFilterPath as cd, entityListStylingRulesPath as ce, entityQueryBridgeMiddleware as cf, entityStorageCreateBridgeMiddleware as cg, entityStorageDeleteBridgeMiddleware as ch, entityStorageGetOneBridgeMiddleware as ci, entityStorageQueryBridgeMiddleware as cj, entityStorageUpdateBridgeMiddleware as ck, entityUpdateBridgeMiddleware as cl, eventDispatchMiddleware as cm, filterEntityMiddlewares as cn, filterEntityStorageMiddlewares as co, filterSortEntityRows as cp, filterTouchesParentKey as cq, findEntityListRowDataInTree as cr, fingerprintAttachmentItem as cs, fingerprintAttachments as ct, fireEntityLifecycleHook as cu, formatLookupItemDisplay as cv, formatLookupItemDisplayAsync as cw, galleryPlugin as cx, getDataSourcePageIndex as cy, getEntityListColumnsSettingsMigrateDrop as cz, saveAttachmentsThroughEntityUpdate as d, provideEntityRealtimeHandlers as d0, provideEntityStorageMiddlewareBridge as d1, provideLocalEntityCatalog as d2, readPersistedEntityListInstanceCurrentView as d3, readPersistedEntityListInstanceFilters as d4, readPersistedEntityListStylingRules as d5, resetPagingForTreeChildrenLoad as d6, resolveAttachmentFieldPath as d7, resolveEntityCardBadgeColorValue as d8, resolveEntityCardHeaderValue as d9, resolveEntityMasterFieldStylingClass as da, resolveEntityMasterRecordStylingClass as db, resolveEntityMasterStylingClass as dc, resolveEntityPluginDetailPageOrder as dd, resolveFileUploaderEditDialog as de, resolveFileUploaderEntityScope as df, resolveLookupDisplayField as dg, resolveLookupDisplayTemplate as dh, resolveLookupEntityCacheKey as di, resolveLookupEntityKey as dj, resolveMasterInterfacePropertyOrder as dk, restoreEntityListExpandedRows as dl, runEntityMiddlewarePipeline as dm, runEntityQuery as dn, runEntityStorageMiddlewarePipeline as dp, searchResultDescriptionMiddleware as dq, searchResultDescriptionMiddlewareProvider as dr, shouldLoadEntityListStateFromStorage as ds, shouldResetEntityListStateOnRouteEntry as dt, traceEntityMasterList as du, watchNextDataSourceLoad as dv, attachmentNeedsHydration as e, ATTACHMENTS_PAGE_COMPONENT_KEY as f, AXMEntityCrudService as g, AXMEntityCrudServiceImpl as h, AXPCategoryTreeService as i, AXPClientLocalPluginModule as j, AXPCreateEntityCommand as k, AXPDataSeederService as l, AXPDeleteEntityCommand as m, newBulkExecutionId as n, AXPDomainQueryEntityDefinitionLoader as o, persistedAttachments as p, AXPEditFileUploaderCommand as q, resolveBulkFailureBody as r, settleAfterLoadingDialog as s, AXPEntityBulkPatchPerformService as t, AXPEntityCardComponent as u, AXPEntityCardFieldsResolver as v, watchBulkProgress as w, AXPEntityCardSelectActionName as x, AXPEntityCardSkeletonComponent as y, AXPEntityCategoryTreeSelectorComponent as z };
34106
+ //# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BTLgOdQN.mjs.map