@acorex-platform/framework-client 0.0.10 → 0.0.14

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 (119) hide show
  1. package/fesm2022/acorex-platform-framework-client-auth.mjs +285 -50
  2. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-CbzOYCnI.mjs → acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs} +55 -36
  4. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-framework-client-common-settings-dialog.helper-DQNOCRL6.mjs +29 -0
  6. package/fesm2022/acorex-platform-framework-client-common-settings-dialog.helper-DQNOCRL6.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-framework-client-common.mjs +1576 -408
  8. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-framework-client-core.mjs +561 -25
  10. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +154 -42
  12. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CWVU3wXL.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs} +7 -7
  14. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs +77 -0
  16. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +2378 -1274
  18. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +92 -84
  20. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  21. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-CxBxxpmA.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs} +3 -3
  22. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-CxBxxpmA.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs.map} +1 -1
  23. package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-l0JAHKIH.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs} +6 -6
  24. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs +256 -0
  26. package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +17599 -17114
  28. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +120 -70
  30. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  31. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +302 -263
  32. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  33. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CpkWwygb.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs} +2 -2
  34. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-framework-client-layout-widgets-image-preview.popup-C_EPAvCU.mjs → acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs} +3 -3
  36. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-CmtTq2Mt.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs} +5 -5
  38. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-CmtTq2Mt.mjs.map → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs.map} +1 -1
  39. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DSx0E3NV.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs} +3 -3
  40. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DSx0E3NV.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs.map} +1 -1
  41. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-DdfcGV1C.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs} +10 -10
  42. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs.map +1 -0
  43. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs} +5 -5
  44. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs.map +1 -0
  45. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs +61 -0
  46. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs.map +1 -0
  47. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +2218 -1504
  48. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
  49. package/fesm2022/acorex-platform-framework-client-realtime.mjs +227 -0
  50. package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-framework-client-runtime.mjs +201 -13
  52. package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
  53. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs +158 -0
  54. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs +119 -0
  56. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs.map +1 -0
  57. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-D1a7UI71.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs} +5 -6
  58. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs +48 -0
  60. package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs.map +1 -0
  61. package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs +42 -0
  62. package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs.map +1 -0
  63. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs +19 -0
  64. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs.map +1 -0
  65. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +123 -96
  66. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  67. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CXSGiTCK.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs} +3 -3
  68. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs.map +1 -0
  69. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BY5clQ1J.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs} +3 -3
  70. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs.map +1 -0
  71. package/fesm2022/{acorex-platform-framework-client-themes-shared-settings.provider-DEL2YOTP.mjs → acorex-platform-framework-client-themes-shared-settings.provider-D2XPkc71.mjs} +11 -2
  72. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-D2XPkc71.mjs.map +1 -0
  73. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BXl8u4Yp.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs} +7 -7
  74. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs.map +1 -0
  75. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-i2sOOkVj.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs} +7 -7
  76. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs.map +1 -0
  77. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +124 -112
  78. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  79. package/fesm2022/acorex-platform-framework-client-workflow.mjs +26 -483
  80. package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
  81. package/package.json +14 -9
  82. package/types/acorex-platform-framework-client-auth.d.ts +76 -5
  83. package/types/acorex-platform-framework-client-common.d.ts +499 -129
  84. package/types/acorex-platform-framework-client-core.d.ts +291 -10
  85. package/types/acorex-platform-framework-client-layout-builder.d.ts +81 -31
  86. package/types/acorex-platform-framework-client-layout-components.d.ts +295 -41
  87. package/types/acorex-platform-framework-client-layout-entity.d.ts +1895 -1743
  88. package/types/acorex-platform-framework-client-layout-views.d.ts +8 -18
  89. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +20 -35
  90. package/types/acorex-platform-framework-client-layout-widgets.d.ts +167 -33
  91. package/types/acorex-platform-framework-client-realtime.d.ts +100 -0
  92. package/types/acorex-platform-framework-client-runtime.d.ts +60 -2
  93. package/types/acorex-platform-framework-client-themes-default.d.ts +4 -48
  94. package/types/acorex-platform-framework-client-workflow.d.ts +16 -127
  95. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CbzOYCnI.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CWVU3wXL.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-l0JAHKIH.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CpkWwygb.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-DdfcGV1C.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-B5kSWxGk.mjs +0 -34
  103. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-B5kSWxGk.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-DnTHwsDJ.mjs +0 -160
  105. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-DnTHwsDJ.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BpR9g6QS.mjs +0 -121
  107. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BpR9g6QS.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-D1a7UI71.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-D--_MIar.mjs +0 -48
  110. package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-D--_MIar.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-Byyqk8pH.mjs +0 -42
  112. package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-Byyqk8pH.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DR6G8gPC.mjs +0 -19
  114. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DR6G8gPC.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CXSGiTCK.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BY5clQ1J.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-DEL2YOTP.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BXl8u4Yp.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-i2sOOkVj.mjs.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { signal, computed, effect, untracked, Injectable, inject, ElementRef, DestroyRef, InjectionToken, EventEmitter, Injector, ChangeDetectorRef, ViewChild, Input, Output, ChangeDetectionStrategy, Component, input, output, ViewContainerRef, Directive, NgModule } from '@angular/core';
