@acorex-platform/framework-client 0.0.15 → 0.0.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.
Files changed (108) hide show
  1. package/fesm2022/acorex-platform-framework-client-auth.mjs +872 -314
  2. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs → acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs} +88 -5
  4. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-framework-client-common.mjs +2685 -898
  6. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-framework-client-core.mjs +691 -823
  8. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-framework-client-domain.mjs +16 -16
  10. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +181 -84
  11. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  12. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-oE8CeLE8.mjs} +8 -6
  13. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs.map → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-oE8CeLE8.mjs.map} +1 -1
  14. package/fesm2022/{acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs → acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs} +4 -4
  15. package/fesm2022/{acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs.map → acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs.map} +1 -1
  16. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +3300 -1236
  17. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +277 -185
  19. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs +29184 -0
  21. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs.map +1 -0
  22. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs} +34 -20
  23. package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs.map +1 -0
  24. package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs +162 -0
  25. package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs.map +1 -0
  26. package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs} +31 -19
  27. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs.map +1 -0
  28. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs} +30 -18
  29. package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs.map +1 -0
  30. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +2 -26780
  31. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +421 -151
  33. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +673 -287
  35. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  36. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BiWerYcu.mjs} +16 -10
  37. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs.map → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BiWerYcu.mjs.map} +1 -1
  38. package/fesm2022/{acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs → acorex-platform-framework-client-layout-widgets-image-preview.popup-BOrrMm3U.mjs} +9 -8
  39. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-BOrrMm3U.mjs.map +1 -0
  40. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs} +20 -12
  41. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs.map → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs.map} +1 -1
  42. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs} +32 -18
  43. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs.map} +1 -1
  44. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs} +8 -7
  45. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs.map} +1 -1
  46. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-FjtSRxIX.mjs} +4 -4
  47. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-FjtSRxIX.mjs.map} +1 -1
  48. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs} +10 -8
  49. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs.map} +1 -1
  50. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +4907 -2554
  51. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
  52. package/fesm2022/acorex-platform-framework-client-native.mjs +7 -7
  53. package/fesm2022/acorex-platform-framework-client-realtime-set-presence-availability.command-CetlUjnM.mjs +29 -0
  54. package/fesm2022/acorex-platform-framework-client-realtime-set-presence-availability.command-CetlUjnM.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-framework-client-realtime.mjs +463 -26
  56. package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
  57. package/fesm2022/acorex-platform-framework-client-runtime.mjs +300 -137
  58. package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
  59. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs → acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs} +10 -7
  60. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs.map → acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs.map} +1 -1
  61. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DWE3OWGm.mjs} +10 -7
  62. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs.map → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DWE3OWGm.mjs.map} +1 -1
  63. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs} +21 -19
  64. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs → acorex-platform-framework-client-themes-default-error-401.component-BrTotLx1.mjs} +5 -5
  66. package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs.map → acorex-platform-framework-client-themes-default-error-401.component-BrTotLx1.mjs.map} +1 -1
  67. package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs → acorex-platform-framework-client-themes-default-error-404.component-DsC7_s59.mjs} +5 -5
  68. package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs.map → acorex-platform-framework-client-themes-default-error-404.component-DsC7_s59.mjs.map} +1 -1
  69. package/fesm2022/{acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs → acorex-platform-framework-client-themes-default-error-offline.component-CngiQycG.mjs} +6 -6
  70. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-CngiQycG.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +448 -277
  72. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  73. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CbZALjB5.mjs} +8 -6
  74. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs.map → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CbZALjB5.mjs.map} +1 -1
  75. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BRrNT6x2.mjs} +8 -6
  76. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs.map → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BRrNT6x2.mjs.map} +1 -1
  77. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BIsQTr6B.mjs} +4 -4
  78. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs.map → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BIsQTr6B.mjs.map} +1 -1
  79. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-ZclmSbt9.mjs} +16 -10
  80. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs.map → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-ZclmSbt9.mjs.map} +1 -1
  81. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +538 -133
  82. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  83. package/fesm2022/acorex-platform-framework-client-workflow.mjs +26 -66
  84. package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
  85. package/package.json +10 -10
  86. package/realtime/README.md +16 -0
  87. package/runtime/README.md +14 -0
  88. package/types/acorex-platform-framework-client-auth.d.ts +291 -52
  89. package/types/acorex-platform-framework-client-common.d.ts +615 -202
  90. package/types/acorex-platform-framework-client-core.d.ts +215 -225
  91. package/types/acorex-platform-framework-client-layout-builder.d.ts +24 -8
  92. package/types/acorex-platform-framework-client-layout-components.d.ts +407 -94
  93. package/types/acorex-platform-framework-client-layout-entity.d.ts +734 -411
  94. package/types/acorex-platform-framework-client-layout-views.d.ts +40 -15
  95. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +66 -17
  96. package/types/acorex-platform-framework-client-layout-widgets.d.ts +295 -68
  97. package/types/acorex-platform-framework-client-realtime.d.ts +183 -6
  98. package/types/acorex-platform-framework-client-runtime.d.ts +134 -28
  99. package/types/acorex-platform-framework-client-themes-default.d.ts +9 -1
  100. package/types/acorex-platform-framework-client-themes-shared.d.ts +8 -2
  101. package/types/acorex-platform-framework-client-workflow.d.ts +12 -37
  102. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs.map +0 -1
@@ -1,9 +1,12 @@
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, summarizeFormContextDirtyDiff, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';
3
+ import { isSelectionValueEqual, isFormValueEqual, runtimeQueryPayloadData, runtimeQueryCollectionData, 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
+ import { ENTITY_GET_BY_ID_DEFAULT } from '@acorex-platform/framework-shared/runtime';
6
+ 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';
5
7
  import { convertArrayToDataSource, AXDataSource, AX_STYLE_COLOR_TYPES, AX_STYLE_LOOK_TYPES } from '@acorex/cdk/common';
6
- import { AXPContextStore, AXPDataSourceQueryService, AXPExpressionEvaluatorService, AXPDebugService, FORM_DIRTY_TRACE_NS, OVERLAY_WIDGET_SETTLE_TRACE_NS } from '@acorex-platform/framework-client/core';
8
+ import { AXPContextStore, AXPExpressionEvaluatorService, AXPDebugService, FORM_DIRTY_TRACE_NS, OVERLAY_WIDGET_SETTLE_TRACE_NS } from '@acorex-platform/framework-client/core';
9
+ import { AXPQueryService } from '@acorex-platform/framework-client/runtime';
7
10
  import { set, get, cloneDeep, isEqual, isNil, isUndefined, isObjectLike, merge, sum, isEmpty, isString } from 'lodash-es';
8
11
  import { Subject, BehaviorSubject, filter } from 'rxjs';
9
12
  import * as i1$1 from '@acorex/components/skeleton';
@@ -15,7 +18,6 @@ import * as i1 from '@angular/common';
15
18
  import { CommonModule, NgComponentOutlet } from '@angular/common';
16
19
  import { AXDataTableColumnComponent, AXBaseDataTable } from '@acorex/components/data-table';
17
20
  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';
19
21
 
20
22
  class AXPWidgetCoreElement {
21
23
  api() {
@@ -27,27 +29,35 @@ class AXPWidgetCoreElement {
27
29
  }
28
30
  class AXPWidgetCoreService {
29
31
  constructor() {
30
- this.variables$ = signal({}, ...(ngDevMode ? [{ debugName: "variables$" }] : /* istanbul ignore next */ []));
31
- this.functions$ = signal({}, ...(ngDevMode ? [{ debugName: "functions$" }] : /* istanbul ignore next */ []));
32
+ this.variables$ = signal({}, /* @ts-ignore */
33
+ ...(ngDevMode ? [{ debugName: "variables$" }] : /* istanbul ignore next */ []));
34
+ this.functions$ = signal({}, /* @ts-ignore */
35
+ ...(ngDevMode ? [{ debugName: "functions$" }] : /* istanbul ignore next */ []));
32
36
  this.onRefresh = new Subject();
33
37
  this.widgets = new Map();
34
38
  this.onWidgetRegistered = new Subject();
35
39
  /** Fires whenever a widget registers, including re-registration after remount (same id, new instance). */
36
40
  this.widgetRegistered$ = this.onWidgetRegistered.asObservable();
37
41
  /** Bumps when widget render/hydration state changes so aggregate computeds re-evaluate. */
38
- this.widgetsRevision = signal(0, ...(ngDevMode ? [{ debugName: "widgetsRevision" }] : /* istanbul ignore next */ []));
39
- this.status$ = signal(AXPPageStatus.Rendered, ...(ngDevMode ? [{ debugName: "status$" }] : /* istanbul ignore next */ []));
42
+ this.widgetsRevision = signal(0, /* @ts-ignore */
43
+ ...(ngDevMode ? [{ debugName: "widgetsRevision" }] : /* istanbul ignore next */ []));
44
+ this.status$ = signal(AXPPageStatus.Rendered, /* @ts-ignore */
45
+ ...(ngDevMode ? [{ debugName: "status$" }] : /* istanbul ignore next */ []));
40
46
  this.status = this.status$.asReadonly();
41
- this.registeredWidgetsCount = signal(0, ...(ngDevMode ? [{ debugName: "registeredWidgetsCount" }] : /* istanbul ignore next */ []));
47
+ this.registeredWidgetsCount = signal(0, /* @ts-ignore */
48
+ ...(ngDevMode ? [{ debugName: "registeredWidgetsCount" }] : /* istanbul ignore next */ []));
42
49
  this.isRendering = computed(() => {
43
50
  this.widgetsRevision();
44
51
  return Array.from(this.widgets.values()).some((widget) => widget.status() === AXPWidgetStatus.Rendering);
45
- }, ...(ngDevMode ? [{ debugName: "isRendering" }] : /* istanbul ignore next */ []));
52
+ }, /* @ts-ignore */
53
+ ...(ngDevMode ? [{ debugName: "isRendering" }] : /* istanbul ignore next */ []));
46
54
  this.isHydrating = computed(() => {
47
55
  this.widgetsRevision();
48
56
  return Array.from(this.widgets.values()).some((widget) => widget.isHydrating());
49
- }, ...(ngDevMode ? [{ debugName: "isHydrating" }] : /* istanbul ignore next */ []));
50
- this.isBusy = computed(() => this.isRendering() || this.isHydrating(), ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
57
+ }, /* @ts-ignore */
58
+ ...(ngDevMode ? [{ debugName: "isHydrating" }] : /* istanbul ignore next */ []));
59
+ this.isBusy = computed(() => this.isRendering() || this.isHydrating(), /* @ts-ignore */
60
+ ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
51
61
  this.isStructureReady = computed(() => {
52
62
  this.widgetsRevision();
53
63
  const widgets = Array.from(this.widgets.values());
@@ -55,8 +65,10 @@ class AXPWidgetCoreService {
55
65
  return false;
56
66
  }
57
67
  return widgets.every((widget) => widget.status() === AXPWidgetStatus.Rendered);
58
- }, ...(ngDevMode ? [{ debugName: "isStructureReady" }] : /* istanbul ignore next */ []));
59
- this.dirtyWidgetsRevision = signal(0, ...(ngDevMode ? [{ debugName: "dirtyWidgetsRevision" }] : /* istanbul ignore next */ []));
68
+ }, /* @ts-ignore */
69
+ ...(ngDevMode ? [{ debugName: "isStructureReady" }] : /* istanbul ignore next */ []));
70
+ this.dirtyWidgetsRevision = signal(0, /* @ts-ignore */
71
+ ...(ngDevMode ? [{ debugName: "dirtyWidgetsRevision" }] : /* istanbul ignore next */ []));
60
72
  this.dirtyWidgetsRevisionSignal = this.dirtyWidgetsRevision.asReadonly();
61
73
  effect(() => {
62
74
  this.widgetsRevision();
@@ -199,13 +211,19 @@ class AXPWidgetCoreService {
199
211
  this.dirtyWidgetsRevision.update((value) => value + 1);
200
212
  }
201
213
  ngOnDestroy() { }
202
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
203
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreService }); }
214
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetCoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
215
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetCoreService }); }
204
216
  }
