@acorex/platform 20.9.19 → 20.9.20

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.
@@ -5491,6 +5491,8 @@ class AXPEntityMasterListViewModel {
5491
5491
  /** When true, pager changes are not persisted (programmatic UI sync). */
5492
5492
  this.skipListPagingPersistence = false;
5493
5493
  this.listPersistenceMode = null;
5494
+ /** Serializes user-setting updates for this entity list to avoid lost merges (e.g. filters vs paging). */
5495
+ this.settingsUpdateChain = Promise.resolve();
5494
5496
  this.events$ = new Subject();
5495
5497
  //****************** Views ******************//
5496
5498
  this.allViews = computed(() => {
@@ -5774,7 +5776,10 @@ class AXPEntityMasterListViewModel {
5774
5776
  return this.listPersistenceMode;
5775
5777
  }
5776
5778
  const value = await this.settings.get(AXPCommonSettings.EntityListPersistenceMode);
5777
- this.listPersistenceMode = normalizeEntityListPersistenceMode(value);
5779
+ const resolved = value != null && typeof value === 'object' && 'value' in value
5780
+ ? value.value
5781
+ : value;
5782
+ this.listPersistenceMode = normalizeEntityListPersistenceMode(resolved);
5778
5783
  return this.listPersistenceMode;
5779
5784
  }
5780
5785
  async shouldLoadPersistedListState() {
@@ -5923,17 +5928,41 @@ class AXPEntityMasterListViewModel {
5923
5928
  const wasExpanded = meta?.['expanded'] === true;
5924
5929
  this.updateExpandedRowId(rowId, !wasExpanded);
5925
5930
  }
5931
+ /**
5932
+ * User-applied filters to persist (excludes hidden view conditions and empty values).
5933
+ */
5934
+ getPersistableFilterQueries(queries = this.filterQueries()) {
5935
+ return queries.filter((f) => {
5936
+ if (f.hidden === true) {
5937
+ return false;
5938
+ }
5939
+ if (f.readOnly === true) {
5940
+ return false;
5941
+ }
5942
+ const value = f.value;
5943
+ if (value === undefined || value === null || value === '') {
5944
+ return false;
5945
+ }
5946
+ if (Array.isArray(value) && value.length === 0) {
5947
+ return false;
5948
+ }
5949
+ return true;
5950
+ });
5951
+ }
5952
+ enqueueSettingsUpdate(updateFn) {
5953
+ const run = () => this.settings.scope(AXPPlatformScope.User).update(this.settingEntityKey, updateFn);
5954
+ const next = this.settingsUpdateChain.then(run);
5955
+ this.settingsUpdateChain = next.catch(() => undefined);
5956
+ return next;
5957
+ }
5926
5958
  async saveSettings(changesType, data) {
5927
5959
  if (!(await this.shouldPersistListState())) {
5928
5960
  return;
5929
5961
  }
5930
- const updateSettings = (updateFn) => {
5931
- this.settings.scope(AXPPlatformScope.User).update(this.settingEntityKey, updateFn);
5932
- };
5933
5962
  switch (changesType) {
5934
5963
  case 'columnSizes': {
5935
5964
  const columnSizeData = data;
5936
- updateSettings((prev) => {
5965
+ await this.enqueueSettingsUpdate((prev) => {
5937
5966
  const field = columnSizeData.dataField.split('-')[1];
5938
5967
  const newSettings = { ...prev };
5939
5968
  const existingColumns = prev?.list?.views?.[this.view().name]?.columns;
@@ -5960,7 +5989,7 @@ class AXPEntityMasterListViewModel {
5960
5989
  }
5961
5990
  case 'columnOrders': {
5962
5991
  const orderedColumns = data;
5963
- updateSettings((prev) => {
5992
+ await this.enqueueSettingsUpdate((prev) => {
5964
5993
  const newSettings = { ...prev };
5965
5994
  set(newSettings, `list.views.${this.view().name}.columns`, orderedColumns.map((c) => ({
5966
5995
  name: c.column?.options?.dataPath ?? c.name,
@@ -5972,7 +6001,7 @@ class AXPEntityMasterListViewModel {
5972
6001
  break;
5973
6002
  }
5974
6003
  case 'view':
5975
- updateSettings((prev) => ({
6004
+ await this.enqueueSettingsUpdate((prev) => ({
5976
6005
  ...prev,
5977
6006
  list: {
5978
6007
  ...prev?.list,
@@ -5981,7 +6010,7 @@ class AXPEntityMasterListViewModel {
5981
6010
  }));
5982
6011
  break;
5983
6012
  case 'pageSize':
5984
- updateSettings((prev) => ({
6013
+ await this.enqueueSettingsUpdate((prev) => ({
5985
6014
  ...prev,
5986
6015
  list: {
5987
6016
  ...prev?.list,
@@ -6000,7 +6029,7 @@ class AXPEntityMasterListViewModel {
6000
6029
  }));
6001
6030
  break;
6002
6031
  case 'listPaging':
6003
- updateSettings((prev) => ({
6032
+ await this.enqueueSettingsUpdate((prev) => ({
6004
6033
  ...prev,
6005
6034
  list: {
6006
6035
  ...prev?.list,
@@ -6016,7 +6045,7 @@ class AXPEntityMasterListViewModel {
6016
6045
  }));
6017
6046
  break;
6018
6047
  case 'filters':
6019
- updateSettings((prev) => ({
6048
+ await this.enqueueSettingsUpdate((prev) => ({
6020
6049
  ...prev,
6021
6050
  list: {
6022
6051
  ...prev?.list,
@@ -6031,7 +6060,7 @@ class AXPEntityMasterListViewModel {
6031
6060
  }));
6032
6061
  break;
6033
6062
  case 'sorts':
6034
- updateSettings((prev) => ({
6063
+ await this.enqueueSettingsUpdate((prev) => ({
6035
6064
  ...prev,
6036
6065
  list: {
6037
6066
  ...prev?.list,
@@ -6046,7 +6075,7 @@ class AXPEntityMasterListViewModel {
6046
6075
  }));
6047
6076
  break;
6048
6077
  case 'expandedRows':
6049
- updateSettings((prev) => ({
6078
+ await this.enqueueSettingsUpdate((prev) => ({
6050
6079
  ...prev,
6051
6080
  list: {
6052
6081
  ...prev?.list,
@@ -6061,7 +6090,7 @@ class AXPEntityMasterListViewModel {
6061
6090
  }));
6062
6091
  break;
6063
6092
  case 'listLayout':
6064
- updateSettings((prev) => ({
6093
+ await this.enqueueSettingsUpdate((prev) => ({
6065
6094
  ...prev,
6066
6095
  list: {
6067
6096
  ...prev?.list,
@@ -6070,7 +6099,7 @@ class AXPEntityMasterListViewModel {
6070
6099
  }));
6071
6100
  break;
6072
6101
  case 'cardContentExpanded':
6073
- updateSettings((prev) => ({
6102
+ await this.enqueueSettingsUpdate((prev) => ({
6074
6103
  ...prev,
6075
6104
  list: {
6076
6105
  ...prev?.list,
@@ -6336,9 +6365,7 @@ class AXPEntityMasterListViewModel {
6336
6365
  }
6337
6366
  async syncFiltersFromRouteQueryParam(filtersJson) {
6338
6367
  const nextCanonical = AXPEntityMasterListViewModel.parseQueryParamFiltersToCanonical(filtersJson);
6339
- const currentCanonical = this.hasQueryParamsFilters
6340
- ? this.filtersQueryParamCanonical(this.filterQueries())
6341
- : null;
6368
+ const currentCanonical = this.filtersQueryParamCanonical(this.filterQueries());
6342
6369
  if (nextCanonical === currentCanonical) {
6343
6370
  return false;
6344
6371
  }
@@ -6855,12 +6882,12 @@ const AXPEntityListViewModelResolver = async (route, state, service = inject(AXP
6855
6882
  const entityName = route.paramMap.get('entity');
6856
6883
  try {
6857
6884
  const vm = await service.create(moduleName, entityName);
6858
- // Check if filters are provided in query params
6885
+ // URL `filters` are for one-off deep links only; persisted list state loads from user settings.
6859
6886
  const filtersParam = route.queryParamMap.get('filters');
6860
- if (filtersParam) {
6887
+ const shouldLoadPersisted = await vm.shouldLoadPersistedListState();
6888
+ if (filtersParam && !shouldLoadPersisted) {
6861
6889
  const applied = vm.applyFiltersFromQueryParams(filtersParam);
6862
6890
  if (applied) {
6863
- // Trigger filter and sort application
6864
6891
  await vm.applyFilterAndSort();
6865
6892
  }
6866
6893
  }
@@ -19522,11 +19549,74 @@ function resolveFileUploaderEntityScope(options, rowData, fieldFallback) {
19522
19549
  }
19523
19550
  return { name: entityName.trim(), id: entityId, field: field.trim() };
19524
19551
  }
19552
+ /**
19553
+ * Attachment field names registered by the attachments plugin (`extensions.attachments`)
19554
+ * or properties using the `attachments` widget interface.
19555
+ */
19556
+ function resolveEntityAttachmentFieldNames(def) {
19557
+ const fields = new Set();
19558
+ const attachCfg = def?.extensions?.attachments;
19559
+ if (attachCfg != null && typeof attachCfg === 'object') {
19560
+ for (const key of Object.keys(attachCfg)) {
19561
+ if (key.trim()) {
19562
+ fields.add(key);
19563
+ }
19564
+ }
19565
+ }
19566
+ const props = def?.properties ?? [];
19567
+ for (const prop of props) {
19568
+ if (prop?.name?.trim() && prop.schema?.interface?.type === 'attachments') {
19569
+ fields.add(prop.name);
19570
+ }
19571
+ }
19572
+ return fields;
19573
+ }
19574
+ /** True when a hydrated key path belongs to a lazy attachment plugin field (top-level property). */
19575
+ function isLazyAttachmentFieldPath(keyPath, lazyFields) {
19576
+ if (!lazyFields.size || !keyPath.trim()) {
19577
+ return false;
19578
+ }
19579
+ const root = keyPath.split(/[.[\]]/)[0];
19580
+ return lazyFields.has(root);
19581
+ }
19525
19582
  //#endregion
19526
19583
 
19527
19584
  /** Trace namespace for file-uploader attachment column, load/save, and hydration. */
19528
19585
  const FILE_UPLOADER_TRACE_NS = 'file-uploader-attachments';
19529
19586
 
19587
+ /**
19588
+ * Loads and hydrates entity attachment field values via `FileUploader:LoadFiles`.
19589
+ * Used when read middleware keeps storage refs and the UI mounts the attachments widget.
19590
+ */
19591
+ async function fetchHydratedEntityAttachments(queryExecutor, scope) {
19592
+ AXPDebugService.instance?.trace(FILE_UPLOADER_TRACE_NS, 'lazy-hydrate', 'Loading attachments on widget display', () => ({
19593
+ entity: scope.name,
19594
+ entityId: scope.id,
19595
+ field: scope.field,
19596
+ }));
19597
+ try {
19598
+ const result = await queryExecutor.fetch('FileUploader:LoadFiles', scope);
19599
+ const files = result?.files ?? [];
19600
+ AXPDebugService.instance?.trace(FILE_UPLOADER_TRACE_NS, 'lazy-hydrate', 'Attachments loaded on widget display', () => ({
19601
+ entity: scope.name,
19602
+ entityId: scope.id,
19603
+ field: scope.field,
19604
+ fileCount: files.length,
19605
+ fileNames: files.map((file) => file.name),
19606
+ }));
19607
+ return files;
19608
+ }
19609
+ catch (error) {
19610
+ AXPDebugService.instance?.warn(FILE_UPLOADER_TRACE_NS, 'lazy-hydrate', 'Failed to load attachments on widget display', () => ({
19611
+ entity: scope.name,
19612
+ entityId: scope.id,
19613
+ field: scope.field,
19614
+ error: error instanceof Error ? error.message : String(error),
19615
+ }));
19616
+ throw error;
19617
+ }
19618
+ }
19619
+
19530
19620
  class AXPFileUploaderLoadFilesQuery {
19531
19621
  constructor() {
19532
19622
  //#region ---- Services & Dependencies ----
@@ -19839,6 +19929,7 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
19839
19929
  this.hooks = inject(AXPHookService);
19840
19930
  this.fileActionsService = inject(AXPFileActionsService);
19841
19931
  this.commandExecutor = inject(AXPCommandExecutor);
19932
+ this.queryExecutor = inject(AXPQueryExecutor);
19842
19933
  this.toastService = inject(AXToastService);
19843
19934
  this.translateService = inject(AXTranslationService);
19844
19935
  //#region ---- Dirty tracking (deferred save pages) ----
@@ -19852,17 +19943,30 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
19852
19943
  /** Status before soft-delete; used for restore when baseline was not synced (section layout). */
19853
19944
  this.statusBeforeDelete = new Map();
19854
19945
  this.autoBaselineSynced = signal(false, ...(ngDevMode ? [{ debugName: "autoBaselineSynced" }] : /* istanbul ignore next */ []));
19946
+ this.hydrateRequestId = 0;
19855
19947
  /** Sync baseline from context when not wired by a deferred-save page (section layout). */
19856
19948
  this.baselineInitEffect = effect(() => {
19857
19949
  if (this.autoBaselineSynced()) {
19858
19950
  return;
19859
19951
  }
19860
19952
  const value = this.getValue();
19861
- if (value == null) {
19953
+ if (value == null || attachmentNeedsHydration(value)) {
19862
19954
  return;
19863
19955
  }
19864
19956
  this.syncBaseline(value);
19865
19957
  }, ...(ngDevMode ? [{ debugName: "baselineInitEffect" }] : /* istanbul ignore next */ []));
19958
+ /** Hydrate attachment refs when the widget is shown (read middleware keeps refs lazy). */
19959
+ this.lazyHydrateEffect = effect(() => {
19960
+ const value = this.getValue();
19961
+ if (!attachmentNeedsHydration(value)) {
19962
+ return;
19963
+ }
19964
+ const scope = resolveFileUploaderEntityScope(this.options(), this.contextService.snapshot(), resolveAttachmentFieldPath(this.options(), this.path));
19965
+ if (!scope?.id) {
19966
+ return;
19967
+ }
19968
+ void this.hydrateAttachments(scope);
19969
+ }, ...(ngDevMode ? [{ debugName: "lazyHydrateEffect" }] : /* istanbul ignore next */ []));
19866
19970
  //#endregion
19867
19971
  this.multiple = computed(() => this.options()['multiple'], ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
19868
19972
  this.acceptOverride = signal(undefined, ...(ngDevMode ? [{ debugName: "acceptOverride" }] : /* istanbul ignore next */ []));
@@ -19939,6 +20043,24 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
19939
20043
  this.configureFromHooks();
19940
20044
  this.loadActions();
19941
20045
  }
20046
+ async hydrateAttachments(scope) {
20047
+ const requestId = ++this.hydrateRequestId;
20048
+ try {
20049
+ const files = await fetchHydratedEntityAttachments(this.queryExecutor, scope);
20050
+ if (requestId !== this.hydrateRequestId) {
20051
+ return;
20052
+ }
20053
+ this.skipDirtyEvaluation = true;
20054
+ this.setValue(cloneDeep(files));
20055
+ this.skipDirtyEvaluation = false;
20056
+ this.syncBaseline(files);
20057
+ }
20058
+ catch {
20059
+ if (requestId !== this.hydrateRequestId) {
20060
+ return;
20061
+ }
20062
+ }
20063
+ }
19942
20064
  setValue(value) {
19943
20065
  super.setValue(value);
19944
20066
  if (this.skipDirtyEvaluation) {
@@ -20496,8 +20618,21 @@ var fileUploaderWidgetEdit_component = /*#__PURE__*/Object.freeze({
20496
20618
 
20497
20619
  class AXPFileUploaderWidgetViewComponent extends AXPValueWidgetComponent {
20498
20620
  constructor() {
20499
- super(...arguments);
20621
+ super();
20622
+ this.queryExecutor = inject(AXPQueryExecutor);
20623
+ this.hydrateRequestId = 0;
20500
20624
  this.files = computed(() => (this.getValue() ?? []).filter(file => file.status !== 'deleted') ?? [], ...(ngDevMode ? [{ debugName: "files" }] : /* istanbul ignore next */ []));
20625
+ effect(() => {
20626
+ const value = this.getValue();
20627
+ if (!attachmentNeedsHydration(value)) {
20628
+ return;
20629
+ }
20630
+ const scope = resolveFileUploaderEntityScope(this.options(), this.contextService.snapshot(), resolveAttachmentFieldPath(this.options(), this.path));
20631
+ if (!scope?.id) {
20632
+ return;
20633
+ }
20634
+ void this.hydrateAttachments(scope);
20635
+ });
20501
20636
  }
20502
20637
  get __class() {
20503
20638
  const cls = {};
@@ -20505,7 +20640,24 @@ class AXPFileUploaderWidgetViewComponent extends AXPValueWidgetComponent {
20505
20640
  cls[`ax-flex-1`] = true;
20506
20641
  return cls;
20507
20642
  }
20508
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFileUploaderWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
20643
+ async hydrateAttachments(scope) {
20644
+ const requestId = ++this.hydrateRequestId;
20645
+ try {
20646
+ const files = await fetchHydratedEntityAttachments(this.queryExecutor, scope);
20647
+ if (requestId !== this.hydrateRequestId) {
20648
+ return;
20649
+ }
20650
+ const path = this.fullPath();
20651
+ if (!path) {
20652
+ return;
20653
+ }
20654
+ this.contextService.update(path, files, { origin: 'system' });
20655
+ }
20656
+ catch {
20657
+ /* keep refs; popover / edit can retry */
20658
+ }
20659
+ }
20660
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFileUploaderWidgetViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20509
20661
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPFileUploaderWidgetViewComponent, isStandalone: true, selector: "axp-file-uploader-widget-view", host: { properties: { "class": "this.__class" } }, usesInheritance: true, ngImport: i0, template: `
20510
20662
  <axp-file-list [files]="files()" [readonly]="true"></axp-file-list>
20511
20663
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXUploaderModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "enableTitleDescription", "multiple", "look", "titleKey", "showLabel", "linksLayout", "files", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -20530,7 +20682,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
20530
20682
  ],
20531
20683
  inputs: [],
20532
20684
  }]
20533
- }], propDecorators: { __class: [{
20685
+ }], ctorParameters: () => [], propDecorators: { __class: [{
20534
20686
  type: HostBinding,
20535
20687
  args: ['class']
20536
20688
  }] } });
@@ -20698,10 +20850,12 @@ var index = /*#__PURE__*/Object.freeze({
20698
20850
  AXPFileUploaderWidgetEditComponent: AXPFileUploaderWidgetEditComponent,
20699
20851
  AXPFileUploaderWidgetService: AXPFileUploaderWidgetService,
20700
20852
  AXPFileUploaderWidgetViewComponent: AXPFileUploaderWidgetViewComponent,
20853
+ FILE_UPLOADER_TRACE_NS: FILE_UPLOADER_TRACE_NS,
20701
20854
  attachmentFieldCount: attachmentFieldCount,
20702
20855
  attachmentNeedsHydration: attachmentNeedsHydration,
20703
20856
  attachmentsSemanticallyEqual: attachmentsSemanticallyEqual,
20704
20857
  committedAttachments: committedAttachments,
20858
+ fetchHydratedEntityAttachments: fetchHydratedEntityAttachments,
20705
20859
  fingerprintAttachmentItem: fingerprintAttachmentItem,
20706
20860
  fingerprintAttachments: fingerprintAttachments,
20707
20861
  hasFileUploaderTitleOrDescriptionFields: hasFileUploaderTitleOrDescriptionFields,
@@ -20711,9 +20865,11 @@ var index = /*#__PURE__*/Object.freeze({
20711
20865
  isAttachmentStorageRef: isAttachmentStorageRef,
20712
20866
  isFileListItem: isFileListItem,
20713
20867
  isFileUploaderEditDialogAuto: isFileUploaderEditDialogAuto,
20868
+ isLazyAttachmentFieldPath: isLazyAttachmentFieldPath,
20714
20869
  normalizeEntityFieldToFileList: normalizeEntityFieldToFileList,
20715
20870
  persistedAttachments: persistedAttachments,
20716
20871
  resolveAttachmentFieldPath: resolveAttachmentFieldPath,
20872
+ resolveEntityAttachmentFieldNames: resolveEntityAttachmentFieldNames,
20717
20873
  resolveFileUploaderEditDialog: resolveFileUploaderEditDialog,
20718
20874
  resolveFileUploaderEntityScope: resolveFileUploaderEntityScope
20719
20875
  });
@@ -26508,5 +26664,5 @@ function detectEntityChanges(oldObj, newObj) {
26508
26664
  * Generated bundle index. Do not edit.
26509
26665
  */
26510
26666
 
26511
- export { ATTACHMENTS_PAGE_COMPONENT_KEY, AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEditFileUploaderCommand, AXPEntitiesListDataSourceDefinition, AXPEntityApplyUpdatesAction, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorRowActionsService, AXPEntityDataSelectorService, AXPEntityDefinitionProviderWidget, AXPEntityDefinitionProviderWidgetEditComponent, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityFormBuilderService, AXPEntityListPersistenceModeDefault, AXPEntityListTableService, AXPEntityListToolbarService, AXPEntityListViewCardFieldViewModel, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListCardSelectActionName, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityPreloadFiltersContainerComponent, AXPEntityPreloadFiltersViewModel, AXPEntityPreloadFiltersViewModelResolver, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPFileListComponent, AXPFileUploaderLoadFilesQuery, AXPFileUploaderSaveFilesCommand, AXPFileUploaderWidget, AXPFileUploaderWidgetColumnComponent, AXPFileUploaderWidgetEditComponent, AXPFileUploaderWidgetService, AXPFileUploaderWidgetViewComponent, AXPGetEntityDetailsQuery, AXPLayoutOrderingConfigService, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPMultiSourceDefinitionProviderContext, AXPMultiSourceDefinitionProviderService, AXPMultiSourceFederatedSearchService, AXPMultiSourceSelectorComponent, AXPMultiSourceSelectorService, AXPMultiSourceSelectorWidget, AXPMultiSourceSelectorWidgetColumnComponent, AXPMultiSourceSelectorWidgetEditComponent, AXPMultiSourceSelectorWidgetViewComponent, AXPMultiSourceType, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPRelatedColumnEnrichmentService, AXPRelatedColumnMetadataResolver, AXPSelectorStructureWidget, AXPSelectorStructureWidgetColumnComponent, AXPSelectorStructureWidgetEditComponent, AXPSelectorStructureWidgetViewComponent, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXPTruncatedBreadcrumbComponent, AXPUpdateEntityCommand, AXPViewEntityDetailsCommand, AXP_APPEARANCE_SECTION_ORDER, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY, AXP_CLASSIFICATION_SECTION_ORDER, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, AXP_MULTI_SOURCE_DEFINITION_PROVIDER, DEFAULT_COLUMN_ORDER, DEFAULT_PAIR_SPAN_RULES, DEFAULT_PROPERTY_ORDER, DEFAULT_SECTION_ORDER, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY, EntityBuilder, EntityDataAccessor, actionExists, applyDataSourcePagingWithoutLoad, attachmentFieldCount, attachmentNeedsHydration, attachmentsPlugin, attachmentsSemanticallyEqual, axpCreateEntityAiToolInputDefaults, axpCreateEntityCommandDefinition, canPersistEntityListState, cloneLayoutArrays, columnOrderingMiddleware, columnOrderingMiddlewareProvider, columnWidthMiddleware, columnWidthMiddlewareProvider, commandMessageTextForError, committedAttachments, computeEntityAggregates, createColumnOrderingMiddlewareProvider, createLayoutOrderingMiddlewareProvider, createModifierContext, defaultCardLayoutMiddleware, defaultCardLayoutMiddlewareProvider, defaultMultiLanguageMiddleware, defaultMultiLanguageMiddlewareProvider, detectEntityChanges, ensureLayoutPropertyView, ensureLayoutSection, ensureListActions, eventDispatchMiddleware, filterSortEntityRows, findEntityListRowDataInTree, fingerprintAttachmentItem, fingerprintAttachments, formatLookupItemDisplay, formatLookupItemDisplayAsync, getDataSourcePageIndex, getEntityListRowId, getMasterInterfacePropertySortKey, hasFileUploaderTitleOrDescriptionFields, hydrateAttachmentFieldToFileList, isAXPMiddlewareAbortError, isAttachmentFieldPresentOnRow, isAttachmentListEntry, isAttachmentStorageRef, isCategoryEntity, isCategoryFilter, isFileListItem, isFileUploaderEditDialogAuto, isLegacyEntityDataSelectorOptions, layoutOrderingMiddlewareFactory, layoutOrderingMiddlewareProvider, mapEntityStorageErrorToCommandResult, mapLegacyEntityDataSelectorOptions, normalizeEntityDataSelectorOptions, normalizeEntityFieldToFileList, normalizeEntityListPersistenceMode, normalizeListPaging, persistedAttachments, provideEntity, resolveAttachmentFieldPath, resolveEntityPluginDetailPageOrder, resolveFileUploaderEditDialog, resolveFileUploaderEntityScope, resolveLookupDisplayField, resolveLookupDisplayTemplate, restoreEntityListExpandedRows, runEntityQuery, searchResultDescriptionMiddleware, searchResultDescriptionMiddlewareProvider, shouldLoadEntityListStateFromStorage, shouldResetEntityListStateOnRouteEntry };
26667
+ export { ATTACHMENTS_PAGE_COMPONENT_KEY, AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCategoryTreeService, AXPCreateEntityCommand, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEditFileUploaderCommand, AXPEntitiesListDataSourceDefinition, AXPEntityApplyUpdatesAction, AXPEntityCategoryTreeSelectorComponent, AXPEntityCategoryWidget, AXPEntityCategoryWidgetColumnComponent, AXPEntityCategoryWidgetEditComponent, AXPEntityCategoryWidgetViewComponent, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorRowActionsService, AXPEntityDataSelectorService, AXPEntityDefinitionProviderWidget, AXPEntityDefinitionProviderWidgetEditComponent, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityFormBuilderService, AXPEntityListPersistenceModeDefault, AXPEntityListTableService, AXPEntityListToolbarService, AXPEntityListViewCardFieldViewModel, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListCardSelectActionName, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityPreloadFiltersContainerComponent, AXPEntityPreloadFiltersViewModel, AXPEntityPreloadFiltersViewModelResolver, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPFileListComponent, AXPFileUploaderLoadFilesQuery, AXPFileUploaderSaveFilesCommand, AXPFileUploaderWidget, AXPFileUploaderWidgetColumnComponent, AXPFileUploaderWidgetEditComponent, AXPFileUploaderWidgetService, AXPFileUploaderWidgetViewComponent, AXPGetEntityDetailsQuery, AXPLayoutOrderingConfigService, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPMultiSourceDefinitionProviderContext, AXPMultiSourceDefinitionProviderService, AXPMultiSourceFederatedSearchService, AXPMultiSourceSelectorComponent, AXPMultiSourceSelectorService, AXPMultiSourceSelectorWidget, AXPMultiSourceSelectorWidgetColumnComponent, AXPMultiSourceSelectorWidgetEditComponent, AXPMultiSourceSelectorWidgetViewComponent, AXPMultiSourceType, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPRelatedColumnEnrichmentService, AXPRelatedColumnMetadataResolver, AXPSelectorStructureWidget, AXPSelectorStructureWidgetColumnComponent, AXPSelectorStructureWidgetEditComponent, AXPSelectorStructureWidgetViewComponent, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXPTruncatedBreadcrumbComponent, AXPUpdateEntityCommand, AXPViewEntityDetailsCommand, AXP_APPEARANCE_SECTION_ORDER, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY, AXP_CLASSIFICATION_SECTION_ORDER, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, AXP_MULTI_SOURCE_DEFINITION_PROVIDER, DEFAULT_COLUMN_ORDER, DEFAULT_PAIR_SPAN_RULES, DEFAULT_PROPERTY_ORDER, DEFAULT_SECTION_ORDER, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY, EntityBuilder, EntityDataAccessor, FILE_UPLOADER_TRACE_NS, actionExists, applyDataSourcePagingWithoutLoad, attachmentFieldCount, attachmentNeedsHydration, attachmentsPlugin, attachmentsSemanticallyEqual, axpCreateEntityAiToolInputDefaults, axpCreateEntityCommandDefinition, canPersistEntityListState, cloneLayoutArrays, columnOrderingMiddleware, columnOrderingMiddlewareProvider, columnWidthMiddleware, columnWidthMiddlewareProvider, commandMessageTextForError, committedAttachments, computeEntityAggregates, createColumnOrderingMiddlewareProvider, createLayoutOrderingMiddlewareProvider, createModifierContext, defaultCardLayoutMiddleware, defaultCardLayoutMiddlewareProvider, defaultMultiLanguageMiddleware, defaultMultiLanguageMiddlewareProvider, detectEntityChanges, ensureLayoutPropertyView, ensureLayoutSection, ensureListActions, eventDispatchMiddleware, fetchHydratedEntityAttachments, filterSortEntityRows, findEntityListRowDataInTree, fingerprintAttachmentItem, fingerprintAttachments, formatLookupItemDisplay, formatLookupItemDisplayAsync, getDataSourcePageIndex, getEntityListRowId, getMasterInterfacePropertySortKey, hasFileUploaderTitleOrDescriptionFields, hydrateAttachmentFieldToFileList, isAXPMiddlewareAbortError, isAttachmentFieldPresentOnRow, isAttachmentListEntry, isAttachmentStorageRef, isCategoryEntity, isCategoryFilter, isFileListItem, isFileUploaderEditDialogAuto, isLazyAttachmentFieldPath, isLegacyEntityDataSelectorOptions, layoutOrderingMiddlewareFactory, layoutOrderingMiddlewareProvider, mapEntityStorageErrorToCommandResult, mapLegacyEntityDataSelectorOptions, normalizeEntityDataSelectorOptions, normalizeEntityFieldToFileList, normalizeEntityListPersistenceMode, normalizeListPaging, persistedAttachments, provideEntity, resolveAttachmentFieldPath, resolveEntityAttachmentFieldNames, resolveEntityPluginDetailPageOrder, resolveFileUploaderEditDialog, resolveFileUploaderEntityScope, resolveLookupDisplayField, resolveLookupDisplayTemplate, restoreEntityListExpandedRows, runEntityQuery, searchResultDescriptionMiddleware, searchResultDescriptionMiddlewareProvider, shouldLoadEntityListStateFromStorage, shouldResetEntityListStateOnRouteEntry };
26512
26668
  //# sourceMappingURL=acorex-platform-layout-entity.mjs.map