3
- import { isSelectionValueEqual, isFormValueEqual, extractValue, getSmart, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';
3
+ import { isSelectionValueEqual, isFormValueEqual, extractValue, getSmart, summarizeFormContextDirtyDiff, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';
4
4
  import { AXPPageStatus, AXPWidgetStatus, AXP_WIDGET_TOKEN, AXP_WIDGET_COLUMN_TOKEN, createStringProperty, createBooleanProperty, createSelectProperty, createNumberProperty, cloneProperty } from '@acorex-platform/framework-shared/widget-core';
5
5
  import { convertArrayToDataSource, AXDataSource, AX_STYLE_COLOR_TYPES, AX_STYLE_LOOK_TYPES } from '@acorex/cdk/common';
6
- import { AXPContextStore, AXPDataSourceDefinitionProviderService, AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';
6
+ import { AXPContextStore, AXPDataSourceQueryService, AXPExpressionEvaluatorService, AXPDebugService, FORM_DIRTY_TRACE_NS, OVERLAY_WIDGET_SETTLE_TRACE_NS } from '@acorex-platform/framework-client/core';
7
7
  import { set, get, cloneDeep, isEqual, isNil, isUndefined, isObjectLike, merge, sum, isEmpty, isString } from 'lodash-es';
8
8
  import { Subject, BehaviorSubject, filter } from 'rxjs';
9
9
  import * as i1$1 from '@acorex/components/skeleton';
@@ -15,6 +15,7 @@ import * as i1 from '@angular/common';
15
15
  import { CommonModule, NgComponentOutlet } from '@angular/common';
16
16
  import { AXDataTableColumnComponent, AXBaseDataTable } from '@acorex/components/data-table';
17
17
  import { AXUnsubscriber } from '@acorex/core/utils';
18
+ export { AXP_WIDGETS_ACTION_CATEGORY, AXP_WIDGETS_ACTION_SUB_CONTROLS, AXP_WIDGETS_ADVANCE_CATEGORY, AXP_WIDGETS_ADVANCE_SUB_DATA, AXP_WIDGETS_ADVANCE_SUB_INPUT, AXP_WIDGETS_ADVANCE_SUB_MEDIA, AXP_WIDGETS_ADVANCE_SUB_TOOLS, AXP_WIDGETS_AI_CATEGORY, AXP_WIDGETS_CATEGORIES, AXP_WIDGETS_EDITOR_CATEGORY, AXP_WIDGETS_EDITOR_SUB_CHOICE, AXP_WIDGETS_EDITOR_SUB_COMPOSITE, AXP_WIDGETS_EDITOR_SUB_CONFIG, AXP_WIDGETS_EDITOR_SUB_DATETIME, AXP_WIDGETS_EDITOR_SUB_NUMERIC, AXP_WIDGETS_EDITOR_SUB_RICH, AXP_WIDGETS_EDITOR_SUB_TEXT_INPUTS, AXP_WIDGETS_EDITOR_SUB_VISUAL, AXP_WIDGETS_LAYOUT_CATEGORY, AXP_WIDGETS_LAYOUT_SUB_GRID, AXP_WIDGETS_LAYOUT_SUB_LISTS, AXP_WIDGETS_LAYOUT_SUB_SHELL, AXP_WIDGETS_LAYOUT_SUB_SURFACES, AXP_WIDGETS_LAYOUT_SUB_TABS, AXP_WIDGETS_LAYOUT_SUB_UTILITY, normalizeWidgetCategories } from '@acorex-platform/framework-shared/runtime';
18
19
 
19
20
  class AXPWidgetCoreElement {
20
21
  api() {
@@ -487,14 +488,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
487
488
  class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
488
489
  constructor() {
489
490
  super(...arguments);
490
- this.dataService = inject(AXPDataSourceDefinitionProviderService);
491
+ this.registryDataSourceQuery = inject(AXPDataSourceQueryService);
491
492
  this.textField = computed(() => this.options()['textField'] ?? 'title', ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
492
493
  this.valueField = computed(() => this.options()['valueField'] ?? 'id', ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
493
494
  this.textTemplate = computed(() => isNil(this.options()['textTemplate'])
494
495
  ? undefined
495
496
  : this.options()['textTemplate'].replace(/{/g, '{{').replace(/}/g, '}}'), ...(ngDevMode ? [{ debugName: "textTemplate" }] : /* istanbul ignore next */ []));
496
497
  this.dataSource = signal(convertArrayToDataSource([]), ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
498
+ /** Registry datasource name from options, when options.dataSource is a string or `{ id }` object. */
499
+ this.registryDataSourceName = computed(() => {
500
+ const rawValue = this.options()['dataSource'];
501
+ if (typeof rawValue === 'string') {
502
+ return rawValue;
503
+ }
504
+ if (rawValue && typeof rawValue === 'object' && 'id' in rawValue) {
505
+ return String(rawValue['id']);
506
+ }
507
+ return null;
508
+ }, ...(ngDevMode ? [{ debugName: "registryDataSourceName" }] : /* istanbul ignore next */ []));
497
509
  this.selectedItems = signal([], ...(ngDevMode ? [{ debugName: "selectedItems" }] : /* istanbul ignore next */ []));
510
+ /** Reactive flag: registry datasource finished resolving (success or failure). */
511
+ this.registryDataSourceReady = signal(false, ...(ngDevMode ? [{ debugName: "registryDataSourceReady" }] : /* istanbul ignore next */ []));
512
+ /** Reactive bump to reload registry-backed datasources (e.g. after locale change). */
513
+ this.registryRefreshEpoch = signal(0, ...(ngDevMode ? [{ debugName: "registryRefreshEpoch" }] : /* istanbul ignore next */ []));
498
514
  //#region ---- DataSource Loading Effect ----
499
515
  /**
500
516
  * Track the last loaded string dataSource reference to prevent infinite loops
@@ -503,9 +519,14 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
503
519
  this.lastStringDataSourceRef = null;
504
520
  this.rf = effect(async () => {
505
521
  const rawValue = this.options()['dataSource'];
522
+ const registryId = this.registryDataSourceName();
523
+ this.registryRefreshEpoch();
506
524
  // For string datasources: prevent infinite loop by checking reference
507
525
  if (typeof rawValue === 'string') {
508
526
  if (rawValue === this.lastStringDataSourceRef) {
527
+ if (registryId) {
528
+ this.registryDataSourceReady.set(true);
529
+ }
509
530
  return;
510
531
  }
511
532
  this.lastStringDataSourceRef = rawValue;
@@ -514,6 +535,9 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
514
535
  // Reset string reference when dataSource changes to non-string
515
536
  this.lastStringDataSourceRef = null;
516
537
  }
538
+ if (registryId) {
539
+ this.registryDataSourceReady.set(false);
540
+ }
517
541
  this.beginHydration();
518
542
  try {
519
543
  // Process dataSource creation in untracked context
@@ -523,6 +547,7 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
523
547
  if (!isEqual(rawValue.config, this.dataSource().config)) {
524
548
  this.dataSource.set(rawValue);
525
549
  }
550
+ this.registryDataSourceReady.set(true);
526
551
  }
527
552
  // static array datasource - always recreate when options change
528
553
  else if (Array.isArray(rawValue)) {
@@ -545,35 +570,24 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
545
570
  },
546
571
  });
547
572
  this.dataSource.set(ds);
573
+ this.registryDataSourceReady.set(true);
548
574
  }
549
575
  // resolve data source by name (string or object with id)
550
- else if (rawValue && (typeof rawValue == 'string' || typeof rawValue == 'object')) {
551
- const id = typeof rawValue == 'object' ? rawValue['id'] : rawValue;
552
- const c = await this.dataService.get(id);
553
- if (this.mode == 'designer' && c?.samples?.length) {
554
- this.dataSource.set(convertArrayToDataSource(c.samples, {
555
- key: this.valueField(),
556
- pageSize: 500,
557
- }));
576
+ else if (registryId) {
577
+ const queryOptions = this.buildRegistryQueryOptions();
578
+ const result = await this.registryDataSourceQuery.resolve(registryId, queryOptions);
579
+ if (result.dataSource) {
580
+ this.dataSource.set(this.isolateRegistryDataSource(result.dataSource));
558
581
  }
559
582
  else {
560
- const ds = c?.source();
561
- if (ds && ds instanceof Promise) {
562
- const d = await ds;
563
- this.dataSource.set(d);
564
- }
565
- else if (ds) {
566
- this.dataSource.set(ds);
567
- }
568
- // empty datasource
569
- else {
570
- this.dataSource.set(convertArrayToDataSource([]));
571
- }
583
+ this.dataSource.set(convertArrayToDataSource([]));
572
584
  }
585
+ this.registryDataSourceReady.set(true);
573
586
  }
574
587
  // empty datasource
575
588
  else {
576
589
  this.dataSource.set(convertArrayToDataSource([]));
590
+ this.registryDataSourceReady.set(true);
577
591
  }
578
592
  });
579
593
  }
@@ -581,25 +595,69 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
581
595
  this.endHydration();
582
596
  }
583
597
  }, ...(ngDevMode ? [{ debugName: "rf" }] : /* istanbul ignore next */ []));
584
- this.effect2 = effect(async () => {
585
- this.beginHydration();
586
- try {
587
- const value = this.getValue();
588
- const items = [];
589
- if (Array.isArray(value)) {
590
- items.push(...(await Promise.all(value.map((item) => this.extractItem(item)))));
598
+ this.effect2 = effect(() => {
599
+ const registryName = this.registryDataSourceName();
600
+ const value = this.resolveSelectedItemsValue();
601
+ const registryReady = this.registryDataSourceReady();
602
+ this.dataSource();
603
+ if (registryName && !registryReady) {
604
+ return;
605
+ }
606
+ const resolveSelectedItems = async () => {
607
+ this.beginHydration();
608
+ try {
609
+ const items = [];
610
+ if (Array.isArray(value)) {
611
+ items.push(...(await Promise.all(value.map((item) => this.extractItem(item)))));
612
+ }
613
+ else {
614
+ items.push(await this.extractItem(value));
615
+ }
616
+ this.selectedItems.set(items.filter((c) => c != null));
591
617
  }
592
- else {
593
- items.push(await this.extractItem(value));
618
+ finally {
619
+ this.endHydration();
594
620
  }
595
- this.selectedItems.set(items.filter((c) => c != null));
596
- }
597
- finally {
598
- this.endHydration();
599
- }
621
+ };
622
+ void resolveSelectedItems();
600
623
  }, ...(ngDevMode ? [{ debugName: "effect2" }] : /* istanbul ignore next */ []));
601
624
  }
625
+ buildRegistryQueryOptions() {
626
+ return {
627
+ valueField: this.valueField(),
628
+ useSamples: this.mode === 'designer',
629
+ };
630
+ }
602
631
  //#endregion
632
+ /**
633
+ * Registry datasources are cached globally; each widget needs its own {@link AXDataSource}
634
+ * instance so per-widget filters (e.g. cascade parent id) do not leak across fields.
635
+ */
636
+ isolateRegistryDataSource(source) {
637
+ const config = source.config;
638
+ if (!config?.load) {
639
+ return source;
640
+ }
641
+ const originalLoad = config.load.bind(source);
642
+ const originalByKey = config.byKey?.bind(source);
643
+ return new AXDataSource({
644
+ pageSize: config.pageSize,
645
+ key: config.key,
646
+ load: (event) => originalLoad(event),
647
+ byKey: originalByKey ? (key) => originalByKey(key) : undefined,
648
+ });
649
+ }
650
+ /** Invalidates cached registry datasource and forces a reload on the next effect run. */
651
+ refreshRegistryDataSource() {
652
+ const registryId = this.registryDataSourceName();
653
+ if (!registryId) {
654
+ return;
655
+ }
656
+ this.registryDataSourceQuery.invalidate(registryId);
657
+ this.lastStringDataSourceRef = null;
658
+ this.registryDataSourceReady.set(false);
659
+ this.registryRefreshEpoch.update((epoch) => epoch + 1);
660
+ }
603
661
  async extractItem(item) {
604
662
  if (isNil(item)) {
605
663
  return null;
@@ -608,6 +666,13 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
608
666
  return item;
609
667
  }
610
668
  const key = extractValue(item, this.valueField());
669
+ const registryName = this.registryDataSourceName();
670
+ if (registryName) {
671
+ const found = await this.registryDataSourceQuery.queryByKey(registryName, key, this.buildRegistryQueryOptions());
672
+ if (found) {
673
+ return found;
674
+ }
675
+ }
611
676
  const ds = this.dataSource();
612
677
  if (ds.config?.byKey) {
613
678
  const found = await ds.config?.byKey(key);
@@ -630,12 +695,7 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
630
695
  resolveSelectedItemsValue() {
631
696
  return this.getValue();
632
697
  }
633
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
634
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetComponent }); }
635
698
  }
636
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetComponent, decorators: [{
637
- type: Injectable
638
- }] });
639
699
  class AXPColumnWidgetComponent {
640
700
  constructor() {
641
701
  this.token = inject(AXP_WIDGET_COLUMN_TOKEN);
@@ -708,14 +768,14 @@ class AXPBoxModelLayoutWidgetComponent extends AXPLayoutBaseWidgetComponent {
708
768
  }, ...(ngDevMode ? [{ debugName: "inlineStyle" }] : /* istanbul ignore next */ []));
709
769
  this.blockClass = computed(() => {
710
770
  return {
711
- 'ax-block': true,
712
- 'ax-w-full': true,
771
+ block: true,
772
+ 'w-full': true,
713
773
  // 'ax-widget-outline': true,
714
774
  };
715
775
  }, ...(ngDevMode ? [{ debugName: "blockClass" }] : /* istanbul ignore next */ []));
716
776
  this.inlineClass = computed(() => {
717
777
  return {
718
- 'ax-inline-block': true,
778
+ 'inline-block': false,
719
779
  };
720
780
  }, ...(ngDevMode ? [{ debugName: "inlineClass" }] : /* istanbul ignore next */ []));
721
781
  }
@@ -785,8 +845,8 @@ class AXPFlexBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent
785
845
  this.hostFlexClass = computed(() => {
786
846
  return {
787
847
  ...this.blockClass(),
788
- 'ax-flex': true,
789
- 'ax-h-full': true,
848
+ 'flex': true,
849
+ 'h-full': true,
790
850
  };
791
851
  }, ...(ngDevMode ? [{ debugName: "hostFlexClass" }] : /* istanbul ignore next */ []));
792
852
  this.hostClass = computed(() => {
@@ -889,18 +949,18 @@ class AXPGridBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent
889
949
  this.hostGridClass = computed(() => {
890
950
  const cls = {
891
951
  ...this.inlineClass(),
892
- 'ax-grid': true,
952
+ 'grid': true,
893
953
  };
894
954
  const g = this.grid()?.default;
895
955
  if (g?.columns)
896
- cls[`lg:ax-grid-cols-${g.columns}`] = true;
897
- // if (g?.rows) cls[`lg:ax-grid-rows-${g.rows}`] = true;
956
+ cls[`lg:grid-cols-${g.columns}`] = true;
957
+ // if (g?.rows) cls[`lg:grid-rows-${g.rows}`] = true;
898
958
  if (g?.justifyItems)
899
- cls[`lg:ax-justify-items-${g.justifyItems}`] = true;
959
+ cls[`lg:justify-items-${g.justifyItems}`] = true;
900
960
  if (g?.alignItems)
901
- cls[`lg:ax-align-items-${g.alignItems}`] = true;
961
+ cls[`lg:align-items-${g.alignItems}`] = true;
902
962
  if (g?.autoFlow)
903
- cls[`lg:ax-grid-flow-${g.autoFlow}`] = true;
963
+ cls[`lg:grid-flow-${g.autoFlow}`] = true;
904
964
  return cls;
905
965
  }, ...(ngDevMode ? [{ debugName: "hostGridClass" }] : /* istanbul ignore next */ []));
906
966
  this.hostClass = computed(() => this.hostGridClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
@@ -930,20 +990,20 @@ class AXPGridItemBaseLayoutWidgetComponent extends AXPFlexBaseLayoutWidgetCompon
930
990
  const cls = { ...this.hostFlexClass() };
931
991
  const g = this.gridItem();
932
992
  // Mobile-first: full width on small screens so items stack vertically and don't overflow
933
- cls['ax-col-span-12'] = true;
993
+ cls['col-span-12'] = true;
934
994
  // Large screens: apply defined placement so multi-column layout works on desktop
935
995
  if (g?.colSpan)
936
- cls[`lg:ax-col-span-${g.colSpan}`] = true;
996
+ cls[`lg:col-span-${g.colSpan}`] = true;
937
997
  if (g?.colStart)
938
- cls[`lg:ax-col-start-${g.colStart}`] = true;
998
+ cls[`lg:col-start-${g.colStart}`] = true;
939
999
  if (g?.colEnd)
940
- cls[`lg:ax-col-end-${g.colEnd}`] = true;
1000
+ cls[`lg:col-end-${g.colEnd}`] = true;
941
1001
  if (g?.rowSpan)
942
- cls[`lg:ax-row-span-${g.rowSpan}`] = true;
1002
+ cls[`lg:row-span-${g.rowSpan}`] = true;
943
1003
  if (g?.rowStart)
944
- cls[`lg:ax-row-start-${g.rowStart}`] = true;
1004
+ cls[`lg:row-start-${g.rowStart}`] = true;
945
1005
  if (g?.rowEnd)
946
- cls[`lg:ax-row-end-${g.rowEnd}`] = true;
1006
+ cls[`lg:row-end-${g.rowEnd}`] = true;
947
1007
  return cls;
948
1008
  }, ...(ngDevMode ? [{ debugName: "hostGridItemClass" }] : /* istanbul ignore next */ []));
949
1009
  this.hostClass = computed(() => this.hostGridItemClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
@@ -1195,7 +1255,9 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1195
1255
  return this.normalizeColumnAlignment(align);
1196
1256
  }
1197
1257
  if (typeof align === 'object' && !Array.isArray(align)) {
1198
- const raw = side === 'header' ? align.header : align.cell;
1258
+ const raw = side === 'header'
1259
+ ? align.header
1260
+ : align.cell;
1199
1261
  return this.normalizeColumnAlignment(raw);
1200
1262
  }
1201
1263
  return 'start';
@@ -1248,7 +1310,12 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1248
1310
  },
1249
1311
  ],
1250
1312
  });
1251
- this.width = this.mergedOptions().width === 'auto' ? 'auto' : this.customWidth ? this.customWidth : (this.mergedOptions().width ?? '200px');
1313
+ this.width =
1314
+ this.mergedOptions().width === 'auto'
1315
+ ? 'auto'
1316
+ : this.customWidth
1317
+ ? this.customWidth
1318
+ : (this.mergedOptions().width ?? '200px');
1252
1319
  this.allowResizing = this.mergedOptions().allowResizing || true;
1253
1320
  this.allowSorting = this.sortEnabled;
1254
1321
  this.cdr.detectChanges();
@@ -1289,7 +1356,9 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1289
1356
  // Use a hash of key properties instead of full JSON.stringify
1290
1357
  // This is much faster for large objects
1291
1358
  const keyProps = ['id', 'code', 'name', 'title'];
1292
- const keyValues = keyProps.map((prop) => data?.[prop]).filter((v) => v != null);
1359
+ const keyValues = keyProps
1360
+ .map((prop) => data?.[prop])
1361
+ .filter((v) => v != null);
1293
1362
  if (keyValues.length > 0) {
1294
1363
  return `row-${keyValues.join('-')}`;
1295
1364
  }
@@ -1375,7 +1444,9 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1375
1444
  },
1376
1445
  };
1377
1446
  // Start async evaluation - will update injector when complete
1378
- this.expressionEvaluator.evaluate(this.mergedOptions(), scope).then((evaluatedOptions) => {
1447
+ this.expressionEvaluator
1448
+ .evaluate(this.mergedOptions(), scope)
1449
+ .then((evaluatedOptions) => {
1379
1450
  // Create injector with evaluated options
1380
1451
  const tokenValue = {
1381
1452
  path: this.node.path,
@@ -1398,7 +1469,8 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1398
1469
  this.pendingEvaluations.delete(cacheKey);
1399
1470
  // Schedule batched change detection (performance optimization)
1400
1471
  this.scheduleChangeDetection();
1401
- }).catch(() => {
1472
+ })
1473
+ .catch(() => {
1402
1474
  // If evaluation fails, keep using the fallback injector
1403
1475
  this.pendingEvaluations.delete(cacheKey);
1404
1476
  });
@@ -1427,34 +1499,47 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1427
1499
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetColumnRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1428
1500
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPWidgetColumnRendererComponent, isStandalone: false, selector: "axp-widget-column-renderer", inputs: { caption: "caption", customExpandIcon: "customExpandIcon", customCollapseIcon: "customCollapseIcon", customWidth: "customWidth", node: "node", footerTemplate: "footerTemplate", expandHandler: "expandHandler", sortEnabled: "sortEnabled", headerSortDirection: "headerSortDirection", headerSortPriority: "headerSortPriority", columnFixed: "columnFixed", cellTemplate: "cellTemplate", headerTemplate: "headerTemplate" }, outputs: { sortToggle: "sortToggle" }, providers: [
1429
1501
  AXPWidgetCoreService,
1430
- { provide: AXDataTableColumnComponent, useExisting: AXPWidgetColumnRendererComponent },
1502
+ {
1503
+ provide: AXDataTableColumnComponent,
1504
+ useExisting: AXPWidgetColumnRendererComponent,
1505
+ },
1431
1506
  ], viewQueries: [{ propertyName: "_contentFooterTemplate", first: true, predicate: ["footer"], descendants: true }, { propertyName: "_contentCellTemplate", first: true, predicate: ["cell"], descendants: true }, { propertyName: "_contentHeaderTemplate", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
1432
1507
  <ng-template #header>
1433
1508
  <div
1434
- class="axp-widget-column-header ax-w-full ax-flex ax-items-center ax-select-none"
1509
+ class="axp-widget-column-header w-full flex items-center select-none"
1435
1510
  [class.axp-widget-column-header--sortable]="sortEnabled"
1436
- [class.axp-widget-column-header--sort-active]="headerSortDirection === 'asc' || headerSortDirection === 'desc'"
1437
- [class.ax-gap-1]="!sortEnabled"
1438
- [style.justify-content]="sortEnabled ? 'flex-start' : getHeaderJustifyContent()"
1511
+ [class.axp-widget-column-header--sort-active]="
1512
+ headerSortDirection === 'asc' || headerSortDirection === 'desc'
1513
+ "
1514
+ [class.gap-1]="!sortEnabled"
1515
+ [style.justify-content]="
1516
+ sortEnabled ? 'flex-start' : getHeaderJustifyContent()
1517
+ "
1439
1518
  (click)="onHeaderClick($event)"
1440
1519
  >
1441
1520
  <span
1442
- class="axp-widget-column-header__caption ax-truncate"
1521
+ class="axp-widget-column-header__caption truncate"
1443
1522
  [class.axp-widget-column-header__caption--with-sort]="sortEnabled"
1444
1523
  [style.text-align]="sortEnabled ? getHeaderTextAlign() : null"
1445
- >{{ caption | translate | async }}</span>
1524
+ >{{ caption | translate | async }}</span
1525
+ >
1446
1526
  @if (sortEnabled) {
1447
- <span class="axp-widget-column-header__sort ax-flex ax-items-center ax-gap-0.5 ax-shrink-0">
1527
+ <span
1528
+ class="axp-widget-column-header__sort flex items-center gap-0.5 shrink-0"
1529
+ >
1448
1530
  @if (headerSortPriority !== undefined && headerSortPriority > 1) {
1449
- <span class="axp-widget-column-header__sort-priority ax-text-xs ax-opacity-70">{{ headerSortPriority }}</span>
1531
+ <span
1532
+ class="axp-widget-column-header__sort-priority text-xs opacity-70"
1533
+ >{{ headerSortPriority }}</span
1534
+ >
1450
1535
  }
1451
1536
  <i
1452
- class="fa-solid fa-arrow-up-long ax-text-neutral-400"
1453
- [class.ax-text-primary]="headerSortDirection === 'asc'"
1537
+ class="fa-solid fa-arrow-up-long text-neutral-400"
1538
+ [class.text-primary]="headerSortDirection === 'asc'"
1454
1539
  ></i>
1455
1540
  <i
1456
- class="fa-solid fa-arrow-down-long ax-text-neutral-400"
1457
- [class.ax-text-primary]="headerSortDirection === 'desc'"
1541
+ class="fa-solid fa-arrow-down-long text-neutral-400"
1542
+ [class.text-primary]="headerSortDirection === 'desc'"
1458
1543
  ></i>
1459
1544
  </span>
1460
1545
  }
@@ -1462,70 +1547,95 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1462
1547
  </ng-template>
1463
1548
  <ng-template #cell let-row>
1464
1549
  <div
1465
- class="ax-w-full"
1466
- [class.ax-flex]="getCellUseFlexLayout()"
1467
- [class.ax-gap-2]="expandHandler"
1468
- [class.ax-items-center]="getCellUseFlexLayout()"
1550
+ class="w-full"
1551
+ [class.flex]="getCellUseFlexLayout()"
1552
+ [class.gap-2]="expandHandler"
1553
+ [class.items-center]="getCellUseFlexLayout()"
1469
1554
  [style.justify-content]="getCellJustifyContent()"
1470
1555
  >
1471
1556
  @if (expandHandler) {
1472
1557
  <div
1473
1558
  (click)="handleExpandRow(row)"
1474
- class="ax-expand-handler"
1475
- [class.ax-invisible]="!hasExpandableRow(row)"
1559
+ class="expand-handler"
1560
+ [class.invisible]="!hasExpandableRow(row)"
1476
1561
  id="ax-expand-handler-container"
1477
1562
  [style.padding-inline-start.rem]="row.data?.__meta__?.level * 2"
1478
1563
  >
1479
1564
  @if (loadingRow() === row) {
1480
- <i class="fas fa-spinner-third ax-animate-twSpin ax-animate-infinite"></i>
1565
+ <i
1566
+ class="fas fa-spinner-third animate-twSpin animate-infinite"
1567
+ ></i>
1481
1568
  } @else {
1482
1569
  @if (row.data?.__meta__?.expanded) {
1483
- <i [class]="customCollapseIcon || 'far fa-minus-square ax-text-md ax-opacity-75'"></i>
1570
+ <i
1571
+ [class]="
1572
+ customCollapseIcon ||
1573
+ 'far fa-minus-square text-md opacity-75'
1574
+ "
1575
+ ></i>
1484
1576
  } @else {
1485
- <i [class]="customExpandIcon || 'far fa-plus-square ax-text-md ax-opacity-75'"></i>
1577
+ <i
1578
+ [class]="
1579
+ customExpandIcon || 'far fa-plus-square text-md opacity-75'
1580
+ "
1581
+ ></i>
1486
1582
  }
1487
1583
  }
1488
1584
  </div>
1489
1585
  }
1490
1586
  @if (component && row?.data) {
1491
1587
  <ng-container
1492
- *ngComponentOutlet="component; injector: getRowInjector(row.data); inputs: getInputs(row.data)"
1588
+ *ngComponentOutlet="
1589
+ component;
1590
+ injector: getRowInjector(row.data);
1591
+ inputs: getInputs(row.data)
1592
+ "
1493
1593
  ></ng-container>
1494
1594
  }
1495
1595
  </div>
1496
1596
  </ng-template>
1497
1597
  <ng-template #footer></ng-template>
1498
- `, isInline: true, styles: [".axp-widget-column-header--sortable{cursor:pointer}.axp-widget-column-header__caption{min-width:0}.axp-widget-column-header__caption--with-sort{flex:1 1 0}.axp-widget-column-header__sort{opacity:0;transition:opacity .15s ease}.axp-widget-column-header--sortable:hover .axp-widget-column-header__sort,.axp-widget-column-header--sortable:focus-within .axp-widget-column-header__sort,.axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}.axp-widget-column-header__sort-priority{line-height:1}:host-context(.ax-data-table-head-cell.ax-interactive:hover) .axp-widget-column-header__sort,:host-context(.ax-data-table-head-cell.ax-interactive:focus-within) .axp-widget-column-header__sort,:host-context(.ax-data-table-head-cell) .axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}\n"], dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1598
+ `, isInline: true, styles: [".axp-widget-column-header--sortable{cursor:pointer}.axp-widget-column-header__caption{min-width:0}.axp-widget-column-header__caption--with-sort{flex:1 1 0}.axp-widget-column-header__sort{opacity:0;transition:opacity .15s ease}.axp-widget-column-header--sortable:hover .axp-widget-column-header__sort,.axp-widget-column-header--sortable:focus-within .axp-widget-column-header__sort,.axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}.axp-widget-column-header__sort-priority{line-height:1}:host-context(.data-table-head-cell.ax-interactive:hover) .axp-widget-column-header__sort,:host-context(.data-table-head-cell.ax-interactive:focus-within) .axp-widget-column-header__sort,:host-context(.data-table-head-cell) .axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1499
1599
  }
1500
1600
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetColumnRendererComponent, decorators: [{
1501
1601
  type: Component,
1502
1602
  args: [{ selector: 'axp-widget-column-renderer', template: `
1503
1603
  <ng-template #header>
1504
1604
  <div
1505
- class="axp-widget-column-header ax-w-full ax-flex ax-items-center ax-select-none"
1605
+ class="axp-widget-column-header w-full flex items-center select-none"
1506
1606
  [class.axp-widget-column-header--sortable]="sortEnabled"
1507
- [class.axp-widget-column-header--sort-active]="headerSortDirection === 'asc' || headerSortDirection === 'desc'"
1508
- [class.ax-gap-1]="!sortEnabled"
1509
- [style.justify-content]="sortEnabled ? 'flex-start' : getHeaderJustifyContent()"
1607
+ [class.axp-widget-column-header--sort-active]="
1608
+ headerSortDirection === 'asc' || headerSortDirection === 'desc'
1609
+ "
1610
+ [class.gap-1]="!sortEnabled"
1611
+ [style.justify-content]="
1612
+ sortEnabled ? 'flex-start' : getHeaderJustifyContent()
1613
+ "
1510
1614
  (click)="onHeaderClick($event)"
1511
1615
  >
1512
1616
  <span
1513
- class="axp-widget-column-header__caption ax-truncate"
1617
+ class="axp-widget-column-header__caption truncate"
1514
1618
  [class.axp-widget-column-header__caption--with-sort]="sortEnabled"
1515
1619
  [style.text-align]="sortEnabled ? getHeaderTextAlign() : null"
1516
- >{{ caption | translate | async }}</span>
1620
+ >{{ caption | translate | async }}</span
1621
+ >
1517
1622
  @if (sortEnabled) {
1518
- <span class="axp-widget-column-header__sort ax-flex ax-items-center ax-gap-0.5 ax-shrink-0">
1623
+ <span
1624
+ class="axp-widget-column-header__sort flex items-center gap-0.5 shrink-0"
1625
+ >
1519
1626
  @if (headerSortPriority !== undefined && headerSortPriority > 1) {
1520
- <span class="axp-widget-column-header__sort-priority ax-text-xs ax-opacity-70">{{ headerSortPriority }}</span>
1627
+ <span
1628
+ class="axp-widget-column-header__sort-priority text-xs opacity-70"
1629
+ >{{ headerSortPriority }}</span
1630
+ >
1521
1631
  }
1522
1632
  <i
1523
- class="fa-solid fa-arrow-up-long ax-text-neutral-400"
1524
- [class.ax-text-primary]="headerSortDirection === 'asc'"
1633
+ class="fa-solid fa-arrow-up-long text-neutral-400"
1634
+ [class.text-primary]="headerSortDirection === 'asc'"
1525
1635
  ></i>
1526
1636
  <i
1527
- class="fa-solid fa-arrow-down-long ax-text-neutral-400"
1528
- [class.ax-text-primary]="headerSortDirection === 'desc'"
1637
+ class="fa-solid fa-arrow-down-long text-neutral-400"
1638
+ [class.text-primary]="headerSortDirection === 'desc'"
1529
1639
  ></i>
1530
1640
  </span>
1531
1641
  }
@@ -1533,34 +1643,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1533
1643
  </ng-template>
1534
1644
  <ng-template #cell let-row>
1535
1645
  <div
1536
- class="ax-w-full"
1537
- [class.ax-flex]="getCellUseFlexLayout()"
1538
- [class.ax-gap-2]="expandHandler"
1539
- [class.ax-items-center]="getCellUseFlexLayout()"
1646
+ class="w-full"
1647
+ [class.flex]="getCellUseFlexLayout()"
1648
+ [class.gap-2]="expandHandler"
1649
+ [class.items-center]="getCellUseFlexLayout()"
1540
1650
  [style.justify-content]="getCellJustifyContent()"
1541
1651
  >
1542
1652
  @if (expandHandler) {
1543
1653
  <div
1544
1654
  (click)="handleExpandRow(row)"
1545
- class="ax-expand-handler"
1546
- [class.ax-invisible]="!hasExpandableRow(row)"
1655
+ class="expand-handler"
1656
+ [class.invisible]="!hasExpandableRow(row)"
1547
1657
  id="ax-expand-handler-container"
1548
1658
  [style.padding-inline-start.rem]="row.data?.__meta__?.level * 2"
1549
1659
  >
1550
1660
  @if (loadingRow() === row) {
1551
- <i class="fas fa-spinner-third ax-animate-twSpin ax-animate-infinite"></i>
1661
+ <i
1662
+ class="fas fa-spinner-third animate-twSpin animate-infinite"
1663
+ ></i>
1552
1664
  } @else {
1553
1665
  @if (row.data?.__meta__?.expanded) {
1554
- <i [class]="customCollapseIcon || 'far fa-minus-square ax-text-md ax-opacity-75'"></i>
1666
+ <i
1667
+ [class]="
1668
+ customCollapseIcon ||
1669
+ 'far fa-minus-square text-md opacity-75'
1670
+ "
1671
+ ></i>
1555
1672
  } @else {
1556
- <i [class]="customExpandIcon || 'far fa-plus-square ax-text-md ax-opacity-75'"></i>
1673
+ <i
1674
+ [class]="
1675
+ customExpandIcon || 'far fa-plus-square text-md opacity-75'
1676
+ "
1677
+ ></i>
1557
1678
  }
1558
1679
  }
1559
1680
  </div>
1560
1681
  }
1561
1682
  @if (component && row?.data) {
1562
1683
  <ng-container
1563
- *ngComponentOutlet="component; injector: getRowInjector(row.data); inputs: getInputs(row.data)"
1684
+ *ngComponentOutlet="
1685
+ component;
1686
+ injector: getRowInjector(row.data);
1687
+ inputs: getInputs(row.data)
1688
+ "
1564
1689
  ></ng-container>
1565
1690
  }
1566
1691
  </div>
@@ -1568,8 +1693,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1568
1693
  <ng-template #footer></ng-template>
1569
1694
  `, providers: [
1570
1695
  AXPWidgetCoreService,
1571
- { provide: AXDataTableColumnComponent, useExisting: AXPWidgetColumnRendererComponent },
1572
- ], changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['caption'], standalone: false, styles: [".axp-widget-column-header--sortable{cursor:pointer}.axp-widget-column-header__caption{min-width:0}.axp-widget-column-header__caption--with-sort{flex:1 1 0}.axp-widget-column-header__sort{opacity:0;transition:opacity .15s ease}.axp-widget-column-header--sortable:hover .axp-widget-column-header__sort,.axp-widget-column-header--sortable:focus-within .axp-widget-column-header__sort,.axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}.axp-widget-column-header__sort-priority{line-height:1}:host-context(.ax-data-table-head-cell.ax-interactive:hover) .axp-widget-column-header__sort,:host-context(.ax-data-table-head-cell.ax-interactive:focus-within) .axp-widget-column-header__sort,:host-context(.ax-data-table-head-cell) .axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}\n"] }]
1696
+ {
1697
+ provide: AXDataTableColumnComponent,
1698
+ useExisting: AXPWidgetColumnRendererComponent,
1699
+ },
1700
+ ], changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['caption'], standalone: false, styles: [".axp-widget-column-header--sortable{cursor:pointer}.axp-widget-column-header__caption{min-width:0}.axp-widget-column-header__caption--with-sort{flex:1 1 0}.axp-widget-column-header__sort{opacity:0;transition:opacity .15s ease}.axp-widget-column-header--sortable:hover .axp-widget-column-header__sort,.axp-widget-column-header--sortable:focus-within .axp-widget-column-header__sort,.axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}.axp-widget-column-header__sort-priority{line-height:1}:host-context(.data-table-head-cell.ax-interactive:hover) .axp-widget-column-header__sort,:host-context(.data-table-head-cell.ax-interactive:focus-within) .axp-widget-column-header__sort,:host-context(.data-table-head-cell) .axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
1573
1701
  }], propDecorators: { customExpandIcon: [{
1574
1702
  type: Input
1575
1703
  }], customCollapseIcon: [{
@@ -1624,6 +1752,7 @@ class AXPWidgetContainerComponent {
1624
1752
  constructor() {
1625
1753
  this.contextService = inject(AXPContextStore);
1626
1754
  this.builderService = inject(AXPWidgetCoreService);
1755
+ this.debug = inject(AXPDebugService);
1627
1756
  this.onContextChanged = new EventEmitter();
1628
1757
  this.wasHydrating = false;
1629
1758
  this.isSavedCommitted = computed(() => this.contextService.isSavedCommitted(), ...(ngDevMode ? [{ debugName: "isSavedCommitted" }] : /* istanbul ignore next */ []));
@@ -1653,6 +1782,16 @@ class AXPWidgetContainerComponent {
1653
1782
  return;
1654
1783
  }
1655
1784
  this.lastEmittedFormDirty = isDirty;
1785
+ this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'isFormDirty changed', () => ({
1786
+ isFormDirty: isDirty,
1787
+ userEditedSinceCommit: this.contextService.hasUserEditedSinceCommit(),
1788
+ isSavedCommitted: this.contextService.isSavedCommitted(),
1789
+ changePath: changeEvent.path,
1790
+ changeOrigin: changeEvent.origin,
1791
+ dirtyPaths: this.contextService.isSavedCommitted()
1792
+ ? summarizeFormContextDirtyDiff(this.contextService.data(), this.contextService.saved())
1793
+ : [],
1794
+ }));
1656
1795
  this.onContextChanged.emit({
1657
1796
  ...changeEvent,
1658
1797
  data: cloneDeep(data),
@@ -1697,6 +1836,10 @@ class AXPWidgetContainerComponent {
1697
1836
  return;
1698
1837
  }
1699
1838
  if (this.contextService.isSavedCommitted() && this.isFormDirty()) {
1839
+ const identityPatch = extractPersistedRootIdentityPatch(current, next);
1840
+ if (identityPatch) {
1841
+ this.contextService.patch(identityPatch, { updateSaved: true });
1842
+ }
1700
1843
  return;
1701
1844
  }
1702
1845
  if (this.contextService.isSavedCommitted()) {
@@ -1735,6 +1878,12 @@ class AXPWidgetContainerComponent {
1735
1878
  let stableTimer;
1736
1879
  let pollTimer;
1737
1880
  const finish = (reason) => {
1881
+ const snapshot = this.builderService.getWidgetStateSnapshot();
1882
+ this.debug.trace(OVERLAY_WIDGET_SETTLE_TRACE_NS, 'settle', 'Completed', () => ({
1883
+ reason,
1884
+ idleRetries,
1885
+ ...snapshot,
1886
+ }));
1738
1887
  if (pollTimer) {
1739
1888
  clearTimeout(pollTimer);
1740
1889
  }
@@ -1743,6 +1892,7 @@ class AXPWidgetContainerComponent {
1743
1892
  }
1744
1893
  resolve();
1745
1894
  };
1895
+ this.debug.trace(OVERLAY_WIDGET_SETTLE_TRACE_NS, 'settle', 'Started');
1746
1896
  const poll = () => {
1747
1897
  const snapshot = this.builderService.getWidgetStateSnapshot();
1748
1898
  const isSettled = snapshot.count > 0 &&
@@ -1781,6 +1931,7 @@ class AXPWidgetContainerComponent {
1781
1931
  revertAndSettle() {
1782
1932
  this.clearSavedBaselineTimer();
1783
1933
  this.settlePromise = undefined;
1934
+ this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'revertAndSettle');
1784
1935
  this.contextService.revertToSaved();
1785
1936
  this.lastEmittedFormDirty = undefined;
1786
1937
  }
@@ -1827,11 +1978,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1827
1978
  }], functions: [{
1828
1979
  type: Input
1829
1980
  }] } });
1981
+ function hasPersistedRootIdentity(value) {
1982
+ return ((typeof value === 'string' && value.length > 0) || (typeof value === 'number' && !Number.isNaN(value)));
1983
+ }
1984
+ /** Injects `id` / `_id` from an external context sync when the live form is dirty but lacks a persisted root id. */
1985
+ function extractPersistedRootIdentityPatch(current, next) {
1986
+ const nextId = next['id'] ?? next['_id'];
1987
+ const currentId = current['id'] ?? current['_id'];
1988
+ if (!hasPersistedRootIdentity(nextId) || hasPersistedRootIdentity(currentId)) {
1989
+ return null;
1990
+ }
1991
+ const patch = { id: nextId };
1992
+ if (next['_id'] !== undefined) {
1993
+ patch['_id'] = next['_id'];
1994
+ }
1995
+ return patch;
1996
+ }
1830
1997
 
1831
1998
  class AXPWidgetPlaceholderComponent {
1832
1999
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1833
2000
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPWidgetPlaceholderComponent, isStandalone: true, selector: "axp-widget-placeholder", ngImport: i0, template: `<div>
1834
- <ax-skeleton class="ax-w-full ax-h-10 ax-rounded-md"></ax-skeleton>
2001
+ <ax-skeleton class="w-full h-10 rounded-md"></ax-skeleton>
1835
2002
  </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1836
2003
  }
1837
2004
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetPlaceholderComponent, decorators: [{
@@ -1839,7 +2006,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1839
2006
  args: [{
1840
2007
  selector: 'axp-widget-placeholder',
1841
2008
  template: `<div>
1842
- <ax-skeleton class="ax-w-full ax-h-10 ax-rounded-md"></ax-skeleton>
2009
+ <ax-skeleton class="w-full h-10 rounded-md"></ax-skeleton>
1843
2010
  </div>`,
1844
2011
  changeDetection: ChangeDetectionStrategy.OnPush,
1845
2012
  imports: [AXSkeletonModule],
@@ -3183,149 +3350,10 @@ class AXPWidgetSerializationHelper {
3183
3350
  }
3184
3351
  //#endregion
3185
3352
 
3186
- //#region ---- Editor sub-categories (widget picker) ----
3187
- const AXP_WIDGETS_EDITOR_SUB_TEXT_INPUTS = {
3188
- name: 'editor-text-inputs',
3189
- order: 1,
3190
- title: '@platform-layout-widgets:subcategories.editor-text-inputs.title',
3191
- };
3192
- const AXP_WIDGETS_EDITOR_SUB_NUMERIC = {
3193
- name: 'editor-numeric',
3194
- order: 2,
3195
- title: '@platform-layout-widgets:subcategories.editor-numeric.title',
3196
- };
3197
- const AXP_WIDGETS_EDITOR_SUB_DATETIME = {
3198
- name: 'editor-datetime',
3199
- order: 3,
3200
- title: '@platform-layout-widgets:subcategories.editor-datetime.title',
3201
- };
3202
- const AXP_WIDGETS_EDITOR_SUB_CHOICE = {
3203
- name: 'editor-choice',
3204
- order: 4,
3205
- title: '@platform-layout-widgets:subcategories.editor-choice.title',
3206
- };
3207
- const AXP_WIDGETS_EDITOR_SUB_RICH = {
3208
- name: 'editor-rich',
3209
- order: 5,
3210
- title: '@platform-layout-widgets:subcategories.editor-rich.title',
3211
- };
3212
- const AXP_WIDGETS_EDITOR_SUB_VISUAL = {
3213
- name: 'editor-visual',
3214
- order: 6,
3215
- title: '@platform-layout-widgets:subcategories.editor-visual.title',
3216
- };
3217
- const AXP_WIDGETS_EDITOR_SUB_COMPOSITE = {
3218
- name: 'editor-composite',
3219
- order: 7,
3220
- title: '@platform-layout-widgets:subcategories.editor-composite.title',
3221
- };
3222
- const AXP_WIDGETS_EDITOR_SUB_CONFIG = {
3223
- name: 'editor-config',
3224
- order: 8,
3225
- title: '@platform-layout-widgets:subcategories.editor-config.title',
3226
- };
3227
- //#endregion
3228
- //#region ---- Layout sub-categories (widget picker) ----
3229
- const AXP_WIDGETS_LAYOUT_SUB_SHELL = {
3230
- name: 'layout-shell',
3231
- order: 1,
3232
- title: '@platform-layout-widgets:subcategories.layout-shell.title',
3233
- };
3234
- const AXP_WIDGETS_LAYOUT_SUB_GRID = {
3235
- name: 'layout-grid',
3236
- order: 2,
3237
- title: '@platform-layout-widgets:subcategories.layout-grid.title',
3238
- };
3239
- const AXP_WIDGETS_LAYOUT_SUB_SURFACES = {
3240
- name: 'layout-surfaces',
3241
- order: 3,
3242
- title: '@platform-layout-widgets:subcategories.layout-surfaces.title',
3243
- };
3244
- const AXP_WIDGETS_LAYOUT_SUB_TABS = {
3245
- name: 'layout-tabs',
3246
- order: 4,
3247
- title: '@platform-layout-widgets:subcategories.layout-tabs.title',
3248
- };
3249
- const AXP_WIDGETS_LAYOUT_SUB_LISTS = {
3250
- name: 'layout-lists',
3251
- order: 5,
3252
- title: '@platform-layout-widgets:subcategories.layout-lists.title',
3253
- };
3254
- const AXP_WIDGETS_LAYOUT_SUB_UTILITY = {
3255
- name: 'layout-utility',
3256
- order: 6,
3257
- title: '@platform-layout-widgets:subcategories.layout-utility.title',
3258
- };
3259
- //#endregion
3260
- //#region ---- Action sub-categories (widget picker) ----
3261
- const AXP_WIDGETS_ACTION_SUB_CONTROLS = {
3262
- name: 'action-controls',
3263
- order: 1,
3264
- title: '@platform-layout-widgets:subcategories.action-controls.title',
3265
- };
3266
- //#endregion
3267
- //#region ---- Advance sub-categories (widget picker) ----
3268
- const AXP_WIDGETS_ADVANCE_SUB_MEDIA = {
3269
- name: 'advance-media',
3270
- order: 1,
3271
- title: '@platform-layout-widgets:subcategories.advance-media.title',
3272
- };
3273
- const AXP_WIDGETS_ADVANCE_SUB_INPUT = {
3274
- name: 'advance-input',
3275
- order: 2,
3276
- title: '@platform-layout-widgets:subcategories.advance-input.title',
3277
- };
3278
- const AXP_WIDGETS_ADVANCE_SUB_DATA = {
3279
- name: 'advance-data',
3280
- order: 3,
3281
- title: '@platform-layout-widgets:subcategories.advance-data.title',
3282
- };
3283
- const AXP_WIDGETS_ADVANCE_SUB_TOOLS = {
3284
- name: 'advance-tools',
3285
- order: 4,
3286
- title: '@platform-layout-widgets:subcategories.advance-tools.title',
3287
- };
3288
- //#endregion
3289
- /** Normalizes widget categories to an array for iteration and serialization. */
3290
- function normalizeWidgetCategories(categories) {
3291
- if (categories == null) {
3292
- return [];
3293
- }
3294
- return Array.isArray(categories) ? categories : [categories];
3295
- }
3296
- const AXP_WIDGETS_LAYOUT_CATEGORY = {
3297
- name: 'layout',
3298
- order: 1,
3299
- title: '@platform-layout-widgets:categories.layout.title',
3300
- };
3301
- const AXP_WIDGETS_EDITOR_CATEGORY = {
3302
- name: 'editor',
3303
- order: 2,
3304
- title: '@platform-layout-widgets:categories.editor.title',
3305
- };
3306
- const AXP_WIDGETS_ACTION_CATEGORY = {
3307
- name: 'action',
3308
- order: 3,
3309
- title: '@platform-layout-widgets:categories.action.title',
3310
- };
3311
- const AXP_WIDGETS_ADVANCE_CATEGORY = {
3312
- name: 'advance',
3313
- order: 4,
3314
- title: '@platform-layout-widgets:categories.advance.title',
3315
- };
3316
- /** AI category tab in the widget picker (metadata); unrelated to Widgets:GetForAI listing scope. */
3317
- const AXP_WIDGETS_AI_CATEGORY = {
3318
- name: 'ai',
3319
- order: 5,
3320
- title: '@platform-layout-widgets:categories.ai.title',
3321
- };
3322
- const AXP_WIDGETS_CATEGORIES = [
3323
- AXP_WIDGETS_LAYOUT_CATEGORY,
3324
- AXP_WIDGETS_EDITOR_CATEGORY,
3325
- AXP_WIDGETS_ACTION_CATEGORY,
3326
- AXP_WIDGETS_ADVANCE_CATEGORY,
3327
- AXP_WIDGETS_AI_CATEGORY,
3328
- ];
3353
+ /**
3354
+ * Re-export Node-safe widget category constants from shared runtime.
3355
+ * Sidecars and generate-runtime-catalog should import from `@acorex-platform/framework-shared/runtime`.
3356
+ */
3329
3357
 
3330
3358
  /**
3331
3359
  * Standalone cell renderer using the same column-mode widget pipeline as {@link AXPWidgetColumnRendererComponent}.
@@ -3378,13 +3406,16 @@ class AXPWidgetColumnCellComponent {
3378
3406
  eval: (path) => getSmart(data, path),
3379
3407
  },
3380
3408
  };
3381
- void this.expressionEvaluator.evaluate(this.mergedOptions(), scope).then((evaluatedOptions) => {
3409
+ void this.expressionEvaluator
3410
+ .evaluate(this.mergedOptions(), scope)
3411
+ .then((evaluatedOptions) => {
3382
3412
  const newInjector = this.createRowInjector(evaluatedOptions);
3383
3413
  this.rowInjectorsCache.delete(cacheKey);
3384
3414
  this.rowInjectorsCache.set(cacheKey, newInjector);
3385
3415
  this.pendingEvaluations.delete(cacheKey);
3386
3416
  this.scheduleChangeDetection();
3387
- }).catch(() => {
3417
+ })
3418
+ .catch(() => {
3388
3419
  this.pendingEvaluations.delete(cacheKey);
3389
3420
  });
3390
3421
  }
@@ -3454,7 +3485,11 @@ class AXPWidgetColumnCellComponent {
3454
3485
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPWidgetColumnCellComponent, isStandalone: true, selector: "axp-widget-column-cell", inputs: { node: "node", rowData: "rowData", caption: "caption" }, usesOnChanges: true, ngImport: i0, template: `
3455
3486
  @if (component && rowData) {
3456
3487
  <ng-container
3457
- *ngComponentOutlet="component; injector: getRowInjector(rowData); inputs: getInputs(rowData)"
3488
+ *ngComponentOutlet="
3489
+ component;
3490
+ injector: getRowInjector(rowData);
3491
+ inputs: getInputs(rowData)
3492
+ "
3458
3493
  ></ng-container>
3459
3494
  }
3460
3495
  `, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -3468,7 +3503,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3468
3503
  template: `
3469
3504
  @if (component && rowData) {
3470
3505
  <ng-container
3471
- *ngComponentOutlet="component; injector: getRowInjector(rowData); inputs: getInputs(rowData)"
3506
+ *ngComponentOutlet="
3507
+ component;
3508
+ injector: getRowInjector(rowData);
3509
+ inputs: getInputs(rowData)
3510
+ "
3472
3511
  ></ng-container>
3473
3512
  }
3474
3513
  `,
@@ -4707,5 +4746,5 @@ const AXP_CALLBACK_VALIDATION_PROPERTY = {
4707
4746
  * Generated bundle index. Do not edit.
4708
4747
  */
4709
4748
 
4710
- export { AXPBaseWidgetComponent, AXPBlockBaseLayoutWidgetComponent, AXPBoxModelLayoutWidgetComponent, AXPColumnWidgetComponent, AXPDataListWidgetComponent, AXPFlexBaseLayoutWidgetComponent, AXPFlexItemBaseLayoutWidgetComponent, AXPGridBaseLayoutWidgetComponent, AXPGridItemBaseLayoutWidgetComponent, AXPInlineBaseLayoutWidgetComponent, AXPLayoutBaseWidgetComponent, AXPPropertyEditorHelper, AXPTableBaseLayoutWidgetComponent, AXPTableItemBaseLayoutWidgetComponent, AXPTableItemOpsBaseLayoutWidgetComponent, AXPValueWidgetComponent, AXPWidgetColumnCellComponent, AXPWidgetColumnRendererComponent, AXPWidgetContainerComponent, AXPWidgetCoreElement, AXPWidgetCoreModule, AXPWidgetCoreService, AXPWidgetRegistryService, AXPWidgetRendererDirective, AXPWidgetSerializationHelper, AXP_ALLOW_CLEAR_PROPERTY, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_ALLOW_SEARCH_PROPERTY, AXP_ANIMATION_PROPERTY_GROUP, AXP_APPEARANCE_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_BETWEEN_VALIDATION_PROPERTY, AXP_BG_COLOR_PROPERTY, AXP_BOX_MODEL_PROPERTY_GROUP, AXP_CALLBACK_VALIDATION_PROPERTY, AXP_COLOR_PROPERTY, AXP_CONTENT_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_DATA_SOURCE_OPTIONS_PROPERTY, AXP_DATE_DEPTH_PROPERTY, AXP_DATE_FORMAT_PROPERTY, AXP_DATE_RANGE_LIMIT_PROPERTY, AXP_DEFAULT_ROW_COUNT_PROPERTY, AXP_DESCRIPTION_PROPERTY, AXP_DIRECTION_PROPERTY, AXP_DISABLED_PROPERTY, AXP_DOWNLOADABLE_PROPERTY, AXP_EQUAL_VALIDATION_PROPERTY, AXP_FALSY_TEXT_PROPERTY, AXP_FIT_LINE_COUNT_PROPERTY, AXP_FONT_SIZE_PROPERTY, AXP_GREATER_THAN_VALIDATION_PROPERTY, AXP_HAS_CLEAR_BUTTON_PROPERTY, AXP_HAS_COPY_ICON_PROPERTY, AXP_HAS_EYE_ICON_PROPERTY, AXP_HAS_ICON_PROPERTY, AXP_HAS_LABEL_PROPERTY, AXP_ICON_PROPERTY, AXP_IS_LOADING_PROPERTY, AXP_LABEL_PROPERTY, AXP_LAYOUT_ADVANCED_GRID_PROPERTY, AXP_LAYOUT_BORDER_PROPERTY, AXP_LAYOUT_COLUMNS_PROPERTY, AXP_LAYOUT_DIRECTION_PROPERTY, AXP_LAYOUT_FLEX_ITEM_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY_GROUP, AXP_LAYOUT_GAP_PROPERTY, AXP_LAYOUT_GRID_ITEM_PROPERTY, AXP_LAYOUT_GRID_PROPERTIES, AXP_LAYOUT_GRID_PROPERTY, AXP_LAYOUT_GRID_PROPERTY_GROUP, AXP_LAYOUT_GRID_ROW_PROPERTIES, AXP_LAYOUT_ROWS_PROPERTY, AXP_LAYOUT_SHOW_HEADER_PROPERTY, AXP_LAYOUT_SPACING_PROPERTY, AXP_LAYOUT_TABLE_PROPERTY_GROUP, AXP_LESS_THAN_VALIDATION_PROPERTY, AXP_MAX_LENGTH_VALIDATION_PROPERTY, AXP_MAX_LINE_COUNT_PROPERTY, AXP_MIN_LENGTH_VALIDATION_PROPERTY, AXP_MIN_LINE_COUNT_PROPERTY, AXP_MULTI_LANGUAGE_PROPERTY, AXP_NAME_PROPERTY, AXP_NUMBER_SEPARATOR_PROPERTY, AXP_PLACEHOLDER_PROPERTY, AXP_READONLY_PROPERTY, AXP_REGULAR_EXPRESSION_VALIDATION_PROPERTY, AXP_REQUIRED_VALIDATION_PROPERTY, AXP_SHOW_PASSWORD_PROPERTY, AXP_SPIN_BUTTON_PROPERTY, AXP_STYLE_COLOR_PROPERTY, AXP_STYLE_LOOK_PROPERTY, AXP_STYLING_PROPERTY_GROUP, AXP_TABLE_COLUMNS_PROPERTY, AXP_TABLE_COLUMN_ALIGNMENT_PROPERTIES, AXP_TABLE_COLUMN_CELL_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEADER_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEIGHT_PROPERTY, AXP_TABLE_COLUMN_WIDTH_PROPERTY, AXP_TABLE_ITEM_COLSPAN_PROPERTY, AXP_TABLE_ITEM_ROWSPAN_PROPERTY, AXP_TEXT_ALIGN_PROPERTY, AXP_TEXT_FIELD_PROPERTY, AXP_TEXT_PROPERTY, AXP_THEME_PROPERTY, AXP_TITLE_PROPERTY, AXP_TRIGGERS_PROPERTY, AXP_TRIGGERS_PROPERTY_GROUP, AXP_TRULY_TEXT_PROPERTY, AXP_VALIDATION_PROPERTY_GROUP, AXP_VALUE_FIELD_PROPERTY, AXP_VERTICAL_ALIGN_PROPERTY, AXP_WIDGETS_ACTION_CATEGORY, AXP_WIDGETS_ACTION_SUB_CONTROLS, AXP_WIDGETS_ADVANCE_CATEGORY, AXP_WIDGETS_ADVANCE_SUB_DATA, AXP_WIDGETS_ADVANCE_SUB_INPUT, AXP_WIDGETS_ADVANCE_SUB_MEDIA, AXP_WIDGETS_ADVANCE_SUB_TOOLS, AXP_WIDGETS_AI_CATEGORY, AXP_WIDGETS_CATEGORIES, AXP_WIDGETS_EDITOR_CATEGORY, AXP_WIDGETS_EDITOR_SUB_CHOICE, AXP_WIDGETS_EDITOR_SUB_COMPOSITE, AXP_WIDGETS_EDITOR_SUB_CONFIG, AXP_WIDGETS_EDITOR_SUB_DATETIME, AXP_WIDGETS_EDITOR_SUB_NUMERIC, AXP_WIDGETS_EDITOR_SUB_RICH, AXP_WIDGETS_EDITOR_SUB_TEXT_INPUTS, AXP_WIDGETS_EDITOR_SUB_VISUAL, AXP_WIDGETS_LAYOUT_CATEGORY, AXP_WIDGETS_LAYOUT_SUB_GRID, AXP_WIDGETS_LAYOUT_SUB_LISTS, AXP_WIDGETS_LAYOUT_SUB_SHELL, AXP_WIDGETS_LAYOUT_SUB_SURFACES, AXP_WIDGETS_LAYOUT_SUB_TABS, AXP_WIDGETS_LAYOUT_SUB_UTILITY, AXP_WIDGET_DEFINITION_PROVIDER, AXP_WIDGET_PROPERTY_GROUP, WIDGET_CASCADE_TRACE_NS, booleanDefaultProperty, buildWidgetRegistryMapFromProviders, findNonEmptyBreakpoints, largeTextDefaultProperty, mapAXPPropertyToWidgetProperty, normalizeWidgetCategories, numberDefaultProperty, numberMaxValueProperty, numberMinValueProperty, plainTextDefaultProperty, richTextDefaultProperty, selectEditorDefaultValueProperty, selectionListEditorDefaultValueProperty };
4749
+ export { AXPBaseWidgetComponent, AXPBlockBaseLayoutWidgetComponent, AXPBoxModelLayoutWidgetComponent, AXPColumnWidgetComponent, AXPDataListWidgetComponent, AXPFlexBaseLayoutWidgetComponent, AXPFlexItemBaseLayoutWidgetComponent, AXPGridBaseLayoutWidgetComponent, AXPGridItemBaseLayoutWidgetComponent, AXPInlineBaseLayoutWidgetComponent, AXPLayoutBaseWidgetComponent, AXPPropertyEditorHelper, AXPTableBaseLayoutWidgetComponent, AXPTableItemBaseLayoutWidgetComponent, AXPTableItemOpsBaseLayoutWidgetComponent, AXPValueWidgetComponent, AXPWidgetColumnCellComponent, AXPWidgetColumnRendererComponent, AXPWidgetContainerComponent, AXPWidgetCoreElement, AXPWidgetCoreModule, AXPWidgetCoreService, AXPWidgetRegistryService, AXPWidgetRendererDirective, AXPWidgetSerializationHelper, AXP_ALLOW_CLEAR_PROPERTY, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_ALLOW_SEARCH_PROPERTY, AXP_ANIMATION_PROPERTY_GROUP, AXP_APPEARANCE_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_BETWEEN_VALIDATION_PROPERTY, AXP_BG_COLOR_PROPERTY, AXP_BOX_MODEL_PROPERTY_GROUP, AXP_CALLBACK_VALIDATION_PROPERTY, AXP_COLOR_PROPERTY, AXP_CONTENT_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_DATA_SOURCE_OPTIONS_PROPERTY, AXP_DATE_DEPTH_PROPERTY, AXP_DATE_FORMAT_PROPERTY, AXP_DATE_RANGE_LIMIT_PROPERTY, AXP_DEFAULT_ROW_COUNT_PROPERTY, AXP_DESCRIPTION_PROPERTY, AXP_DIRECTION_PROPERTY, AXP_DISABLED_PROPERTY, AXP_DOWNLOADABLE_PROPERTY, AXP_EQUAL_VALIDATION_PROPERTY, AXP_FALSY_TEXT_PROPERTY, AXP_FIT_LINE_COUNT_PROPERTY, AXP_FONT_SIZE_PROPERTY, AXP_GREATER_THAN_VALIDATION_PROPERTY, AXP_HAS_CLEAR_BUTTON_PROPERTY, AXP_HAS_COPY_ICON_PROPERTY, AXP_HAS_EYE_ICON_PROPERTY, AXP_HAS_ICON_PROPERTY, AXP_HAS_LABEL_PROPERTY, AXP_ICON_PROPERTY, AXP_IS_LOADING_PROPERTY, AXP_LABEL_PROPERTY, AXP_LAYOUT_ADVANCED_GRID_PROPERTY, AXP_LAYOUT_BORDER_PROPERTY, AXP_LAYOUT_COLUMNS_PROPERTY, AXP_LAYOUT_DIRECTION_PROPERTY, AXP_LAYOUT_FLEX_ITEM_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY_GROUP, AXP_LAYOUT_GAP_PROPERTY, AXP_LAYOUT_GRID_ITEM_PROPERTY, AXP_LAYOUT_GRID_PROPERTIES, AXP_LAYOUT_GRID_PROPERTY, AXP_LAYOUT_GRID_PROPERTY_GROUP, AXP_LAYOUT_GRID_ROW_PROPERTIES, AXP_LAYOUT_ROWS_PROPERTY, AXP_LAYOUT_SHOW_HEADER_PROPERTY, AXP_LAYOUT_SPACING_PROPERTY, AXP_LAYOUT_TABLE_PROPERTY_GROUP, AXP_LESS_THAN_VALIDATION_PROPERTY, AXP_MAX_LENGTH_VALIDATION_PROPERTY, AXP_MAX_LINE_COUNT_PROPERTY, AXP_MIN_LENGTH_VALIDATION_PROPERTY, AXP_MIN_LINE_COUNT_PROPERTY, AXP_MULTI_LANGUAGE_PROPERTY, AXP_NAME_PROPERTY, AXP_NUMBER_SEPARATOR_PROPERTY, AXP_PLACEHOLDER_PROPERTY, AXP_READONLY_PROPERTY, AXP_REGULAR_EXPRESSION_VALIDATION_PROPERTY, AXP_REQUIRED_VALIDATION_PROPERTY, AXP_SHOW_PASSWORD_PROPERTY, AXP_SPIN_BUTTON_PROPERTY, AXP_STYLE_COLOR_PROPERTY, AXP_STYLE_LOOK_PROPERTY, AXP_STYLING_PROPERTY_GROUP, AXP_TABLE_COLUMNS_PROPERTY, AXP_TABLE_COLUMN_ALIGNMENT_PROPERTIES, AXP_TABLE_COLUMN_CELL_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEADER_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEIGHT_PROPERTY, AXP_TABLE_COLUMN_WIDTH_PROPERTY, AXP_TABLE_ITEM_COLSPAN_PROPERTY, AXP_TABLE_ITEM_ROWSPAN_PROPERTY, AXP_TEXT_ALIGN_PROPERTY, AXP_TEXT_FIELD_PROPERTY, AXP_TEXT_PROPERTY, AXP_THEME_PROPERTY, AXP_TITLE_PROPERTY, AXP_TRIGGERS_PROPERTY, AXP_TRIGGERS_PROPERTY_GROUP, AXP_TRULY_TEXT_PROPERTY, AXP_VALIDATION_PROPERTY_GROUP, AXP_VALUE_FIELD_PROPERTY, AXP_VERTICAL_ALIGN_PROPERTY, AXP_WIDGET_DEFINITION_PROVIDER, AXP_WIDGET_PROPERTY_GROUP, WIDGET_CASCADE_TRACE_NS, booleanDefaultProperty, buildWidgetRegistryMapFromProviders, findNonEmptyBreakpoints, largeTextDefaultProperty, mapAXPPropertyToWidgetProperty, numberDefaultProperty, numberMaxValueProperty, numberMinValueProperty, plainTextDefaultProperty, richTextDefaultProperty, selectEditorDefaultValueProperty, selectionListEditorDefaultValueProperty };
4711
4750
  //# sourceMappingURL=acorex-platform-framework-client-layout-widget-core.mjs.map