205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreService, decorators: [{
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetCoreService, decorators: [{
206
218
  type: Injectable
207
219
  }], ctorParameters: () => [] });
208
220
 
221
+ /** Seeded catalog entity for query metadata (same key as query.props). */
222
+ const QUERY_DEFINITION_ENTITY$1 = 'PlatformManagement.QueryDefinition';
223
+ /** UI default when the select control has not yet sent `take`. */
224
+ const DEFAULT_QUERY_PAGE_SIZE = 10;
225
+ /** Shared in-flight/completed QueryDefinition fetches (one API per query key). */
226
+ const queryDefinitionCache = new Map();
209
227
  class AXPBaseWidgetComponent extends AXPWidgetCoreElement {
210
228
  constructor() {
211
229
  super(...arguments);
@@ -229,21 +247,27 @@ class AXPBaseWidgetComponent extends AXPWidgetCoreElement {
229
247
  this.node = this.token.node;
230
248
  this.name = this.token.node.name;
231
249
  this.component = this;
232
- this._options = signal(this.token.options ?? {}, ...(ngDevMode ? [{ debugName: "_options" }] : /* istanbul ignore next */ []));
250
+ this._options = signal(this.token.options ?? {}, /* @ts-ignore */
251
+ ...(ngDevMode ? [{ debugName: "_options" }] : /* istanbul ignore next */ []));
233
252
  this.options = this._options.asReadonly();
234
253
  this.onOptionsChanged = new Subject();
235
- this._status = signal(AXPWidgetStatus.Rendering, ...(ngDevMode ? [{ debugName: "_status" }] : /* istanbul ignore next */ []));
254
+ this._status = signal(AXPWidgetStatus.Rendering, /* @ts-ignore */
255
+ ...(ngDevMode ? [{ debugName: "_status" }] : /* istanbul ignore next */ []));
236
256
  this.status = this._status.asReadonly();
237
257
  this.onStatusChanged = new BehaviorSubject(this._status());
238
258
  /** Depth counter so nested async hydration calls share one busy state. */
239
259
  this.hydrationDepth = 0;
240
- this._isHydrating = signal(false, ...(ngDevMode ? [{ debugName: "_isHydrating" }] : /* istanbul ignore next */ []));
260
+ this._isHydrating = signal(false, /* @ts-ignore */
261
+ ...(ngDevMode ? [{ debugName: "_isHydrating" }] : /* istanbul ignore next */ []));
241
262
  this.isHydrating = this._isHydrating.asReadonly();
242
263
  this.#statusEffect = effect(() => {
243
264
  this.onStatusChanged.next(this.status());
244
- }, ...(ngDevMode ? [{ debugName: "#statusEffect" }] : /* istanbul ignore next */ []));
245
- this.isBusy = computed(() => this.status() === AXPWidgetStatus.Rendering || this.isHydrating(), ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
246
- this._children = signal(this.token.node.children ?? [], ...(ngDevMode ? [{ debugName: "_children" }] : /* istanbul ignore next */ []));
265
+ }, /* @ts-ignore */
266
+ ...(ngDevMode ? [{ debugName: "#statusEffect" }] : /* istanbul ignore next */ []));
267
+ this.isBusy = computed(() => this.status() === AXPWidgetStatus.Rendering || this.isHydrating(), /* @ts-ignore */
268
+ ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
269
+ this._children = signal(this.token.node.children ?? [], /* @ts-ignore */
270
+ ...(ngDevMode ? [{ debugName: "_children" }] : /* istanbul ignore next */ []));
247
271
  this.children = this._children.asReadonly();
248
272
  }
249
273
  /** Unregisters this widget from the container registry when the instance is destroyed. */
@@ -311,10 +335,10 @@ class AXPBaseWidgetComponent extends AXPWidgetCoreElement {
311
335
  this._children.set([...children]);
312
336
  }
313
337
  onAdded() { }
314
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
315
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBaseWidgetComponent }); }
338
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
339
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBaseWidgetComponent }); }
316
340
  }
317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBaseWidgetComponent, decorators: [{
341
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBaseWidgetComponent, decorators: [{
318
342
  type: Injectable
319
343
  }] });
320
344
  class AXPLayoutBaseWidgetComponent extends AXPBaseWidgetComponent {
@@ -325,10 +349,10 @@ class AXPLayoutBaseWidgetComponent extends AXPBaseWidgetComponent {
325
349
  }
326
350
  super.ngOnInit();
327
351
  }
328
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLayoutBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
329
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLayoutBaseWidgetComponent }); }
352
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLayoutBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
353
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLayoutBaseWidgetComponent }); }
330
354
  }
331
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLayoutBaseWidgetComponent, decorators: [{
355
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPLayoutBaseWidgetComponent, decorators: [{
332
356
  type: Injectable
333
357
  }] });
334
358
  class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
@@ -339,8 +363,10 @@ class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
339
363
  this._isValueWidget = false;
340
364
  this.isValueWidget = () => this._isValueWidget;
341
365
  this.onValueChanged = new Subject();
342
- this.fullPath = signal(null, ...(ngDevMode ? [{ debugName: "fullPath" }] : /* istanbul ignore next */ []));
343
- this.parentPath = signal(null, ...(ngDevMode ? [{ debugName: "parentPath" }] : /* istanbul ignore next */ []));
366
+ this.fullPath = signal(null, /* @ts-ignore */
367
+ ...(ngDevMode ? [{ debugName: "fullPath" }] : /* istanbul ignore next */ []));
368
+ this.parentPath = signal(null, /* @ts-ignore */
369
+ ...(ngDevMode ? [{ debugName: "parentPath" }] : /* istanbul ignore next */ []));
344
370
  this.getValue = computed(() => {
345
371
  return this.fullPath() ? this.extractValue(this.fullPath()) : null;
346
372
  }, { ...(ngDevMode ? { debugName: "getValue" } : /* istanbul ignore next */ {}), equal: isEqual });
@@ -356,18 +382,28 @@ class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
356
382
  message: c.message,
357
383
  options: c.options,
358
384
  }));
359
- }, ...(ngDevMode ? [{ debugName: "validationRules" }] : /* istanbul ignore next */ []));
360
- this.hasRequiredValidation = computed(() => this.validationRules().some((rule) => rule.rule === 'required'), ...(ngDevMode ? [{ debugName: "hasRequiredValidation" }] : /* istanbul ignore next */ []));
361
- this.hasClearButton = computed(() => this.resolveClearButtonOption('hasClearButton'), ...(ngDevMode ? [{ debugName: "hasClearButton" }] : /* istanbul ignore next */ []));
362
- this.clearButton = computed(() => this.resolveClearButtonOption('clearButton'), ...(ngDevMode ? [{ debugName: "clearButton" }] : /* istanbul ignore next */ []));
385
+ }, /* @ts-ignore */
386
+ ...(ngDevMode ? [{ debugName: "validationRules" }] : /* istanbul ignore next */ []));
387
+ this.hasRequiredValidation = computed(() => this.validationRules().some((rule) => rule.rule === 'required'), /* @ts-ignore */
388
+ ...(ngDevMode ? [{ debugName: "hasRequiredValidation" }] : /* istanbul ignore next */ []));
389
+ this.hasClearButton = computed(() => this.resolveClearButtonOption('hasClearButton'), /* @ts-ignore */
390
+ ...(ngDevMode ? [{ debugName: "hasClearButton" }] : /* istanbul ignore next */ []));
391
+ this.clearButton = computed(() => this.resolveClearButtonOption('clearButton'), /* @ts-ignore */
392
+ ...(ngDevMode ? [{ debugName: "clearButton" }] : /* istanbul ignore next */ []));
363
393
  }
364
394
  ngOnInit() {
365
395
  this._isValueWidget = this.config.properties?.some((c) => c.name == 'path') ?? false;
366
396
  if (this.isValueWidget()) {
367
397
  this.detectFullPath();
368
- // Set defaultValue if it exists and the path doesn't exist in context
369
- if (!isNil(this.defaultValue) && this.fullPath() && !this.contextService.hasValue(this.fullPath())) {
370
- this.applyDefaultValue(this.defaultValue);
398
+ // Set defaultValue when path is empty, or still holds an unevaluated expression string
399
+ if (!isNil(this.defaultValue) && this.fullPath()) {
400
+ const path = this.fullPath();
401
+ const existing = this.contextService.getValue(path);
402
+ const nodeDefault = this.token.node.defaultValue;
403
+ const existingIsUnevaluatedExpression = typeof existing === 'string' && typeof nodeDefault === 'string' && existing === nodeDefault;
404
+ if (!this.contextService.hasValue(path) || existingIsUnevaluatedExpression) {
405
+ this.applyDefaultValue(this.defaultValue);
406
+ }
371
407
  }
372
408
  }
373
409
  //
@@ -421,18 +457,13 @@ class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
421
457
  return;
422
458
  }
423
459
  const savedAtPath = this.contextService.getSavedValue(path);
424
- if (this.contextService.isSavedCommitted() &&
425
- isSelectionValueEqual(value, savedAtPath) &&
426
- !isFormValueEqual(value, savedAtPath)) {
460
+ if (this.contextService.isSavedCommitted() && isSelectionValueEqual(value, savedAtPath) && !isFormValueEqual(value, savedAtPath)) {
427
461
  this.contextService.update(path, cloneDeep(savedAtPath), { origin: 'system' });
428
462
  this.onValueChanged.next({ sender: this });
429
463
  return;
430
464
  }
431
465
  // Reordered arrays must persist even when items are deep-equal (e.g. empty row objects).
432
- const isArrayReorder = Array.isArray(oldValue) &&
433
- Array.isArray(value) &&
434
- oldValue.length === value.length &&
435
- oldValue.some((v, i) => v !== value[i]);
466
+ const isArrayReorder = Array.isArray(oldValue) && Array.isArray(value) && oldValue.length === value.length && oldValue.some((v, i) => v !== value[i]);
436
467
  const isArrayLengthChange = Array.isArray(value) && (!Array.isArray(oldValue) || value.length !== oldValue.length);
437
468
  if (!isArrayReorder && !isArrayLengthChange && isFormValueEqual(oldValue, value)) {
438
469
  return;
@@ -479,24 +510,33 @@ class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
479
510
  this.setValue(e.value);
480
511
  }
481
512
  }
482
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPValueWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
483
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPValueWidgetComponent }); }
513
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPValueWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
514
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPValueWidgetComponent }); }
484
515
  }
485
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPValueWidgetComponent, decorators: [{
516
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPValueWidgetComponent, decorators: [{
486
517
  type: Injectable
487
518
  }] });
488
519
  class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
489
520
  constructor() {
490
521
  super(...arguments);
491
- this.registryDataSourceQuery = inject(AXPDataSourceQueryService);
492
- this.textField = computed(() => this.options()['textField'] ?? 'title', ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
493
- this.valueField = computed(() => this.options()['valueField'] ?? 'id', ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
494
- this.textTemplate = computed(() => isNil(this.options()['textTemplate'])
495
- ? undefined
496
- : this.options()['textTemplate'].replace(/{/g, '{{').replace(/}/g, '}}'), ...(ngDevMode ? [{ debugName: "textTemplate" }] : /* istanbul ignore next */ []));
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(() => {
522
+ this.queryService = inject(AXPQueryService);
523
+ /** Last QueryDefinition row loaded for a string `options.dataSource` key. */
524
+ this.loadedQueryDefinition = signal(null, /* @ts-ignore */
525
+ ...(ngDevMode ? [{ debugName: "loadedQueryDefinition" }] : /* istanbul ignore next */ []));
526
+ this.textField = computed(() => this.options()['textField'] ??
527
+ this.loadedQueryDefinition()?.binding?.textField ??
528
+ 'title', /* @ts-ignore */
529
+ ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
530
+ this.valueField = computed(() => this.options()['valueField'] ??
531
+ this.loadedQueryDefinition()?.binding?.valueField ??
532
+ 'id', /* @ts-ignore */
533
+ ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
534
+ this.textTemplate = computed(() => (isNil(this.options()['textTemplate']) ? undefined : this.options()['textTemplate'].replace(/{/g, '{{').replace(/}/g, '}}')), /* @ts-ignore */
535
+ ...(ngDevMode ? [{ debugName: "textTemplate" }] : /* istanbul ignore next */ []));
536
+ this.dataSource = signal(convertArrayToDataSource([]), /* @ts-ignore */
537
+ ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
538
+ /** Query key from options, when options.dataSource is a string or `{ id }` object. */
539
+ this.queryDataSourceName = computed(() => {
500
540
  const rawValue = this.options()['dataSource'];
501
541
  if (typeof rawValue === 'string') {
502
542
  return rawValue;
@@ -505,101 +545,53 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
505
545
  return String(rawValue['id']);
506
546
  }
507
547
  return null;
508
- }, ...(ngDevMode ? [{ debugName: "registryDataSourceName" }] : /* istanbul ignore next */ []));
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 */ []));
548
+ }, /* @ts-ignore */
549
+ ...(ngDevMode ? [{ debugName: "queryDataSourceName" }] : /* istanbul ignore next */ []));
550
+ this.selectedItems = signal([], /* @ts-ignore */
551
+ ...(ngDevMode ? [{ debugName: "selectedItems" }] : /* istanbul ignore next */ []));
552
+ /** Reactive flag: query-backed datasource finished resolving (success or failure). */
553
+ this.queryDataSourceReady = signal(false, /* @ts-ignore */
554
+ ...(ngDevMode ? [{ debugName: "queryDataSourceReady" }] : /* istanbul ignore next */ []));
555
+ /** Reactive bump to reload query-backed datasources (e.g. after locale change). */
556
+ this.queryRefreshEpoch = signal(0, /* @ts-ignore */
557
+ ...(ngDevMode ? [{ debugName: "queryRefreshEpoch" }] : /* istanbul ignore next */ []));
514
558
  //#region ---- DataSource Loading Effect ----
515
559
  /**
516
560
  * Track the last loaded string dataSource reference to prevent infinite loops
517
561
  * Only used for string-based datasources (not arrays or AXDataSource instances)
518
562
  */
519
563
  this.lastStringDataSourceRef = null;
520
- this.rf = effect(async () => {
564
+ /** Drops stale QueryDefinition responses when options/epoch change mid-flight. */
565
+ this.dataSourceLoadGeneration = 0;
566
+ this.rf = effect(() => {
521
567
  const rawValue = this.options()['dataSource'];
522
- const registryId = this.registryDataSourceName();
523
- this.registryRefreshEpoch();
524
- // For string datasources: prevent infinite loop by checking reference
568
+ const registryId = this.queryDataSourceName();
569
+ this.queryRefreshEpoch();
570
+ // For string datasources: skip duplicate runs of the same key (do not mark ready —
571
+ // a sibling options() emit must not hide the skeleton before the first load finishes).
525
572
  if (typeof rawValue === 'string') {
526
573
  if (rawValue === this.lastStringDataSourceRef) {
527
- if (registryId) {
528
- this.registryDataSourceReady.set(true);
529
- }
530
574
  return;
531
575
  }
532
576
  this.lastStringDataSourceRef = rawValue;
533
577
  }
534
578
  else {
535
- // Reset string reference when dataSource changes to non-string
536
579
  this.lastStringDataSourceRef = null;
537
580
  }
581
+ const generation = ++this.dataSourceLoadGeneration;
538
582
  if (registryId) {
539
- this.registryDataSourceReady.set(false);
583
+ this.queryDataSourceReady.set(false);
540
584
  }
541
585
  this.beginHydration();
542
- try {
543
- // Process dataSource creation in untracked context
544
- await untracked(async () => {
545
- if (rawValue instanceof AXDataSource) {
546
- // For AXDataSource instances, check if config changed
547
- if (!isEqual(rawValue.config, this.dataSource().config)) {
548
- this.dataSource.set(rawValue);
549
- }
550
- this.registryDataSourceReady.set(true);
551
- }
552
- // static array datasource - always recreate when options change
553
- else if (Array.isArray(rawValue)) {
554
- const ds = new AXDataSource({
555
- key: this.valueField(),
556
- pageSize: 10,
557
- load: async (e) => {
558
- const raw = this.options()['dataSource'];
559
- const skip = e.skip ?? 0;
560
- const take = e.take ?? raw.length;
561
- return {
562
- items: raw.slice(skip, skip + take),
563
- total: raw.length,
564
- };
565
- },
566
- byKey: (key) => {
567
- const raw = this.options()['dataSource'];
568
- const item = raw.filter((c) => c[this.valueField()] == key);
569
- return Promise.resolve(item[0]);
570
- },
571
- });
572
- this.dataSource.set(ds);
573
- this.registryDataSourceReady.set(true);
574
- }
575
- // resolve data source by name (string or object with id)
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));
581
- }
582
- else {
583
- this.dataSource.set(convertArrayToDataSource([]));
584
- }
585
- this.registryDataSourceReady.set(true);
586
- }
587
- // empty datasource
588
- else {
589
- this.dataSource.set(convertArrayToDataSource([]));
590
- this.registryDataSourceReady.set(true);
591
- }
592
- });
593
- }
594
- finally {
595
- this.endHydration();
596
- }
597
- }, ...(ngDevMode ? [{ debugName: "rf" }] : /* istanbul ignore next */ []));
586
+ void untracked(() => this.applyDataSource(rawValue, registryId, generation));
587
+ }, /* @ts-ignore */
588
+ ...(ngDevMode ? [{ debugName: "rf" }] : /* istanbul ignore next */ []));
598
589
  this.effect2 = effect(() => {
599
- const registryName = this.registryDataSourceName();
590
+ const registryName = this.queryDataSourceName();
600
591
  const value = this.resolveSelectedItemsValue();
601
- const registryReady = this.registryDataSourceReady();
592
+ const registryReady = this.queryDataSourceReady();
602
593
  this.dataSource();
594
+ this.loadedQueryDefinition();
603
595
  if (registryName && !registryReady) {
604
596
  return;
605
597
  }
@@ -620,43 +612,193 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
620
612
  }
621
613
  };
622
614
  void resolveSelectedItems();
623
- }, ...(ngDevMode ? [{ debugName: "effect2" }] : /* istanbul ignore next */ []));
624
- }
625
- buildRegistryQueryOptions() {
626
- return {
627
- valueField: this.valueField(),
628
- useSamples: this.mode === 'designer',
629
- };
615
+ }, /* @ts-ignore */
616
+ ...(ngDevMode ? [{ debugName: "effect2" }] : /* istanbul ignore next */ []));
630
617
  }
631
618
  //#endregion
619
+ async applyDataSource(rawValue, registryId, generation) {
620
+ try {
621
+ if (rawValue instanceof AXDataSource) {
622
+ this.loadedQueryDefinition.set(null);
623
+ if (!isEqual(rawValue.config, this.dataSource().config)) {
624
+ this.dataSource.set(rawValue);
625
+ }
626
+ this.queryDataSourceReady.set(true);
627
+ return;
628
+ }
629
+ if (Array.isArray(rawValue)) {
630
+ this.loadedQueryDefinition.set(null);
631
+ const ds = new AXDataSource({
632
+ key: this.valueField(),
633
+ pageSize: DEFAULT_QUERY_PAGE_SIZE,
634
+ load: async (e) => {
635
+ const raw = this.options()['dataSource'];
636
+ const skip = e.skip ?? 0;
637
+ const take = e.take ?? raw.length;
638
+ return {
639
+ items: raw.slice(skip, skip + take),
640
+ total: raw.length,
641
+ };
642
+ },
643
+ byKey: (key) => {
644
+ const raw = this.options()['dataSource'];
645
+ const item = raw.filter((c) => c[this.valueField()] == key);
646
+ return Promise.resolve(item[0]);
647
+ },
648
+ });
649
+ this.dataSource.set(ds);
650
+ this.queryDataSourceReady.set(true);
651
+ return;
652
+ }
653
+ if (registryId) {
654
+ // Query fetch does not need the catalog row — bind immediately, enrich when it arrives.
655
+ this.loadedQueryDefinition.set(null);
656
+ this.dataSource.set(this.createQueryDataSource(registryId, null));
657
+ this.queryDataSourceReady.set(true);
658
+ }
659
+ else {
660
+ this.loadedQueryDefinition.set(null);
661
+ this.dataSource.set(convertArrayToDataSource([]));
662
+ this.queryDataSourceReady.set(true);
663
+ }
664
+ }
665
+ finally {
666
+ this.endHydration();
667
+ }
668
+ if (!registryId || generation !== this.dataSourceLoadGeneration) {
669
+ return;
670
+ }
671
+ const definition = await this.loadQueryDefinition(registryId);
672
+ if (generation !== this.dataSourceLoadGeneration) {
673
+ return;
674
+ }
675
+ this.loadedQueryDefinition.set(definition);
676
+ if (definition && this.shouldRebuildQueryDataSource(definition)) {
677
+ this.dataSource.set(this.createQueryDataSource(registryId, definition));
678
+ }
679
+ }
680
+ /**
681
+ * Loads {@link QUERY_DEFINITION_ENTITY} via {@link ENTITY_GET_BY_ID_DEFAULT}.
682
+ * Catalog row `id` matches the runtime query key.
683
+ */
684
+ async loadQueryDefinition(queryKey) {
685
+ const cached = queryDefinitionCache.get(queryKey);
686
+ if (cached) {
687
+ return cached;
688
+ }
689
+ const pending = this.fetchQueryDefinition(queryKey);
690
+ queryDefinitionCache.set(queryKey, pending);
691
+ try {
692
+ return await pending;
693
+ }
694
+ catch {
695
+ queryDefinitionCache.delete(queryKey);
696
+ return null;
697
+ }
698
+ }
699
+ async fetchQueryDefinition(queryKey) {
700
+ try {
701
+ const result = await this.queryService.fetch(ENTITY_GET_BY_ID_DEFAULT, {
702
+ entity: QUERY_DEFINITION_ENTITY$1,
703
+ id: queryKey,
704
+ });
705
+ if (!result?.success) {
706
+ return null;
707
+ }
708
+ return runtimeQueryPayloadData(result) ?? null;
709
+ }
710
+ catch {
711
+ return null;
712
+ }
713
+ }
632
714
  /**
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.
715
+ * Recreate the query {@link AXDataSource} only when catalog metadata would change
716
+ * `byKey` / paging / key field beyond what widget options already provide.
635
717
  */
636
- isolateRegistryDataSource(source) {
637
- const config = source.config;
638
- if (!config?.load) {
639
- return source;
718
+ shouldRebuildQueryDataSource(definition) {
719
+ const options = this.options();
720
+ if (definition.byKeyQuery) {
721
+ return true;
722
+ }
723
+ if (options['valueField'] == null && definition.binding?.valueField) {
724
+ return true;
725
+ }
726
+ if (options['pageSize'] == null &&
727
+ definition.paging?.enabled === true &&
728
+ typeof definition.paging.definition?.pageSize === 'number' &&
729
+ Number.isFinite(definition.paging.definition.pageSize) &&
730
+ definition.paging.definition.pageSize > 0) {
731
+ return true;
640
732
  }
641
- const originalLoad = config.load.bind(source);
642
- const originalByKey = config.byKey?.bind(source);
733
+ return false;
734
+ }
735
+ /**
736
+ * Builds a per-widget {@link AXDataSource} from optional QueryDefinition metadata + {@link AXPQueryService.fetch}.
737
+ */
738
+ createQueryDataSource(queryKey, definition) {
739
+ const valueField = this.options()['valueField'] ??
740
+ definition?.binding?.valueField ??
741
+ 'id';
742
+ const definitionPageSize = definition?.paging?.enabled === true &&
743
+ typeof definition.paging.definition?.pageSize === 'number' &&
744
+ Number.isFinite(definition.paging.definition.pageSize) &&
745
+ definition.paging.definition.pageSize > 0
746
+ ? Math.floor(definition.paging.definition.pageSize)
747
+ : undefined;
748
+ const pageSize = this.options()['pageSize'] ??
749
+ definitionPageSize ??
750
+ DEFAULT_QUERY_PAGE_SIZE;
751
+ const byKeyQuery = definition?.byKeyQuery;
643
752
  return new AXDataSource({
644
- pageSize: config.pageSize,
645
- key: config.key,
646
- load: (event) => originalLoad(event),
647
- byKey: originalByKey ? (key) => originalByKey(key) : undefined,
753
+ key: valueField,
754
+ pageSize,
755
+ load: async (event) => {
756
+ const result = await this.queryService.fetch(queryKey, {
757
+ skip: event.skip ?? 0,
758
+ take: event.take ?? pageSize,
759
+ filter: event.filter,
760
+ sort: event.sort,
761
+ });
762
+ const page = runtimeQueryCollectionData(result);
763
+ return {
764
+ items: page?.items ?? [],
765
+ total: page?.total ?? 0,
766
+ };
767
+ },
768
+ byKey: async (key) => {
769
+ if (isNil(key)) {
770
+ return null;
771
+ }
772
+ if (byKeyQuery) {
773
+ const result = await this.queryService.fetch(byKeyQuery, {
774
+ [valueField]: key,
775
+ });
776
+ return runtimeQueryPayloadData(result) ?? null;
777
+ }
778
+ const result = await this.queryService.fetch(queryKey, {
779
+ skip: 0,
780
+ take: 1,
781
+ filter: {
782
+ field: valueField,
783
+ operator: { type: 'equal' },
784
+ value: key,
785
+ },
786
+ });
787
+ const page = runtimeQueryCollectionData(result);
788
+ return page?.items?.[0] ?? null;
789
+ },
648
790
  });
649
791
  }
650
- /** Invalidates cached registry datasource and forces a reload on the next effect run. */
792
+ /** Forces a reload of the query-backed datasource on the next effect run. */
651
793
  refreshRegistryDataSource() {
652
- const registryId = this.registryDataSourceName();
794
+ const registryId = this.queryDataSourceName();
653
795
  if (!registryId) {
654
796
  return;
655
797
  }
656
- this.registryDataSourceQuery.invalidate(registryId);
798
+ queryDefinitionCache.delete(registryId);
657
799
  this.lastStringDataSourceRef = null;
658
- this.registryDataSourceReady.set(false);
659
- this.registryRefreshEpoch.update((epoch) => epoch + 1);
800
+ this.queryDataSourceReady.set(false);
801
+ this.queryRefreshEpoch.update((epoch) => epoch + 1);
660
802
  }
661
803
  async extractItem(item) {
662
804
  if (isNil(item)) {
@@ -666,13 +808,6 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
666
808
  return item;
667
809
  }
668
810
  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
- }
676
811
  const ds = this.dataSource();
677
812
  if (ds.config?.byKey) {
678
813
  const found = await ds.config?.byKey(key);
@@ -713,10 +848,10 @@ class AXPColumnWidgetComponent {
713
848
  return this.rawValue;
714
849
  };
715
850
  }
716
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColumnWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
717
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColumnWidgetComponent }); }
851
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPColumnWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
852
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPColumnWidgetComponent }); }
718
853
  }
719
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColumnWidgetComponent, decorators: [{
854
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPColumnWidgetComponent, decorators: [{
720
855
  type: Injectable
721
856
  }] });
722
857
 
@@ -745,7 +880,8 @@ class AXPBoxModelLayoutWidgetComponent extends AXPLayoutBaseWidgetComponent {
745
880
  style['overflow-y'] = overflowY ?? '';
746
881
  style['direction'] = direction ?? '';
747
882
  return style;
748
- }, ...(ngDevMode ? [{ debugName: "hostBoxStyle" }] : /* istanbul ignore next */ []));
883
+ }, /* @ts-ignore */
884
+ ...(ngDevMode ? [{ debugName: "hostBoxStyle" }] : /* istanbul ignore next */ []));
749
885
  this.blockStyle = computed(() => {
750
886
  const options = this.options();
751
887
  const style = { ...this.hostBoxStyle() };
@@ -762,47 +898,54 @@ class AXPBoxModelLayoutWidgetComponent extends AXPLayoutBaseWidgetComponent {
762
898
  style['height'] = height ?? '';
763
899
  style['max-height'] = maxHeight ?? '';
764
900
  return style;
765
- }, ...(ngDevMode ? [{ debugName: "blockStyle" }] : /* istanbul ignore next */ []));
901
+ }, /* @ts-ignore */
902
+ ...(ngDevMode ? [{ debugName: "blockStyle" }] : /* istanbul ignore next */ []));
766
903
  this.inlineStyle = computed(() => {
767
904
  return { ...this.hostBoxStyle() };
768
- }, ...(ngDevMode ? [{ debugName: "inlineStyle" }] : /* istanbul ignore next */ []));
905
+ }, /* @ts-ignore */
906
+ ...(ngDevMode ? [{ debugName: "inlineStyle" }] : /* istanbul ignore next */ []));
769
907
  this.blockClass = computed(() => {
770
908
  return {
771
909
  block: true,
772
910
  'w-full': true,
773
911
  // 'ax-widget-outline': true,
774
912
  };
775
- }, ...(ngDevMode ? [{ debugName: "blockClass" }] : /* istanbul ignore next */ []));
913
+ }, /* @ts-ignore */
914
+ ...(ngDevMode ? [{ debugName: "blockClass" }] : /* istanbul ignore next */ []));
776
915
  this.inlineClass = computed(() => {
777
916
  return {
778
917
  'inline-block': false,
779
918
  };
780
- }, ...(ngDevMode ? [{ debugName: "inlineClass" }] : /* istanbul ignore next */ []));
919
+ }, /* @ts-ignore */
920
+ ...(ngDevMode ? [{ debugName: "inlineClass" }] : /* istanbul ignore next */ []));
781
921
  }
782
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
783
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent }); }
922
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
923
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent }); }
784
924
  }
785
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, decorators: [{
925
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, decorators: [{
786
926
  type: Injectable
787
927
  }] });
788
928
 
789
929
  class AXPBlockBaseLayoutWidgetComponent extends AXPBoxModelLayoutWidgetComponent {
790
930
  constructor() {
791
931
  super(...arguments);
792
- this.hostClass = computed(() => this.blockClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
793
- this.hostStyle = computed(() => this.blockStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
932
+ this.hostClass = computed(() => this.blockClass(), /* @ts-ignore */
933
+ ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
934
+ this.hostStyle = computed(() => this.blockStyle(), /* @ts-ignore */
935
+ ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
794
936
  }
795
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
796
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent }); }
937
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
938
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent }); }
797
939
  }
798
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, decorators: [{
940
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, decorators: [{
799
941
  type: Injectable
800
942
  }] });
801
943
 
802
944
  class AXPFlexBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {
803
945
  constructor() {
804
946
  super(...arguments);
805
- this.flex = computed(() => this.options(), ...(ngDevMode ? [{ debugName: "flex" }] : /* istanbul ignore next */ []));
947
+ this.flex = computed(() => this.options(), /* @ts-ignore */
948
+ ...(ngDevMode ? [{ debugName: "flex" }] : /* istanbul ignore next */ []));
806
949
  this.hostFlexStyle = computed(() => {
807
950
  const blockStyle = this.blockStyle();
808
951
  const style = { ...blockStyle };
@@ -841,45 +984,52 @@ class AXPFlexBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent
841
984
  style['gap'] = flex.gap;
842
985
  }
843
986
  return style;
844
- }, ...(ngDevMode ? [{ debugName: "hostFlexStyle" }] : /* istanbul ignore next */ []));
987
+ }, /* @ts-ignore */
988
+ ...(ngDevMode ? [{ debugName: "hostFlexStyle" }] : /* istanbul ignore next */ []));
845
989
  this.hostFlexClass = computed(() => {
846
990
  return {
847
991
  ...this.blockClass(),
848
992
  'flex': true,
849
993
  'h-full': true,
850
994
  };
851
- }, ...(ngDevMode ? [{ debugName: "hostFlexClass" }] : /* istanbul ignore next */ []));
995
+ }, /* @ts-ignore */
996
+ ...(ngDevMode ? [{ debugName: "hostFlexClass" }] : /* istanbul ignore next */ []));
852
997
  this.hostClass = computed(() => {
853
998
  return this.hostFlexClass();
854
- }, ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
999
+ }, /* @ts-ignore */
1000
+ ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
855
1001
  this.hostStyle = computed(() => {
856
1002
  return this.hostFlexStyle();
857
- }, ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1003
+ }, /* @ts-ignore */
1004
+ ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
858
1005
  }
859
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
860
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent }); }
1006
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1007
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent }); }
861
1008
  }
862
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, decorators: [{
1009
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, decorators: [{
863
1010
  type: Injectable
864
1011
  }] });
865
1012
 
866
1013
  class AXPInlineBaseLayoutWidgetComponent extends AXPBoxModelLayoutWidgetComponent {
867
1014
  constructor() {
868
1015
  super(...arguments);
869
- this.hostClass = computed(() => this.inlineClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
870
- this.hostStyle = computed(() => this.inlineStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1016
+ this.hostClass = computed(() => this.inlineClass(), /* @ts-ignore */
1017
+ ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1018
+ this.hostStyle = computed(() => this.inlineStyle(), /* @ts-ignore */
1019
+ ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
871
1020
  }
872
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
873
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent }); }
1021
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1022
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent }); }
874
1023
  }
875
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, decorators: [{
1024
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, decorators: [{
876
1025
  type: Injectable
877
1026
  }] });
878
1027
 
879
1028
  class AXPFlexItemBaseLayoutWidgetComponent extends AXPInlineBaseLayoutWidgetComponent {
880
1029
  constructor() {
881
1030
  super(...arguments);
882
- this.flexItem = computed(() => this.options(), ...(ngDevMode ? [{ debugName: "flexItem" }] : /* istanbul ignore next */ []));
1031
+ this.flexItem = computed(() => this.options(), /* @ts-ignore */
1032
+ ...(ngDevMode ? [{ debugName: "flexItem" }] : /* istanbul ignore next */ []));
883
1033
  this.hostFlexItemStyle = computed(() => {
884
1034
  const inlineStyle = this.blockStyle();
885
1035
  const style = { ...inlineStyle };
@@ -915,37 +1065,43 @@ class AXPFlexItemBaseLayoutWidgetComponent extends AXPInlineBaseLayoutWidgetComp
915
1065
  style['align-self'] = fi.alignSelf;
916
1066
  }
917
1067
  return style;
918
- }, ...(ngDevMode ? [{ debugName: "hostFlexItemStyle" }] : /* istanbul ignore next */ []));
1068
+ }, /* @ts-ignore */
1069
+ ...(ngDevMode ? [{ debugName: "hostFlexItemStyle" }] : /* istanbul ignore next */ []));
919
1070
  this.hostFlexItemClass = computed(() => {
920
1071
  return {
921
1072
  ...this.blockClass(),
922
1073
  };
923
- }, ...(ngDevMode ? [{ debugName: "hostFlexItemClass" }] : /* istanbul ignore next */ []));
1074
+ }, /* @ts-ignore */
1075
+ ...(ngDevMode ? [{ debugName: "hostFlexItemClass" }] : /* istanbul ignore next */ []));
924
1076
  this.hostClass = computed(() => {
925
1077
  return this.hostFlexItemClass();
926
- }, ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1078
+ }, /* @ts-ignore */
1079
+ ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
927
1080
  this.hostStyle = computed(() => {
928
1081
  return this.hostFlexItemStyle();
929
- }, ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1082
+ }, /* @ts-ignore */
1083
+ ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
930
1084
  }
931
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
932
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent }); }
1085
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1086
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent }); }
933
1087
  }
934
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, decorators: [{
1088
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, decorators: [{
935
1089
  type: Injectable
936
1090
  }] });
937
1091
 
938
1092
  class AXPGridBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {
939
1093
  constructor() {
940
1094
  super(...arguments);
941
- this.grid = computed(() => this.options()?.['grid'], ...(ngDevMode ? [{ debugName: "grid" }] : /* istanbul ignore next */ []));
1095
+ this.grid = computed(() => this.options()?.['grid'], /* @ts-ignore */
1096
+ ...(ngDevMode ? [{ debugName: "grid" }] : /* istanbul ignore next */ []));
942
1097
  this.hostGridStyle = computed(() => {
943
1098
  const style = { ...this.inlineStyle() };
944
1099
  const g = this.grid()?.default;
945
1100
  if (g?.gap)
946
1101
  style['gap'] = g.gap;
947
1102
  return style;
948
- }, ...(ngDevMode ? [{ debugName: "hostGridStyle" }] : /* istanbul ignore next */ []));
1103
+ }, /* @ts-ignore */
1104
+ ...(ngDevMode ? [{ debugName: "hostGridStyle" }] : /* istanbul ignore next */ []));
949
1105
  this.hostGridClass = computed(() => {
950
1106
  const cls = {
951
1107
  ...this.inlineClass(),
@@ -962,21 +1118,25 @@ class AXPGridBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent
962
1118
  if (g?.autoFlow)
963
1119
  cls[`lg:grid-flow-${g.autoFlow}`] = true;
964
1120
  return cls;
965
- }, ...(ngDevMode ? [{ debugName: "hostGridClass" }] : /* istanbul ignore next */ []));
966
- this.hostClass = computed(() => this.hostGridClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
967
- this.hostStyle = computed(() => this.hostGridStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
968
- }
969
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
970
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent }); }
1121
+ }, /* @ts-ignore */
1122
+ ...(ngDevMode ? [{ debugName: "hostGridClass" }] : /* istanbul ignore next */ []));
1123
+ this.hostClass = computed(() => this.hostGridClass(), /* @ts-ignore */
1124
+ ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1125
+ this.hostStyle = computed(() => this.hostGridStyle(), /* @ts-ignore */
1126
+ ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1127
+ }
1128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1129
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent }); }
971
1130
  }
972
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, decorators: [{
1131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, decorators: [{
973
1132
  type: Injectable
974
1133
  }] });
975
1134
 
976
1135
  class AXPGridItemBaseLayoutWidgetComponent extends AXPFlexBaseLayoutWidgetComponent {
977
1136
  constructor() {
978
1137
  super(...arguments);
979
- this.gridItem = computed(() => this.options(), ...(ngDevMode ? [{ debugName: "gridItem" }] : /* istanbul ignore next */ []));
1138
+ this.gridItem = computed(() => this.options(), /* @ts-ignore */
1139
+ ...(ngDevMode ? [{ debugName: "gridItem" }] : /* istanbul ignore next */ []));
980
1140
  this.hostGridItemStyle = computed(() => {
981
1141
  const style = { ...this.hostFlexStyle() };
982
1142
  const g = this.gridItem();
@@ -985,7 +1145,8 @@ class AXPGridItemBaseLayoutWidgetComponent extends AXPFlexBaseLayoutWidgetCompon
985
1145
  if (g?.justifySelf)
986
1146
  style['justify-self'] = g.justifySelf;
987
1147
  return style;
988
- }, ...(ngDevMode ? [{ debugName: "hostGridItemStyle" }] : /* istanbul ignore next */ []));
1148
+ }, /* @ts-ignore */
1149
+ ...(ngDevMode ? [{ debugName: "hostGridItemStyle" }] : /* istanbul ignore next */ []));
989
1150
  this.hostGridItemClass = computed(() => {
990
1151
  const cls = { ...this.hostFlexClass() };
991
1152
  const g = this.gridItem();
@@ -1004,15 +1165,20 @@ class AXPGridItemBaseLayoutWidgetComponent extends AXPFlexBaseLayoutWidgetCompon
1004
1165
  cls[`lg:row-start-${g.rowStart}`] = true;
1005
1166
  if (g?.rowEnd)
1006
1167
  cls[`lg:row-end-${g.rowEnd}`] = true;
1168
+ if (g?.order != null)
1169
+ cls[`lg:order-${g.order}`] = true;
1007
1170
  return cls;
1008
- }, ...(ngDevMode ? [{ debugName: "hostGridItemClass" }] : /* istanbul ignore next */ []));
1009
- this.hostClass = computed(() => this.hostGridItemClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1010
- this.hostStyle = computed(() => this.hostGridItemStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1011
- }
1012
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1013
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent }); }
1171
+ }, /* @ts-ignore */
1172
+ ...(ngDevMode ? [{ debugName: "hostGridItemClass" }] : /* istanbul ignore next */ []));
1173
+ this.hostClass = computed(() => this.hostGridItemClass(), /* @ts-ignore */
1174
+ ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1175
+ this.hostStyle = computed(() => this.hostGridItemStyle(), /* @ts-ignore */
1176
+ ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1177
+ }
1178
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1179
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent }); }
1014
1180
  }
1015
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, decorators: [{
1181
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, decorators: [{
1016
1182
  type: Injectable
1017
1183
  }] });
1018
1184
 
@@ -1021,27 +1187,31 @@ class AXPTableBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponen
1021
1187
  super(...arguments);
1022
1188
  this.hostTableClass = computed(() => ({
1023
1189
  ...this.blockClass(),
1024
- }), ...(ngDevMode ? [{ debugName: "hostTableClass" }] : /* istanbul ignore next */ []));
1190
+ }), /* @ts-ignore */
1191
+ ...(ngDevMode ? [{ debugName: "hostTableClass" }] : /* istanbul ignore next */ []));
1025
1192
  this.hostTableStyle = computed(() => {
1026
1193
  const style = { ...this.blockStyle() };
1027
1194
  style['overflow-x'] = 'auto';
1028
1195
  return style;
1029
- }, ...(ngDevMode ? [{ debugName: "hostTableStyle" }] : /* istanbul ignore next */ []));
1030
- this.hostClass = computed(() => this.hostTableClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1031
- this.hostStyle = computed(() => this.hostTableStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1032
- }
1033
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1034
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent }); }
1196
+ }, /* @ts-ignore */
1197
+ ...(ngDevMode ? [{ debugName: "hostTableStyle" }] : /* istanbul ignore next */ []));
1198
+ this.hostClass = computed(() => this.hostTableClass(), /* @ts-ignore */
1199
+ ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1200
+ this.hostStyle = computed(() => this.hostTableStyle(), /* @ts-ignore */
1201
+ ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1202
+ }
1203
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1204
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent }); }
1035
1205
  }
1036
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent, decorators: [{
1206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent, decorators: [{
1037
1207
  type: Injectable
1038
1208
  }] });
1039
1209
 
1040
1210
  class AXPTableItemOpsBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {
1041
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1042
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent }); }
1211
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1212
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent }); }
1043
1213
  }
1044
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent, decorators: [{
1214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent, decorators: [{
1045
1215
  type: Injectable
1046
1216
  }] });
1047
1217
 
@@ -1051,18 +1221,22 @@ class AXPTableItemBaseLayoutWidgetComponent extends AXPTableItemOpsBaseLayoutWid
1051
1221
  this.colSpan = computed(() => {
1052
1222
  const v = this.options()?.colSpan;
1053
1223
  return v ? Math.max(1, v) : 1;
1054
- }, ...(ngDevMode ? [{ debugName: "colSpan" }] : /* istanbul ignore next */ []));
1224
+ }, /* @ts-ignore */
1225
+ ...(ngDevMode ? [{ debugName: "colSpan" }] : /* istanbul ignore next */ []));
1055
1226
  this.rowSpan = computed(() => {
1056
1227
  const v = this.options()?.rowSpan;
1057
1228
  return v ? Math.max(1, v) : 1;
1058
- }, ...(ngDevMode ? [{ debugName: "rowSpan" }] : /* istanbul ignore next */ []));
1059
- this.hostClass = computed(() => this.blockClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1060
- this.hostStyle = computed(() => this.blockStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1061
- }
1062
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1063
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent }); }
1229
+ }, /* @ts-ignore */
1230
+ ...(ngDevMode ? [{ debugName: "rowSpan" }] : /* istanbul ignore next */ []));
1231
+ this.hostClass = computed(() => this.blockClass(), /* @ts-ignore */
1232
+ ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1233
+ this.hostStyle = computed(() => this.blockStyle(), /* @ts-ignore */
1234
+ ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1235
+ }
1236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1237
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent }); }
1064
1238
  }
1065
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent, decorators: [{
1239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent, decorators: [{
1066
1240
  type: Injectable
1067
1241
  }] });
1068
1242
 
@@ -1141,10 +1315,10 @@ class AXPWidgetRegistryService {
1141
1315
  all() {
1142
1316
  return Array.from(this.ensureBuilt().values());
1143
1317
  }
1144
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1145
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetRegistryService, providedIn: 'root' }); }
1318
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1319
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetRegistryService, providedIn: 'root' }); }
1146
1320
  }
1147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetRegistryService, decorators: [{
1321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetRegistryService, decorators: [{
1148
1322
  type: Injectable,
1149
1323
  args: [{
1150
1324
  providedIn: 'root',
@@ -1157,8 +1331,10 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1157
1331
  this.widgetRegistery = inject(AXPWidgetRegistryService);
1158
1332
  this.grid = inject(AXBaseDataTable);
1159
1333
  this.expressionEvaluator = inject(AXPExpressionEvaluatorService);
1160
- this.mergedOptions = signal({}, ...(ngDevMode ? [{ debugName: "mergedOptions" }] : /* istanbul ignore next */ []));
1161
- this.loadingRow = signal(null, ...(ngDevMode ? [{ debugName: "loadingRow" }] : /* istanbul ignore next */ []));
1334
+ this.mergedOptions = signal({}, /* @ts-ignore */
1335
+ ...(ngDevMode ? [{ debugName: "mergedOptions" }] : /* istanbul ignore next */ []));
1336
+ this.loadingRow = signal(null, /* @ts-ignore */
1337
+ ...(ngDevMode ? [{ debugName: "loadingRow" }] : /* istanbul ignore next */ []));
1162
1338
  this.rowInjectorsCache = new Map();
1163
1339
  this.hasExpressions = false;
1164
1340
  this.pendingEvaluations = new Set();
@@ -1496,8 +1672,8 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1496
1672
  }
1497
1673
  return rowInjector;
1498
1674
  }
1499
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetColumnRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
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: [
1675
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetColumnRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1676
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", 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: [
1501
1677
  AXPWidgetCoreService,
1502
1678
  {
1503
1679
  provide: AXDataTableColumnComponent,
@@ -1595,9 +1771,9 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1595
1771
  </div>
1596
1772
  </ng-template>
1597
1773
  <ng-template #footer></ng-template>
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 }); }
1774
+ `, isInline: true, styles: ["@layer properties;.axp-widget-column-header--sortable{cursor:pointer}.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--sortable.axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}.axp-widget-column-header__caption{min-width:0px}.axp-widget-column-header__caption--with-sort{flex:1;flex:1 1 0}.axp-widget-column-header__sort{opacity:0;transition:opacity .15s ease}.axp-widget-column-header__sort-priority{--tw-leading: 1;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}@property --tw-leading{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial}}}\n/*! tailwindcss v4.3.3 | 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 }); }
1599
1775
  }
1600
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetColumnRendererComponent, decorators: [{
1776
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetColumnRendererComponent, decorators: [{
1601
1777
  type: Component,
1602
1778
  args: [{ selector: 'axp-widget-column-renderer', template: `
1603
1779
  <ng-template #header>
@@ -1697,7 +1873,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1697
1873
  provide: AXDataTableColumnComponent,
1698
1874
  useExisting: AXPWidgetColumnRendererComponent,
1699
1875
  },
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"] }]
1876
+ ], changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['caption'], standalone: false, styles: ["@layer properties;.axp-widget-column-header--sortable{cursor:pointer}.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--sortable.axp-widget-column-header--sort-active .axp-widget-column-header__sort{opacity:1}.axp-widget-column-header__caption{min-width:0px}.axp-widget-column-header__caption--with-sort{flex:1;flex:1 1 0}.axp-widget-column-header__sort{opacity:0;transition:opacity .15s ease}.axp-widget-column-header__sort-priority{--tw-leading: 1;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}@property --tw-leading{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
1701
1877
  }], propDecorators: { customExpandIcon: [{
1702
1878
  type: Input
1703
1879
  }], customCollapseIcon: [{
@@ -1755,17 +1931,22 @@ class AXPWidgetContainerComponent {
1755
1931
  this.debug = inject(AXPDebugService);
1756
1932
  this.onContextChanged = new EventEmitter();
1757
1933
  this.wasHydrating = false;
1758
- this.isSavedCommitted = computed(() => this.contextService.isSavedCommitted(), ...(ngDevMode ? [{ debugName: "isSavedCommitted" }] : /* istanbul ignore next */ []));
1934
+ this.isSavedCommitted = computed(() => this.contextService.isSavedCommitted(), /* @ts-ignore */
1935
+ ...(ngDevMode ? [{ debugName: "isSavedCommitted" }] : /* istanbul ignore next */ []));
1759
1936
  this.isFormDirty = computed(() => {
1760
1937
  if (!this.contextService.isSavedCommitted()) {
1761
1938
  return false;
1762
1939
  }
1763
1940
  this.contextService.data();
1764
1941
  return this.contextService.isDirty();
1765
- }, ...(ngDevMode ? [{ debugName: "isFormDirty" }] : /* istanbul ignore next */ []));
1766
- this.status = computed(() => this.builderService.status(), ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
1767
- this.isBusy = computed(() => this.builderService.isBusy(), ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
1768
- this.isHydrating = computed(() => this.builderService.isHydrating(), ...(ngDevMode ? [{ debugName: "isHydrating" }] : /* istanbul ignore next */ []));
1942
+ }, /* @ts-ignore */
1943
+ ...(ngDevMode ? [{ debugName: "isFormDirty" }] : /* istanbul ignore next */ []));
1944
+ this.status = computed(() => this.builderService.status(), /* @ts-ignore */
1945
+ ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
1946
+ this.isBusy = computed(() => this.builderService.isBusy(), /* @ts-ignore */
1947
+ ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
1948
+ this.isHydrating = computed(() => this.builderService.isHydrating(), /* @ts-ignore */
1949
+ ...(ngDevMode ? [{ debugName: "isHydrating" }] : /* istanbul ignore next */ []));
1769
1950
  /** True when registered widgets exist and none are rendering or hydrating. */
1770
1951
  this.isWidgetsReady = computed(() => {
1771
1952
  const count = this.builderService.registeredWidgetsCount();
@@ -1773,7 +1954,8 @@ class AXPWidgetContainerComponent {
1773
1954
  return false;
1774
1955
  }
1775
1956
  return this.builderService.isStructureReady() && !this.builderService.isBusy();
1776
- }, ...(ngDevMode ? [{ debugName: "isWidgetsReady" }] : /* istanbul ignore next */ []));
1957
+ }, /* @ts-ignore */
1958
+ ...(ngDevMode ? [{ debugName: "isWidgetsReady" }] : /* istanbul ignore next */ []));
1777
1959
  effect(() => {
1778
1960
  const isDirty = this.isFormDirty();
1779
1961
  const data = this.contextService.data();
@@ -1781,13 +1963,19 @@ class AXPWidgetContainerComponent {
1781
1963
  if (!this.contextService.isChanged() && this.lastEmittedFormDirty === isDirty) {
1782
1964
  return;
1783
1965
  }
1966
+ const prevEmittedFormDirty = this.lastEmittedFormDirty;
1784
1967
  this.lastEmittedFormDirty = isDirty;
1785
1968
  this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'isFormDirty changed', () => ({
1786
1969
  isFormDirty: isDirty,
1970
+ prevEmittedFormDirty,
1787
1971
  userEditedSinceCommit: this.contextService.hasUserEditedSinceCommit(),
1788
1972
  isSavedCommitted: this.contextService.isSavedCommitted(),
1973
+ isHydrating: this.builderService.isHydrating(),
1974
+ isBusy: this.builderService.isBusy(),
1975
+ widgetSnapshot: this.builderService.getWidgetStateSnapshot(),
1789
1976
  changePath: changeEvent.path,
1790
1977
  changeOrigin: changeEvent.origin,
1978
+ changeState: changeEvent.state,
1791
1979
  dirtyPaths: this.contextService.isSavedCommitted()
1792
1980
  ? summarizeFormContextDirtyDiff(this.contextService.data(), this.contextService.saved())
1793
1981
  : [],
@@ -1832,19 +2020,39 @@ class AXPWidgetContainerComponent {
1832
2020
  syncExternalContext(value) {
1833
2021
  const next = cloneDeep(value ?? {});
1834
2022
  const current = this.contextService.data();
1835
- if (isEqual(current, next)) {
2023
+ const nextRecord = next;
2024
+ if (isEqual(current, nextRecord)) {
1836
2025
  return;
1837
2026
  }
2027
+ const currentId = current['id'] ?? current['_id'];
2028
+ const nextId = nextRecord['id'] ?? nextRecord['_id'];
2029
+ const sameRecord = hasPersistedRootIdentity(currentId) &&
2030
+ hasPersistedRootIdentity(nextId) &&
2031
+ currentId === nextId;
2032
+ // Create-wizard "create and continue": parent id just appeared. Apply the full payload
2033
+ // (including nested related/merge-detail data) without remounting the step wizard.
2034
+ // Do NOT identity-only patch — that drops nested objects like `person`.
2035
+ const identityJustAppeared = extractPersistedRootIdentityPatch(current, nextRecord);
2036
+ if (identityJustAppeared) {
2037
+ this.contextService.set(nextRecord);
2038
+ void this.settleSavedBaseline();
2039
+ return;
2040
+ }
2041
+ // Dirty form: never clobber in-progress user edits from external context echoes.
1838
2042
  if (this.contextService.isSavedCommitted() && this.isFormDirty()) {
1839
- const identityPatch = extractPersistedRootIdentityPatch(current, next);
1840
- if (identityPatch) {
1841
- this.contextService.patch(identityPatch, { updateSaved: true });
1842
- }
1843
2043
  return;
1844
2044
  }
1845
2045
  if (this.contextService.isSavedCommitted()) {
2046
+ // Same record enrichment (details byKey / dialog echo) — update store, keep widgets mounted
2047
+ // so nested paths like `person.firstName` bind without resetting the page.
2048
+ if (sameRecord) {
2049
+ this.contextService.set(nextRecord);
2050
+ void this.settleSavedBaseline();
2051
+ return;
2052
+ }
2053
+ // Navigating to a different record
1846
2054
  this.builderService.clearWidgets();
1847
- this.contextService.set(next);
2055
+ this.contextService.set(nextRecord);
1848
2056
  void this.settleSavedBaseline();
1849
2057
  return;
1850
2058
  }
@@ -1852,7 +2060,7 @@ class AXPWidgetContainerComponent {
1852
2060
  return;
1853
2061
  }
1854
2062
  this.builderService.clearWidgets();
1855
- this.contextService.set(next);
2063
+ this.contextService.set(nextRecord);
1856
2064
  void this.settleSavedBaseline();
1857
2065
  }
1858
2066
  /** Commits the current data as saved after widget hydration settles. */
@@ -1861,8 +2069,21 @@ class AXPWidgetContainerComponent {
1861
2069
  return this.settlePromise;
1862
2070
  }
1863
2071
  this.clearSavedBaselineTimer();
2072
+ this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'settleSavedBaseline queued', () => ({
2073
+ userEditedSinceCommit: this.contextService.hasUserEditedSinceCommit(),
2074
+ isSavedCommitted: this.contextService.isSavedCommitted(),
2075
+ isFormDirty: this.isFormDirty(),
2076
+ widgetSnapshot: this.builderService.getWidgetStateSnapshot(),
2077
+ }));
1864
2078
  this.settlePromise = this.waitUntilSettled()
1865
2079
  .then(() => {
2080
+ this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'settleSavedBaseline commit', () => ({
2081
+ userEditedSinceCommit: this.contextService.hasUserEditedSinceCommit(),
2082
+ isFormDirty: this.isFormDirty(),
2083
+ dirtyPaths: this.contextService.isSavedCommitted()
2084
+ ? summarizeFormContextDirtyDiff(this.contextService.data(), this.contextService.saved())
2085
+ : [],
2086
+ }));
1866
2087
  this.contextService.commitSaved();
1867
2088
  this.lastEmittedFormDirty = undefined;
1868
2089
  })
@@ -1938,15 +2159,31 @@ class AXPWidgetContainerComponent {
1938
2159
  /** Re-commits baseline after post-load hydration when the user has not edited the form. */
1939
2160
  scheduleRebaselineAfterHydration() {
1940
2161
  this.clearSavedBaselineTimer();
2162
+ this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'rebaseline scheduled', () => ({
2163
+ userEditedSinceCommit: this.contextService.hasUserEditedSinceCommit(),
2164
+ isFormDirty: this.isFormDirty(),
2165
+ dirtyPaths: summarizeFormContextDirtyDiff(this.contextService.data(), this.contextService.saved()),
2166
+ }));
1941
2167
  this.savedBaselineTimer = setTimeout(() => {
1942
2168
  this.savedBaselineTimer = undefined;
1943
2169
  if (this.contextService.hasUserEditedSinceCommit()) {
2170
+ this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'rebaseline skipped (user edited)', () => ({
2171
+ isFormDirty: this.isFormDirty(),
2172
+ dirtyPaths: summarizeFormContextDirtyDiff(this.contextService.data(), this.contextService.saved()),
2173
+ lastChange: this.contextService.changeEvent(),
2174
+ }));
1944
2175
  return;
1945
2176
  }
1946
2177
  void this.waitUntilSettled().then(() => {
1947
2178
  if (this.contextService.hasUserEditedSinceCommit()) {
2179
+ this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'rebaseline aborted after settle (user edited)', () => ({
2180
+ isFormDirty: this.isFormDirty(),
2181
+ dirtyPaths: summarizeFormContextDirtyDiff(this.contextService.data(), this.contextService.saved()),
2182
+ lastChange: this.contextService.changeEvent(),
2183
+ }));
1948
2184
  return;
1949
2185
  }
2186
+ this.debug.trace(FORM_DIRTY_TRACE_NS, 'widget-container', 'rebaseline commitSaved');
1950
2187
  this.contextService.commitSaved();
1951
2188
  this.lastEmittedFormDirty = undefined;
1952
2189
  });
@@ -1958,10 +2195,10 @@ class AXPWidgetContainerComponent {
1958
2195
  this.savedBaselineTimer = undefined;
1959
2196
  }
1960
2197
  }
1961
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1962
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPWidgetContainerComponent, isStandalone: false, selector: "axp-widgets-container", inputs: { context: "context", functions: "functions" }, outputs: { onContextChanged: "onContextChanged" }, host: { styleAttribute: "display: contents;" }, providers: [AXPWidgetCoreService, AXPContextStore], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2198
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPWidgetContainerComponent, isStandalone: false, selector: "axp-widgets-container", inputs: { context: "context", functions: "functions" }, outputs: { onContextChanged: "onContextChanged" }, host: { styleAttribute: "display: contents;" }, providers: [AXPWidgetCoreService, AXPContextStore], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1963
2200
  }
1964
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetContainerComponent, decorators: [{
2201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetContainerComponent, decorators: [{
1965
2202
  type: Component,
1966
2203
  args: [{
1967
2204
  selector: 'axp-widgets-container',
@@ -1996,12 +2233,12 @@ function extractPersistedRootIdentityPatch(current, next) {
1996
2233
  }
1997
2234
 
1998
2235
  class AXPWidgetPlaceholderComponent {
1999
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
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>
2236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2237
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPWidgetPlaceholderComponent, isStandalone: true, selector: "axp-widget-placeholder", ngImport: i0, template: `<div>
2001
2238
  <ax-skeleton class="w-full h-10 rounded-md"></ax-skeleton>
2002
2239
  </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2003
2240
  }
2004
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetPlaceholderComponent, decorators: [{
2241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetPlaceholderComponent, decorators: [{
2005
2242
  type: Component,
2006
2243
  args: [{
2007
2244
  selector: 'axp-widget-placeholder',
@@ -2014,15 +2251,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2014
2251
  }]
2015
2252
  }] });
2016
2253
 
2254
+ /**
2255
+ * Resolves the lazy component factory for a render mode.
2256
+ * `print` falls back to `view` until a dedicated print component exists.
2257
+ */
2258
+ function resolveWidgetModeComponent(widget, mode) {
2259
+ const requested = widget?.components?.[mode]?.component;
2260
+ if (requested) {
2261
+ return requested;
2262
+ }
2263
+ if (mode === 'print') {
2264
+ return widget?.components?.view?.component;
2265
+ }
2266
+ return undefined;
2267
+ }
2268
+
2017
2269
  class AXPWidgetRendererDirective {
2018
2270
  //#endregion
2019
2271
  //#endregion
2020
2272
  constructor() {
2021
- this.parentNode = input(...(ngDevMode ? [undefined, { debugName: "parentNode" }] : /* istanbul ignore next */ []));
2022
- this.index = input(...(ngDevMode ? [undefined, { debugName: "index" }] : /* istanbul ignore next */ []));
2023
- this.mode = input.required(...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
2024
- this.node = input.required(...(ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []));
2025
- this._options = signal({}, ...(ngDevMode ? [{ debugName: "_options" }] : /* istanbul ignore next */ []));
2273
+ this.parentNode = input(/* @ts-ignore */
2274
+ ...(ngDevMode ? [undefined, { debugName: "parentNode" }] : /* istanbul ignore next */ []));
2275
+ this.index = input(/* @ts-ignore */
2276
+ ...(ngDevMode ? [undefined, { debugName: "index" }] : /* istanbul ignore next */ []));
2277
+ this.mode = input.required(/* @ts-ignore */
2278
+ ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
2279
+ this.node = input.required(/* @ts-ignore */
2280
+ ...(ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []));
2281
+ this._options = signal({}, /* @ts-ignore */
2282
+ ...(ngDevMode ? [{ debugName: "_options" }] : /* istanbul ignore next */ []));
2026
2283
  this.options = this._options.asReadonly();
2027
2284
  this.onOptionsChanged = output();
2028
2285
  this.onValueChanged = output();
@@ -2031,11 +2288,13 @@ class AXPWidgetRendererDirective {
2031
2288
  /**
2032
2289
  * Signal that emits the component reference when it's ready
2033
2290
  */
2034
- this._componentRefSignal = signal(null, ...(ngDevMode ? [{ debugName: "_componentRefSignal" }] : /* istanbul ignore next */ []));
2291
+ this._componentRefSignal = signal(null, /* @ts-ignore */
2292
+ ...(ngDevMode ? [{ debugName: "_componentRefSignal" }] : /* istanbul ignore next */ []));
2035
2293
  this.componentRefSignal = this._componentRefSignal.asReadonly();
2036
2294
  //#endregion
2037
2295
  //#region ---- Properties ----
2038
- this.mergedOptions = signal({}, ...(ngDevMode ? [{ debugName: "mergedOptions" }] : /* istanbul ignore next */ []));
2296
+ this.mergedOptions = signal({}, /* @ts-ignore */
2297
+ ...(ngDevMode ? [{ debugName: "mergedOptions" }] : /* istanbul ignore next */ []));
2039
2298
  this.injector = inject(Injector);
2040
2299
  this.builderService = inject(AXPWidgetCoreService);
2041
2300
  this.contextService = inject(AXPContextStore);
@@ -2045,8 +2304,10 @@ class AXPWidgetRendererDirective {
2045
2304
  this.widgetService = inject(AXPWidgetRegistryService);
2046
2305
  this.expressionEvaluator = inject(AXPExpressionEvaluatorService);
2047
2306
  this.viewContainerRef = inject(ViewContainerRef);
2048
- this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
2049
- this.isVisible = signal(true, ...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
2307
+ this.isLoading = signal(false, /* @ts-ignore */
2308
+ ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
2309
+ this.isVisible = signal(true, /* @ts-ignore */
2310
+ ...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
2050
2311
  this.expressionEvaluators = new Map();
2051
2312
  this.renderTimeoutId = null;
2052
2313
  this.renderGeneration = 0;
@@ -2514,10 +2775,19 @@ class AXPWidgetRendererDirective {
2514
2775
  }
2515
2776
  //
2516
2777
  this._options.update((val) => ({ ...val, ...this.mergedOptions() }));
2517
- // Evaluate default value
2778
+ // Evaluate default value (skip when path already has a real value, e.g. edit forms).
2779
+ // Still evaluate when the path holds the unevaluated expression string itself.
2518
2780
  let defaultValue = this.node().defaultValue;
2781
+ const defaultValuePath = this.node().path;
2519
2782
  if (typeof defaultValue === 'string' && this.expressionEvaluator.isExpression(defaultValue)) {
2520
- defaultValue = await this.evaluateExpression(defaultValue);
2783
+ const existing = defaultValuePath ? this.contextService.getValue(defaultValuePath) : undefined;
2784
+ const shouldEvaluate = !defaultValuePath ||
2785
+ !this.contextService.hasValue(defaultValuePath) ||
2786
+ existing === defaultValue ||
2787
+ existing === this.node().defaultValue;
2788
+ if (shouldEvaluate) {
2789
+ defaultValue = await this.evaluateExpression(defaultValue);
2790
+ }
2521
2791
  }
2522
2792
  //
2523
2793
  const tokenValue = {
@@ -2538,12 +2808,17 @@ class AXPWidgetRendererDirective {
2538
2808
  //
2539
2809
  const loadingRef = this.viewContainerRef.createComponent(AXPWidgetPlaceholderComponent);
2540
2810
  //
2541
- const com = await widget?.components[this.mode()]?.component();
2811
+ const comFactory = resolveWidgetModeComponent(widget, this.mode());
2812
+ const com = await comFactory?.();
2542
2813
  if (!com) {
2543
2814
  // console.error(`${this.node().type} widget component not found with mode: ${this.mode()}`);
2544
2815
  return;
2545
2816
  }
2546
2817
  this.componentRef = this.viewContainerRef.createComponent(com, { injector: token });
2818
+ const fieldPath = this.node().path;
2819
+ if (fieldPath && this.componentRef?.location?.nativeElement) {
2820
+ this.componentRef.location.nativeElement.setAttribute('data-testid', `entity-field-${fieldPath}`);
2821
+ }
2547
2822
  this.instance = this.componentRef.instance;
2548
2823
  this.instance.setStatus(AXPWidgetStatus.Rendering);
2549
2824
  this.instance.parent = this.parentNode();
@@ -2997,14 +3272,14 @@ class AXPWidgetRendererDirective {
2997
3272
  // console.error('Error evaluating action expression:', templateExpression, error);
2998
3273
  }
2999
3274
  }
3000
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3001
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: AXPWidgetRendererDirective, isStandalone: false, selector: "[axp-widget-renderer]", inputs: { parentNode: { classPropertyName: "parentNode", publicName: "parentNode", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onOptionsChanged: "onOptionsChanged", onValueChanged: "onValueChanged", onLoad: "onLoad" }, providers: [
3275
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3276
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.8", type: AXPWidgetRendererDirective, isStandalone: false, selector: "[axp-widget-renderer]", inputs: { parentNode: { classPropertyName: "parentNode", publicName: "parentNode", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onOptionsChanged: "onOptionsChanged", onValueChanged: "onValueChanged", onLoad: "onLoad" }, providers: [
3002
3277
  {
3003
3278
  provide: AXUnsubscriber,
3004
3279
  },
3005
3280
  ], exportAs: ["widgetRenderer"], usesOnChanges: true, ngImport: i0 }); }
3006
3281
  }
3007
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetRendererDirective, decorators: [{
3282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetRendererDirective, decorators: [{
3008
3283
  type: Directive,
3009
3284
  args: [{
3010
3285
  selector: '[axp-widget-renderer]',
@@ -3020,11 +3295,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3020
3295
 
3021
3296
  const COMPONENTS = [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective];
3022
3297
  class AXPWidgetCoreModule {
3023
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3024
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreModule, declarations: [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective], imports: [CommonModule, PortalModule, AXSkeletonModule, AXTranslationModule], exports: [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective] }); }
3025
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreModule, imports: [CommonModule, PortalModule, AXSkeletonModule, AXTranslationModule] }); }
3298
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3299
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetCoreModule, declarations: [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective], imports: [CommonModule, PortalModule, AXSkeletonModule, AXTranslationModule], exports: [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective] }); }
3300
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetCoreModule, imports: [CommonModule, PortalModule, AXSkeletonModule, AXTranslationModule] }); }
3026
3301
  }
3027
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreModule, decorators: [{
3302
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetCoreModule, decorators: [{
3028
3303
  type: NgModule,
3029
3304
  args: [{
3030
3305
  imports: [CommonModule, PortalModule, AXSkeletonModule, AXTranslationModule],
@@ -3361,7 +3636,8 @@ class AXPWidgetSerializationHelper {
3361
3636
  class AXPWidgetColumnCellComponent {
3362
3637
  constructor() {
3363
3638
  this.caption = '';
3364
- this.mergedOptions = signal({}, ...(ngDevMode ? [{ debugName: "mergedOptions" }] : /* istanbul ignore next */ []));
3639
+ this.mergedOptions = signal({}, /* @ts-ignore */
3640
+ ...(ngDevMode ? [{ debugName: "mergedOptions" }] : /* istanbul ignore next */ []));
3365
3641
  this.rowInjectorsCache = new Map();
3366
3642
  this.hasExpressions = false;
3367
3643
  this.pendingEvaluations = new Set();
@@ -3481,8 +3757,8 @@ class AXPWidgetColumnCellComponent {
3481
3757
  this.changeDetectionScheduled = false;
3482
3758
  });
3483
3759
  }
3484
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetColumnCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
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: `
3760
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetColumnCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3761
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPWidgetColumnCellComponent, isStandalone: true, selector: "axp-widget-column-cell", inputs: { node: "node", rowData: "rowData", caption: "caption" }, usesOnChanges: true, ngImport: i0, template: `
3486
3762
  @if (component && rowData) {
3487
3763
  <ng-container
3488
3764
  *ngComponentOutlet="
@@ -3494,7 +3770,7 @@ class AXPWidgetColumnCellComponent {
3494
3770
  }
3495
3771
  `, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3496
3772
  }
3497
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetColumnCellComponent, decorators: [{
3773
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPWidgetColumnCellComponent, decorators: [{
3498
3774
  type: Component,
3499
3775
  args: [{
3500
3776
  selector: 'axp-widget-column-cell',
@@ -3661,6 +3937,116 @@ const AXP_DATA_SOURCE_OPTIONS_PROPERTY = {
3661
3937
  // AXP_DATA_SOURCE_TEXT_FIELD,
3662
3938
  // ];
3663
3939
 
3940
+ //#region ----- Imports -----
3941
+ //#endregion
3942
+ //#region ----- Constants -----
3943
+ const QUERY_DEFINITION_ENTITY = 'PlatformManagement.QueryDefinition';
3944
+ const QUERY_OPTIONS_I18N = {
3945
+ labelPlaceholder: '@general:widgets.query-options.label-placeholder',
3946
+ queryPlaceholder: '@general:widgets.query-options.query-placeholder',
3947
+ tabsTitle: '@general:widgets.query-options.tabs',
3948
+ };
3949
+ //#endregion
3950
+ //#region ----- Node builders -----
3951
+ /**
3952
+ * Builds a `query-selector` node: text (label) + lookup (QueryDefinition).
3953
+ * Optional `resultType` filters the lookup to compatible chart/KPI queries.
3954
+ */
3955
+ function buildQuerySelectorNode(options) {
3956
+ const resultType = options?.resultType?.trim();
3957
+ return {
3958
+ type: 'query-selector',
3959
+ name: options?.name ?? 'querySelector',
3960
+ options: {
3961
+ flexDirection: 'column',
3962
+ gap: '0.5rem',
3963
+ alignItems: 'stretch',
3964
+ },
3965
+ children: [
3966
+ {
3967
+ type: AXPWidgetsCatalog.text,
3968
+ name: 'label',
3969
+ path: 'label',
3970
+ options: {
3971
+ placeholder: QUERY_OPTIONS_I18N.labelPlaceholder,
3972
+ hasClearButton: true,
3973
+ },
3974
+ },
3975
+ {
3976
+ type: AXPWidgetsCatalog.lookup,
3977
+ name: 'query',
3978
+ path: 'query',
3979
+ options: {
3980
+ entity: QUERY_DEFINITION_ENTITY,
3981
+ valueField: 'name',
3982
+ textField: 'catalogTitle',
3983
+ look: 'select',
3984
+ allowClear: true,
3985
+ allowSearch: true,
3986
+ placeholder: QUERY_OPTIONS_I18N.queryPlaceholder,
3987
+ ...(resultType
3988
+ ? {
3989
+ filter: {
3990
+ logic: 'and',
3991
+ filters: [
3992
+ {
3993
+ field: 'resultType',
3994
+ operator: { type: 'equal' },
3995
+ value: resultType,
3996
+ },
3997
+ ],
3998
+ },
3999
+ }
4000
+ : {}),
4001
+ },
4002
+ },
4003
+ ],
4004
+ };
4005
+ }
4006
+ /**
4007
+ * Builds a `query-tabs` repeater whose row template is {@link buildQuerySelectorNode}.
4008
+ */
4009
+ function buildQueryTabsNode(options) {
4010
+ return {
4011
+ type: 'query-tabs',
4012
+ name: 'queryTabs',
4013
+ path: 'options.queryTabs',
4014
+ options: {
4015
+ hasControls: true,
4016
+ allowReorder: true,
4017
+ },
4018
+ children: [buildQuerySelectorNode({ resultType: options?.resultType })],
4019
+ };
4020
+ }
4021
+ //#endregion
4022
+ //#region ----- Properties -----
4023
+ /**
4024
+ * Chart/KPI query binding property: `options.queryTabs` via extended
4025
+ * `query-tabs` (repeater) → `query-selector` (text + lookup).
4026
+ *
4027
+ * Pass `resultType` to filter QueryDefinition rows (e.g. `AXPBarChartQueryResult`).
4028
+ */
4029
+ function createQueryOptionsProperty(options) {
4030
+ const tabsNode = buildQueryTabsNode({ resultType: options?.resultType });
4031
+ return {
4032
+ name: 'queryOptions',
4033
+ title: options?.title ?? QUERY_OPTIONS_I18N.tabsTitle,
4034
+ group: AXP_DATA_PROPERTY_GROUP,
4035
+ showLabel: true,
4036
+ schema: {
4037
+ dataType: 'array',
4038
+ interface: {
4039
+ ...tabsNode,
4040
+ path: 'options.queryTabs',
4041
+ },
4042
+ },
4043
+ visible: true,
4044
+ };
4045
+ }
4046
+ /** Default query-tabs property (no resultType filter). */
4047
+ const AXP_QUERY_OPTIONS_PROPERTY = createQueryOptionsProperty();
4048
+ //#endregion
4049
+
3664
4050
  const AXP_NAME_PROPERTY = createStringProperty({
3665
4051
  name: 'name',
3666
4052
  title: 'Name',
@@ -4746,5 +5132,5 @@ const AXP_CALLBACK_VALIDATION_PROPERTY = {
4746
5132
  * Generated bundle index. Do not edit.
4747
5133
  */
4748
5134
 
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 };
5135
+ 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_QUERY_OPTIONS_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, buildQuerySelectorNode, buildQueryTabsNode, buildWidgetRegistryMapFromProviders, createQueryOptionsProperty, findNonEmptyBreakpoints, largeTextDefaultProperty, mapAXPPropertyToWidgetProperty, numberDefaultProperty, numberMaxValueProperty, numberMinValueProperty, plainTextDefaultProperty, resolveWidgetModeComponent, richTextDefaultProperty, selectEditorDefaultValueProperty, selectionListEditorDefaultValueProperty };
4750
5136
  //# sourceMappingURL=acorex-platform-framework-client-layout-widget-core.mjs.map