@acorex/platform 20.8.5 → 21.0.0-beta.0

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 (125) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +121 -27
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-common-common-settings.provider-41RhWqb4.mjs → acorex-platform-common-common-settings.provider-G9XcXXOG.mjs} +4 -4
  4. package/fesm2022/acorex-platform-common-common-settings.provider-G9XcXXOG.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +669 -268
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +333 -140
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +557 -826
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +539 -110
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-CWV4XD36.mjs} +15 -15
  14. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CWV4XD36.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-components.mjs +3285 -1035
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +488 -284
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity.mjs +15955 -11978
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +410 -170
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +548 -474
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs → acorex-platform-layout-widgets-button-widget-designer.component-fLjWiSFE.mjs} +11 -11
  26. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-fLjWiSFE.mjs.map +1 -0
  27. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs → acorex-platform-layout-widgets-file-list-popup.component-3oRAKxTo.mjs} +22 -77
  28. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-3oRAKxTo.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs → acorex-platform-layout-widgets-image-preview.popup-CazpERbX.mjs} +8 -9
  30. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-CazpERbX.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs → acorex-platform-layout-widgets-page-widget-designer.component-BQ4G6aYf.mjs} +17 -17
  32. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BQ4G6aYf.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-DWuWxUF_.mjs +116 -0
  34. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-DWuWxUF_.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-fV94u3t2.mjs} +25 -19
  36. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-fV94u3t2.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-DyuvQhgN.mjs} +9 -9
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DyuvQhgN.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-EJMMdpIs.mjs} +7 -7
  40. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-EJMMdpIs.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-layout-widgets.mjs +6396 -4058
  42. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  43. package/fesm2022/acorex-platform-native.mjs +8 -7
  44. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-runtime.mjs +328 -166
  46. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CkptOSO3.mjs +160 -0
  48. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CkptOSO3.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DXC2qtvK.mjs +120 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DXC2qtvK.mjs.map +1 -0
  51. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs → acorex-platform-themes-default-entity-master-single-view.component-DYyunzKZ.mjs} +16 -23
  52. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DYyunzKZ.mjs.map +1 -0
  53. package/fesm2022/acorex-platform-themes-default-error-401.component-C5lQECDP.mjs +31 -0
  54. package/fesm2022/acorex-platform-themes-default-error-401.component-C5lQECDP.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-themes-default-error-404.component-D5wBXAB-.mjs +25 -0
  56. package/fesm2022/acorex-platform-themes-default-error-404.component-D5wBXAB-.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-themes-default-error-offline.component-AhDiY3DI.mjs +19 -0
  58. package/fesm2022/acorex-platform-themes-default-error-offline.component-AhDiY3DI.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default.mjs +1687 -69
  60. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  61. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs → acorex-platform-themes-shared-icon-chooser-column.component-QL2-ZUVg.mjs} +8 -8
  62. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-QL2-ZUVg.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BXydqPt_.mjs} +8 -8
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BXydqPt_.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-D13QB3Hr.mjs} +2 -2
  66. package/fesm2022/acorex-platform-themes-shared-settings.provider-D13QB3Hr.mjs.map +1 -0
  67. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-Cb9iY6k9.mjs +88 -0
  68. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-Cb9iY6k9.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-KP4-BND5.mjs +80 -0
  70. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-KP4-BND5.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared.mjs +572 -465
  72. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  73. package/fesm2022/acorex-platform-workflow.mjs +276 -98
  74. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  75. package/fesm2022/acorex-platform.mjs.map +1 -1
  76. package/package.json +33 -33
  77. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +14 -2
  78. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +261 -24
  79. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +163 -42
  80. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
  81. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +137 -38
  82. package/{layout/components/index.d.ts → types/acorex-platform-layout-components.d.ts} +808 -131
  83. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
  84. package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +686 -61
  85. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +80 -47
  86. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +274 -197
  87. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +583 -104
  88. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  89. package/types/acorex-platform-runtime.d.ts +565 -0
  90. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +105 -4
  91. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +14 -5
  92. package/{workflow/index.d.ts → types/acorex-platform-workflow.d.ts} +96 -81
  93. package/fesm2022/acorex-platform-common-common-settings.provider-41RhWqb4.mjs.map +0 -1
  94. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs +0 -111
  100. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs +0 -160
  105. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CLDoygoI.mjs +0 -1610
  107. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CLDoygoI.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs +0 -120
  109. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-error-401.component-53VB-PS_.mjs +0 -31
  112. package/fesm2022/acorex-platform-themes-default-error-401.component-53VB-PS_.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-themes-default-error-404.component-DVF9soT5.mjs +0 -25
  114. package/fesm2022/acorex-platform-themes-default-error-404.component-DVF9soT5.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs +0 -19
  116. package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs +0 -65
  121. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs.map +0 -1
  122. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs +0 -64
  123. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs.map +0 -1
  124. package/runtime/index.d.ts +0 -307
  125. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { computed, signal, Injectable, InjectionToken, inject, ElementRef, effect, untracked, Injector, ChangeDetectorRef, ViewChild, Input, ChangeDetectionStrategy, Component, EventEmitter, Output, input, output, ViewContainerRef, Directive, Optional, Inject, NgModule } from '@angular/core';
2
+ import { signal, computed, Injectable, InjectionToken, inject, ElementRef, effect, untracked, Injector, ChangeDetectorRef, ViewChild, Input, ChangeDetectionStrategy, Component, EventEmitter, Output, input, output, ViewContainerRef, Directive, NgModule } from '@angular/core';
3
3
  import { convertArrayToDataSource, AXDataSource } from '@acorex/cdk/common';
4
- import { setSmart, AXPDataSourceDefinitionProviderService, extractValue, AXPExpressionEvaluatorService, getSmart } from '@acorex/platform/core';
5
- import { cloneDeep, isEqual, has, get, set, merge, isNil, isUndefined, isObjectLike, sum, isEmpty, isString } from 'lodash-es';
4
+ import { AXPContextStore, AXPDataSourceDefinitionProviderService, extractValue, AXPExpressionEvaluatorService, getSmart } from '@acorex/platform/core';
5
+ export { normalizeDefinitionCategories } from '@acorex/platform/core';
6
+ import { set, merge, cloneDeep, isNil, get, isEqual, isUndefined, isObjectLike, sum, isEmpty, isString } from 'lodash-es';
6
7
  import { Subject, BehaviorSubject, filter } from 'rxjs';
7
- import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
8
8
  import * as i1$1 from '@acorex/components/skeleton';
9
9
  import { AXSkeletonModule } from '@acorex/components/skeleton';
10
10
  import * as i2 from '@acorex/core/translation';
@@ -15,123 +15,6 @@ import { CommonModule } from '@angular/common';
15
15
  import { AXDataTableColumnComponent, AXBaseDataTable } from '@acorex/components/data-table';
16
16
  import { AXUnsubscriber } from '@acorex/core/utils';
17
17
 
18
- class AXPWidgetCoreContextChangeEvent {
19
- }
20
- const AXPWidgetCoreContextStore = signalStore(
21
- // Initial State
22
- withState(() => ({
23
- data: {}, // Shared context data
24
- state: 'initiated', // Current state
25
- initialSnapshot: {}, // Snapshot of the first initialized state
26
- previousSnapshot: {}, // Snapshot of the previous state
27
- lastChange: {
28
- state: 'initiated',
29
- }, // Last change event
30
- })),
31
- // Computed Signals
32
- withComputed(({ data, state, lastChange, initialSnapshot, previousSnapshot }) => ({
33
- isChanged: computed(() => state() === 'changed'),
34
- isReset: computed(() => state() === 'restored'),
35
- isInitiated: computed(() => state() === 'initiated'),
36
- isEmpty: computed(() => Object.keys(data()).length === 0),
37
- isDirty: computed(() => !isEqual(data(), previousSnapshot())),
38
- snapshot: computed(() => cloneDeep(data())), // Current data snapshot
39
- initial: computed(() => cloneDeep(initialSnapshot())), // Initial snapshot
40
- previous: computed(() => cloneDeep(previousSnapshot())), // Previous snapshot
41
- changeEvent: computed(() => lastChange()), // Reactive last change event
42
- })),
43
- // Methods for State Management
44
- withMethods((store) => ({
45
- // Update a specific value
46
- update(path, value) {
47
- const currentData = cloneDeep(store.data());
48
- const oldValue = get(currentData, path);
49
- // Skip if the value hasn't changed
50
- if (isEqual(oldValue, value)) {
51
- return;
52
- }
53
- // Update the value and prepare the change event
54
- const updatedData = setSmart(currentData, path, value);
55
- const changeEvent = {
56
- oldValue,
57
- newValue: value,
58
- path,
59
- state: 'changed',
60
- data: updatedData,
61
- };
62
- // Patch the state
63
- patchState(store, {
64
- previousSnapshot: store.snapshot(), // Save the previous state
65
- data: updatedData,
66
- state: 'changed',
67
- lastChange: changeEvent,
68
- });
69
- },
70
- patch(context, skipDirtyTracking = false) {
71
- const currentData = cloneDeep(store.data());
72
- // Update the value and prepare the change event
73
- const updatedData = { ...currentData, ...context };
74
- const changeEvent = {
75
- state: 'patch',
76
- data: updatedData,
77
- };
78
- // Patch the state
79
- patchState(store, {
80
- ...(skipDirtyTracking ? {} : { previousSnapshot: store.snapshot() }), // Only update previousSnapshot if not skipping dirty tracking
81
- data: updatedData,
82
- state: 'changed',
83
- lastChange: changeEvent,
84
- });
85
- },
86
- // Reset to the initial state
87
- reset() {
88
- const initialData = store.initial();
89
- const changeEvent = {
90
- oldValue: cloneDeep(store.data()), // Current data becomes old value
91
- newValue: cloneDeep(initialData), // Reset to the initial state
92
- path: '',
93
- state: 'restored',
94
- data: initialData,
95
- };
96
- patchState(store, {
97
- previousSnapshot: store.snapshot(), // Save the previous state
98
- data: initialData,
99
- state: 'restored',
100
- lastChange: changeEvent,
101
- });
102
- },
103
- // Initialize the state
104
- set(initialData) {
105
- const currentData = store.data();
106
- if (isEqual(currentData, initialData)) {
107
- return; // Skip if the current state matches the initial state
108
- }
109
- console.log('initialData', initialData);
110
- const changeEvent = {
111
- oldValue: null,
112
- newValue: cloneDeep(initialData),
113
- path: '',
114
- state: 'initiated',
115
- data: initialData,
116
- };
117
- patchState(store, {
118
- initialSnapshot: cloneDeep(initialData), // Save the initial state
119
- previousSnapshot: store.snapshot(), // Save the current state as the previous
120
- data: initialData,
121
- state: 'initiated',
122
- lastChange: changeEvent,
123
- });
124
- },
125
- // Get a specific value
126
- getValue(path) {
127
- return get(store.data(), path);
128
- },
129
- // Check if a path exists in the context
130
- hasValue(path) {
131
- return has(store.data(), path);
132
- },
133
- })));
134
-
135
18
  var AXPPageStatus;
136
19
  (function (AXPPageStatus) {
137
20
  // Idle statuses
@@ -171,17 +54,17 @@ class AXPWidgetCoreElement {
171
54
  }
172
55
  class AXPWidgetCoreService {
173
56
  constructor() {
174
- this.variables$ = signal({}, ...(ngDevMode ? [{ debugName: "variables$" }] : []));
175
- this.functions$ = signal({}, ...(ngDevMode ? [{ debugName: "functions$" }] : []));
57
+ this.variables$ = signal({}, ...(ngDevMode ? [{ debugName: "variables$" }] : /* istanbul ignore next */ []));
58
+ this.functions$ = signal({}, ...(ngDevMode ? [{ debugName: "functions$" }] : /* istanbul ignore next */ []));
176
59
  this.onRefresh = new Subject();
177
60
  this.widgets = new Map();
178
61
  this.onWidgetRegistered = new Subject();
179
- this.status$ = signal(AXPPageStatus.Rendering, ...(ngDevMode ? [{ debugName: "status$" }] : []));
62
+ this.status$ = signal(AXPPageStatus.Rendering, ...(ngDevMode ? [{ debugName: "status$" }] : /* istanbul ignore next */ []));
180
63
  this.status = this.status$.asReadonly();
181
64
  this.isBusy = computed(() => {
182
65
  return [AXPPageStatus.Processing, AXPPageStatus.Submitting, AXPPageStatus.Rendering].includes(this.status());
183
- }, ...(ngDevMode ? [{ debugName: "isBusy" }] : []));
184
- this.registeredWidgetsCount = signal(0, ...(ngDevMode ? [{ debugName: "registeredWidgetsCount" }] : []));
66
+ }, ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
67
+ this.registeredWidgetsCount = signal(0, ...(ngDevMode ? [{ debugName: "registeredWidgetsCount" }] : /* istanbul ignore next */ []));
185
68
  }
186
69
  get variables() {
187
70
  return this.variables$();
@@ -286,16 +169,16 @@ class AXPWidgetCoreService {
286
169
  return Array.from(this.widgets.keys());
287
170
  }
288
171
  ngOnDestroy() { }
289
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetCoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
290
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetCoreService }); }
172
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
173
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreService }); }
291
174
  }
292
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetCoreService, decorators: [{
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreService, decorators: [{
293
176
  type: Injectable
294
177
  }] });
295
178
 
296
179
  //
297
180
  // @deprecated
298
- // use AXPWidgetsList instead
181
+ // Prefer AXPWidgetsList from @acorex/modules/common; dashboard widget type ids live in dashboard-management RootConfig.widgets.
299
182
  const AXPWidgetsCatalog = {
300
183
  timeDuration: 'time-duration',
301
184
  timeDurationFilter: 'time-duration-filter',
@@ -319,6 +202,7 @@ const AXPWidgetsCatalog = {
319
202
  pageLayout: 'page-layout',
320
203
  repeaterLayout: 'repeater-layout',
321
204
  textBlockLayout: 'text-block-layout',
205
+ alertBoxLayout: 'alert-box-layout',
322
206
  fileUploader: 'file-uploader',
323
207
  fileTypeExtension: 'file-type-extension',
324
208
  map: 'map',
@@ -347,7 +231,6 @@ const AXPWidgetsCatalog = {
347
231
  tableLayout: 'table-layout',
348
232
  tableItem: 'table-item-layout',
349
233
  avatar: 'avatar',
350
- themePaletteChooser: 'theme-palette-chooser',
351
234
  themeModeChooser: 'theme-mode-chooser',
352
235
  menuOrientationChooser: 'menu-orientation-chooser',
353
236
  fontStyleChooser: 'font-style-chooser',
@@ -375,21 +258,11 @@ const AXPWidgetsCatalog = {
375
258
  betweenValidation: 'between-validation',
376
259
  equalValidation: 'equal-validation',
377
260
  callbackValidation: 'callback-validation',
378
- donutChart: 'donut-chart',
379
- lineChart: 'line-chart',
380
- barChart: 'bar-chart',
381
- gaugeChart: 'gauge-chart',
382
- stickyNote: 'sticky-note',
383
- clockCalendar: 'clock-calendar',
384
- analogClock: 'analog-clock',
385
- weather: 'weather',
386
- minimalWeather: 'minimal-weather',
387
- advancedWeather: 'advanced-weather',
388
261
  metaData: 'meta-data-editor',
389
262
  templateEditor: 'template-box-editor',
263
+ templateContentEditor: 'template-content-editor',
390
264
  panel: 'panel',
391
265
  notification: 'notification',
392
- taskBoard: 'task-board',
393
266
  comment: 'comment',
394
267
  dataList: 'data-list',
395
268
  listToolbar: 'list-toolbar',
@@ -398,7 +271,9 @@ const AXPWidgetsCatalog = {
398
271
  documentUploader: 'document-uploader',
399
272
  stepWizard: 'step-wizard',
400
273
  progressBar: 'progress-bar-editor',
401
- rate: 'rate-picker-editor'
274
+ rate: 'rate-picker-editor',
275
+ documentFileTypeFilter: 'document-file-type-filter',
276
+ entityDefinitionProvider: 'entity-definition-provider-editor',
402
277
  };
403
278
 
404
279
  function cloneProperty(property, values) {
@@ -453,7 +328,7 @@ function createBooleanProperty(ctor) {
453
328
  type: AXPWidgetsCatalog.toggle,
454
329
  },
455
330
  },
456
- visible: ctor.visible ?? true,
331
+ visible: !isNil(ctor.visible) ? ctor.visible : true,
457
332
  binding: {
458
333
  enabled: true,
459
334
  },
@@ -480,7 +355,7 @@ function createSelectProperty(ctor) {
480
355
  },
481
356
  },
482
357
  },
483
- visible: ctor.visible ?? true,
358
+ visible: !isNil(ctor.visible) ? ctor.visible : true,
484
359
  };
485
360
  }
486
361
  const AXP_WIDGET_TOKEN = new InjectionToken('AXP_WIDGET_TOKEN');
@@ -492,22 +367,22 @@ class AXPBaseWidgetComponent extends AXPWidgetCoreElement {
492
367
  this.token = inject(AXP_WIDGET_TOKEN);
493
368
  this.host = inject(ElementRef).nativeElement;
494
369
  this.layoutService = inject(AXPWidgetCoreService);
495
- this.contextService = inject(AXPWidgetCoreContextStore);
370
+ this.contextService = inject(AXPContextStore);
496
371
  this.config = this.token.config;
497
372
  this.node = this.token.node;
498
373
  this.name = this.token.node.name;
499
374
  this.component = this;
500
- this._options = signal(this.token.options ?? {}, ...(ngDevMode ? [{ debugName: "_options" }] : []));
375
+ this._options = signal(this.token.options ?? {}, ...(ngDevMode ? [{ debugName: "_options" }] : /* istanbul ignore next */ []));
501
376
  this.options = this._options.asReadonly();
502
377
  this.onOptionsChanged = new Subject();
503
- this._status = signal(AXPWidgetStatus.Rendering, ...(ngDevMode ? [{ debugName: "_status" }] : []));
378
+ this._status = signal(AXPWidgetStatus.Rendering, ...(ngDevMode ? [{ debugName: "_status" }] : /* istanbul ignore next */ []));
504
379
  this.status = this._status.asReadonly();
505
380
  this.onStatusChanged = new BehaviorSubject(this._status());
506
381
  this.#statusEffect = effect(() => {
507
382
  this.onStatusChanged.next(this.status());
508
- }, ...(ngDevMode ? [{ debugName: "#statusEffect" }] : []));
509
- this.isBusy = computed(() => [AXPWidgetStatus.Rendering, AXPWidgetStatus.Processing].includes(this.status()), ...(ngDevMode ? [{ debugName: "isBusy" }] : []));
510
- this._children = signal(this.token.node.children ?? [], ...(ngDevMode ? [{ debugName: "_children" }] : []));
383
+ }, ...(ngDevMode ? [{ debugName: "#statusEffect" }] : /* istanbul ignore next */ []));
384
+ this.isBusy = computed(() => [AXPWidgetStatus.Rendering, AXPWidgetStatus.Processing].includes(this.status()), ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
385
+ this._children = signal(this.token.node.children ?? [], ...(ngDevMode ? [{ debugName: "_children" }] : /* istanbul ignore next */ []));
511
386
  this.children = this._children.asReadonly();
512
387
  }
513
388
  get id() {
@@ -554,10 +429,10 @@ class AXPBaseWidgetComponent extends AXPWidgetCoreElement {
554
429
  this._children.set([...children]);
555
430
  }
556
431
  onAdded() { }
557
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
558
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPBaseWidgetComponent }); }
432
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
433
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBaseWidgetComponent }); }
559
434
  }
560
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPBaseWidgetComponent, decorators: [{
435
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBaseWidgetComponent, decorators: [{
561
436
  type: Injectable
562
437
  }] });
563
438
  class AXPLayoutBaseWidgetComponent extends AXPBaseWidgetComponent {
@@ -568,10 +443,10 @@ class AXPLayoutBaseWidgetComponent extends AXPBaseWidgetComponent {
568
443
  }
569
444
  super.ngOnInit();
570
445
  }
571
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPLayoutBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
572
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPLayoutBaseWidgetComponent }); }
446
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLayoutBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
447
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLayoutBaseWidgetComponent }); }
573
448
  }
574
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPLayoutBaseWidgetComponent, decorators: [{
449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPLayoutBaseWidgetComponent, decorators: [{
575
450
  type: Injectable
576
451
  }] });
577
452
  class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
@@ -582,11 +457,11 @@ class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
582
457
  this._isValueWidget = false;
583
458
  this.isValueWidget = () => this._isValueWidget;
584
459
  this.onValueChanged = new Subject();
585
- this.fullPath = signal(null, ...(ngDevMode ? [{ debugName: "fullPath" }] : []));
586
- this.parentPath = signal(null, ...(ngDevMode ? [{ debugName: "parentPath" }] : []));
460
+ this.fullPath = signal(null, ...(ngDevMode ? [{ debugName: "fullPath" }] : /* istanbul ignore next */ []));
461
+ this.parentPath = signal(null, ...(ngDevMode ? [{ debugName: "parentPath" }] : /* istanbul ignore next */ []));
587
462
  this.getValue = computed(() => {
588
463
  return this.fullPath() ? this.extractValue(this.fullPath()) : null;
589
- }, ...(ngDevMode ? [{ debugName: "getValue", equal: isEqual }] : [{ equal: isEqual }]));
464
+ }, { ...(ngDevMode ? { debugName: "getValue" } : /* istanbul ignore next */ {}), equal: isEqual });
590
465
  this.validationRules = computed(() => {
591
466
  const validationsRaw = this.options()['validations'];
592
467
  if (validationsRaw == null) {
@@ -599,7 +474,7 @@ class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
599
474
  message: c.message,
600
475
  options: c.options,
601
476
  }));
602
- }, ...(ngDevMode ? [{ debugName: "validationRules" }] : []));
477
+ }, ...(ngDevMode ? [{ debugName: "validationRules" }] : /* istanbul ignore next */ []));
603
478
  }
604
479
  ngOnInit() {
605
480
  this._isValueWidget = this.config.properties?.some((c) => c.name == 'path') ?? false;
@@ -629,7 +504,12 @@ class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
629
504
  if (isNil(value) && isNil(oldValue)) {
630
505
  return;
631
506
  }
632
- if (isEqual(oldValue, value)) {
507
+ // Reordered arrays must persist even when items are deep-equal (e.g. empty row objects).
508
+ const isArrayReorder = Array.isArray(oldValue) &&
509
+ Array.isArray(value) &&
510
+ oldValue.length === value.length &&
511
+ oldValue.some((v, i) => v !== value[i]);
512
+ if (!isArrayReorder && isEqual(oldValue, value)) {
633
513
  return;
634
514
  }
635
515
  if (this.fullPath()) {
@@ -676,23 +556,23 @@ class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
676
556
  this.setValue(e.value);
677
557
  }
678
558
  }
679
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPValueWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
680
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPValueWidgetComponent }); }
559
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPValueWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
560
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPValueWidgetComponent }); }
681
561
  }
682
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPValueWidgetComponent, decorators: [{
562
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPValueWidgetComponent, decorators: [{
683
563
  type: Injectable
684
564
  }] });
685
565
  class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
686
566
  constructor() {
687
567
  super(...arguments);
688
568
  this.dataService = inject(AXPDataSourceDefinitionProviderService);
689
- this.textField = computed(() => this.options()['textField'] ?? 'title', ...(ngDevMode ? [{ debugName: "textField" }] : []));
690
- this.valueField = computed(() => this.options()['valueField'] ?? 'id', ...(ngDevMode ? [{ debugName: "valueField" }] : []));
569
+ this.textField = computed(() => this.options()['textField'] ?? 'title', ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
570
+ this.valueField = computed(() => this.options()['valueField'] ?? 'id', ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
691
571
  this.textTemplate = computed(() => isNil(this.options()['textTemplate'])
692
572
  ? undefined
693
- : this.options()['textTemplate'].replace(/{/g, '{{').replace(/}/g, '}}'), ...(ngDevMode ? [{ debugName: "textTemplate" }] : []));
694
- this.dataSource = signal(convertArrayToDataSource([]), ...(ngDevMode ? [{ debugName: "dataSource" }] : []));
695
- this.selectedItems = signal([], ...(ngDevMode ? [{ debugName: "selectedItems" }] : []));
573
+ : this.options()['textTemplate'].replace(/{/g, '{{').replace(/}/g, '}}'), ...(ngDevMode ? [{ debugName: "textTemplate" }] : /* istanbul ignore next */ []));
574
+ this.dataSource = signal(convertArrayToDataSource([]), ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
575
+ this.selectedItems = signal([], ...(ngDevMode ? [{ debugName: "selectedItems" }] : /* istanbul ignore next */ []));
696
576
  //#region ---- DataSource Loading Effect ----
697
577
  /**
698
578
  * Track the last loaded string dataSource reference to prevent infinite loops
@@ -772,7 +652,7 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
772
652
  this.dataSource.set(convertArrayToDataSource([]));
773
653
  }
774
654
  });
775
- }, ...(ngDevMode ? [{ debugName: "rf" }] : []));
655
+ }, ...(ngDevMode ? [{ debugName: "rf" }] : /* istanbul ignore next */ []));
776
656
  this.effect2 = effect(async () => {
777
657
  const value = this.getValue();
778
658
  const items = [];
@@ -783,7 +663,7 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
783
663
  items.push(await this.extractItem(value));
784
664
  }
785
665
  this.selectedItems.set(items.filter((c) => c != null));
786
- }, ...(ngDevMode ? [{ debugName: "effect2" }] : []));
666
+ }, ...(ngDevMode ? [{ debugName: "effect2" }] : /* istanbul ignore next */ []));
787
667
  }
788
668
  //#endregion
789
669
  async extractItem(item) {
@@ -808,10 +688,10 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
808
688
  [this.textField()]: item,
809
689
  };
810
690
  }
811
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPDataListWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
812
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPDataListWidgetComponent }); }
691
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
692
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetComponent }); }
813
693
  }
814
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPDataListWidgetComponent, decorators: [{
694
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetComponent, decorators: [{
815
695
  type: Injectable
816
696
  }] });
817
697
  class AXPColumnWidgetComponent {
@@ -819,6 +699,8 @@ class AXPColumnWidgetComponent {
819
699
  this.token = inject(AXP_WIDGET_COLUMN_TOKEN);
820
700
  this.path = this.token.path;
821
701
  this.options = this.token.options ?? {};
702
+ /** Column header caption when rendered inside `axp-widget-column-renderer`. */
703
+ this.columnCaption = this.token.caption;
822
704
  this.rawValue = null;
823
705
  this.nullText = this.options['nullText'];
824
706
  this.nullValue = this.options['nullValue'];
@@ -829,10 +711,10 @@ class AXPColumnWidgetComponent {
829
711
  return this.rawValue;
830
712
  };
831
713
  }
832
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPColumnWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
833
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPColumnWidgetComponent }); }
714
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColumnWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
715
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColumnWidgetComponent }); }
834
716
  }
835
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPColumnWidgetComponent, decorators: [{
717
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColumnWidgetComponent, decorators: [{
836
718
  type: Injectable
837
719
  }] });
838
720
 
@@ -861,7 +743,7 @@ class AXPBoxModelLayoutWidgetComponent extends AXPLayoutBaseWidgetComponent {
861
743
  style['overflow-y'] = overflowY ?? '';
862
744
  style['direction'] = direction ?? '';
863
745
  return style;
864
- }, ...(ngDevMode ? [{ debugName: "hostBoxStyle" }] : []));
746
+ }, ...(ngDevMode ? [{ debugName: "hostBoxStyle" }] : /* istanbul ignore next */ []));
865
747
  this.blockStyle = computed(() => {
866
748
  const options = this.options();
867
749
  const style = { ...this.hostBoxStyle() };
@@ -878,47 +760,47 @@ class AXPBoxModelLayoutWidgetComponent extends AXPLayoutBaseWidgetComponent {
878
760
  style['height'] = height ?? '';
879
761
  style['max-height'] = maxHeight ?? '';
880
762
  return style;
881
- }, ...(ngDevMode ? [{ debugName: "blockStyle" }] : []));
763
+ }, ...(ngDevMode ? [{ debugName: "blockStyle" }] : /* istanbul ignore next */ []));
882
764
  this.inlineStyle = computed(() => {
883
765
  return { ...this.hostBoxStyle() };
884
- }, ...(ngDevMode ? [{ debugName: "inlineStyle" }] : []));
766
+ }, ...(ngDevMode ? [{ debugName: "inlineStyle" }] : /* istanbul ignore next */ []));
885
767
  this.blockClass = computed(() => {
886
768
  return {
887
- 'ax-block': true,
888
- 'ax-w-full': true,
769
+ block: true,
770
+ 'w-full': true,
889
771
  // 'ax-widget-outline': true,
890
772
  };
891
- }, ...(ngDevMode ? [{ debugName: "blockClass" }] : []));
773
+ }, ...(ngDevMode ? [{ debugName: "blockClass" }] : /* istanbul ignore next */ []));
892
774
  this.inlineClass = computed(() => {
893
775
  return {
894
- 'ax-inline-block': true,
776
+ 'inline-block': true,
895
777
  };
896
- }, ...(ngDevMode ? [{ debugName: "inlineClass" }] : []));
778
+ }, ...(ngDevMode ? [{ debugName: "inlineClass" }] : /* istanbul ignore next */ []));
897
779
  }
898
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
899
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent }); }
780
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
781
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent }); }
900
782
  }
901
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, decorators: [{
783
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, decorators: [{
902
784
  type: Injectable
903
785
  }] });
904
786
 
905
787
  class AXPBlockBaseLayoutWidgetComponent extends AXPBoxModelLayoutWidgetComponent {
906
788
  constructor() {
907
789
  super(...arguments);
908
- this.hostClass = computed(() => this.blockClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
909
- this.hostStyle = computed(() => this.blockStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
790
+ this.hostClass = computed(() => this.blockClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
791
+ this.hostStyle = computed(() => this.blockStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
910
792
  }
911
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
912
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent }); }
793
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
794
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent }); }
913
795
  }
914
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, decorators: [{
796
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, decorators: [{
915
797
  type: Injectable
916
798
  }] });
917
799
 
918
800
  class AXPFlexBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {
919
801
  constructor() {
920
802
  super(...arguments);
921
- this.flex = computed(() => this.options(), ...(ngDevMode ? [{ debugName: "flex" }] : []));
803
+ this.flex = computed(() => this.options(), ...(ngDevMode ? [{ debugName: "flex" }] : /* istanbul ignore next */ []));
922
804
  this.hostFlexStyle = computed(() => {
923
805
  const blockStyle = this.blockStyle();
924
806
  const style = { ...blockStyle };
@@ -957,45 +839,45 @@ class AXPFlexBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent
957
839
  style['gap'] = flex.gap;
958
840
  }
959
841
  return style;
960
- }, ...(ngDevMode ? [{ debugName: "hostFlexStyle" }] : []));
842
+ }, ...(ngDevMode ? [{ debugName: "hostFlexStyle" }] : /* istanbul ignore next */ []));
961
843
  this.hostFlexClass = computed(() => {
962
844
  return {
963
845
  ...this.blockClass(),
964
- 'ax-flex': true,
965
- 'ax-h-full': true,
846
+ flex: true,
847
+ 'h-full': true,
966
848
  };
967
- }, ...(ngDevMode ? [{ debugName: "hostFlexClass" }] : []));
849
+ }, ...(ngDevMode ? [{ debugName: "hostFlexClass" }] : /* istanbul ignore next */ []));
968
850
  this.hostClass = computed(() => {
969
851
  return this.hostFlexClass();
970
- }, ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
852
+ }, ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
971
853
  this.hostStyle = computed(() => {
972
854
  return this.hostFlexStyle();
973
- }, ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
855
+ }, ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
974
856
  }
975
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
976
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent }); }
857
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
858
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent }); }
977
859
  }
978
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, decorators: [{
860
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, decorators: [{
979
861
  type: Injectable
980
862
  }] });
981
863
 
982
864
  class AXPInlineBaseLayoutWidgetComponent extends AXPBoxModelLayoutWidgetComponent {
983
865
  constructor() {
984
866
  super(...arguments);
985
- this.hostClass = computed(() => this.inlineClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
986
- this.hostStyle = computed(() => this.inlineStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
867
+ this.hostClass = computed(() => this.inlineClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
868
+ this.hostStyle = computed(() => this.inlineStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
987
869
  }
988
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
989
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent }); }
870
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
871
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent }); }
990
872
  }
991
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, decorators: [{
873
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, decorators: [{
992
874
  type: Injectable
993
875
  }] });
994
876
 
995
877
  class AXPFlexItemBaseLayoutWidgetComponent extends AXPInlineBaseLayoutWidgetComponent {
996
878
  constructor() {
997
879
  super(...arguments);
998
- this.flexItem = computed(() => this.options(), ...(ngDevMode ? [{ debugName: "flexItem" }] : []));
880
+ this.flexItem = computed(() => this.options(), ...(ngDevMode ? [{ debugName: "flexItem" }] : /* istanbul ignore next */ []));
999
881
  this.hostFlexItemStyle = computed(() => {
1000
882
  const inlineStyle = this.blockStyle();
1001
883
  const style = { ...inlineStyle };
@@ -1031,68 +913,68 @@ class AXPFlexItemBaseLayoutWidgetComponent extends AXPInlineBaseLayoutWidgetComp
1031
913
  style['align-self'] = fi.alignSelf;
1032
914
  }
1033
915
  return style;
1034
- }, ...(ngDevMode ? [{ debugName: "hostFlexItemStyle" }] : []));
916
+ }, ...(ngDevMode ? [{ debugName: "hostFlexItemStyle" }] : /* istanbul ignore next */ []));
1035
917
  this.hostFlexItemClass = computed(() => {
1036
918
  return {
1037
919
  ...this.blockClass(),
1038
920
  };
1039
- }, ...(ngDevMode ? [{ debugName: "hostFlexItemClass" }] : []));
921
+ }, ...(ngDevMode ? [{ debugName: "hostFlexItemClass" }] : /* istanbul ignore next */ []));
1040
922
  this.hostClass = computed(() => {
1041
923
  return this.hostFlexItemClass();
1042
- }, ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
924
+ }, ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1043
925
  this.hostStyle = computed(() => {
1044
926
  return this.hostFlexItemStyle();
1045
- }, ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
927
+ }, ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1046
928
  }
1047
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1048
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent }); }
929
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
930
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent }); }
1049
931
  }
1050
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, decorators: [{
932
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, decorators: [{
1051
933
  type: Injectable
1052
934
  }] });
1053
935
 
1054
936
  class AXPGridBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {
1055
937
  constructor() {
1056
938
  super(...arguments);
1057
- this.grid = computed(() => this.options()?.['grid'], ...(ngDevMode ? [{ debugName: "grid" }] : []));
939
+ this.grid = computed(() => this.options()?.['grid'], ...(ngDevMode ? [{ debugName: "grid" }] : /* istanbul ignore next */ []));
1058
940
  this.hostGridStyle = computed(() => {
1059
941
  const style = { ...this.inlineStyle() };
1060
942
  const g = this.grid()?.default;
1061
943
  if (g?.gap)
1062
944
  style['gap'] = g.gap;
1063
945
  return style;
1064
- }, ...(ngDevMode ? [{ debugName: "hostGridStyle" }] : []));
946
+ }, ...(ngDevMode ? [{ debugName: "hostGridStyle" }] : /* istanbul ignore next */ []));
1065
947
  this.hostGridClass = computed(() => {
1066
948
  const cls = {
1067
- ...this.inlineClass(),
1068
- 'ax-grid': true,
949
+ // ...this.inlineClass(),
950
+ 'inline-grid': true,
1069
951
  };
1070
952
  const g = this.grid()?.default;
1071
953
  if (g?.columns)
1072
- cls[`lg:ax-grid-cols-${g.columns}`] = true;
1073
- // if (g?.rows) cls[`lg:ax-grid-rows-${g.rows}`] = true;
954
+ cls[`lg:grid-cols-${g.columns}`] = true;
955
+ // if (g?.rows) cls[`lg:grid-rows-${g.rows}`] = true;
1074
956
  if (g?.justifyItems)
1075
- cls[`lg:ax-justify-items-${g.justifyItems}`] = true;
957
+ cls[`lg:justify-items-${g.justifyItems}`] = true;
1076
958
  if (g?.alignItems)
1077
- cls[`lg:ax-align-items-${g.alignItems}`] = true;
959
+ cls[`lg:align-items-${g.alignItems}`] = true;
1078
960
  if (g?.autoFlow)
1079
- cls[`lg:ax-grid-flow-${g.autoFlow}`] = true;
961
+ cls[`lg:grid-flow-${g.autoFlow}`] = true;
1080
962
  return cls;
1081
- }, ...(ngDevMode ? [{ debugName: "hostGridClass" }] : []));
1082
- this.hostClass = computed(() => this.hostGridClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
1083
- this.hostStyle = computed(() => this.hostGridStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
963
+ }, ...(ngDevMode ? [{ debugName: "hostGridClass" }] : /* istanbul ignore next */ []));
964
+ this.hostClass = computed(() => this.hostGridClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
965
+ this.hostStyle = computed(() => this.hostGridStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1084
966
  }
1085
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1086
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent }); }
967
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
968
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent }); }
1087
969
  }
1088
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, decorators: [{
970
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, decorators: [{
1089
971
  type: Injectable
1090
972
  }] });
1091
973
 
1092
974
  class AXPGridItemBaseLayoutWidgetComponent extends AXPFlexBaseLayoutWidgetComponent {
1093
975
  constructor() {
1094
976
  super(...arguments);
1095
- this.gridItem = computed(() => this.options(), ...(ngDevMode ? [{ debugName: "gridItem" }] : []));
977
+ this.gridItem = computed(() => this.options(), ...(ngDevMode ? [{ debugName: "gridItem" }] : /* istanbul ignore next */ []));
1096
978
  this.hostGridItemStyle = computed(() => {
1097
979
  const style = { ...this.hostFlexStyle() };
1098
980
  const g = this.gridItem();
@@ -1101,31 +983,34 @@ class AXPGridItemBaseLayoutWidgetComponent extends AXPFlexBaseLayoutWidgetCompon
1101
983
  if (g?.justifySelf)
1102
984
  style['justify-self'] = g.justifySelf;
1103
985
  return style;
1104
- }, ...(ngDevMode ? [{ debugName: "hostGridItemStyle" }] : []));
986
+ }, ...(ngDevMode ? [{ debugName: "hostGridItemStyle" }] : /* istanbul ignore next */ []));
1105
987
  this.hostGridItemClass = computed(() => {
1106
988
  const cls = { ...this.hostFlexClass() };
1107
989
  const g = this.gridItem();
990
+ // Mobile-first: full width on small screens so items stack vertically and don't overflow
991
+ cls['col-span-12'] = true;
992
+ // Large screens: apply defined placement so multi-column layout works on desktop
1108
993
  if (g?.colSpan)
1109
- cls[`lg:ax-col-span-${g.colSpan}`] = true;
994
+ cls[`lg:col-span-${g.colSpan}`] = true;
1110
995
  if (g?.colStart)
1111
- cls[`lg:ax-col-start-${g.colStart}`] = true;
996
+ cls[`lg:col-start-${g.colStart}`] = true;
1112
997
  if (g?.colEnd)
1113
- cls[`lg:ax-col-end-${g.colEnd}`] = true;
998
+ cls[`lg:col-end-${g.colEnd}`] = true;
1114
999
  if (g?.rowSpan)
1115
- cls[`lg:ax-row-span-${g.rowSpan}`] = true;
1000
+ cls[`lg:row-span-${g.rowSpan}`] = true;
1116
1001
  if (g?.rowStart)
1117
- cls[`lg:ax-row-start-${g.rowStart}`] = true;
1002
+ cls[`lg:row-start-${g.rowStart}`] = true;
1118
1003
  if (g?.rowEnd)
1119
- cls[`lg:ax-row-end-${g.rowEnd}`] = true;
1004
+ cls[`lg:row-end-${g.rowEnd}`] = true;
1120
1005
  return cls;
1121
- }, ...(ngDevMode ? [{ debugName: "hostGridItemClass" }] : []));
1122
- this.hostClass = computed(() => this.hostGridItemClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
1123
- this.hostStyle = computed(() => this.hostGridItemStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
1006
+ }, ...(ngDevMode ? [{ debugName: "hostGridItemClass" }] : /* istanbul ignore next */ []));
1007
+ this.hostClass = computed(() => this.hostGridItemClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1008
+ this.hostStyle = computed(() => this.hostGridItemStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1124
1009
  }
1125
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1126
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent }); }
1010
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1011
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent }); }
1127
1012
  }
1128
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, decorators: [{
1013
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, decorators: [{
1129
1014
  type: Injectable
1130
1015
  }] });
1131
1016
 
@@ -1134,27 +1019,27 @@ class AXPTableBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponen
1134
1019
  super(...arguments);
1135
1020
  this.hostTableClass = computed(() => ({
1136
1021
  ...this.blockClass(),
1137
- }), ...(ngDevMode ? [{ debugName: "hostTableClass" }] : []));
1022
+ }), ...(ngDevMode ? [{ debugName: "hostTableClass" }] : /* istanbul ignore next */ []));
1138
1023
  this.hostTableStyle = computed(() => {
1139
1024
  const style = { ...this.blockStyle() };
1140
1025
  style['overflow-x'] = 'auto';
1141
1026
  return style;
1142
- }, ...(ngDevMode ? [{ debugName: "hostTableStyle" }] : []));
1143
- this.hostClass = computed(() => this.hostTableClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
1144
- this.hostStyle = computed(() => this.hostTableStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
1027
+ }, ...(ngDevMode ? [{ debugName: "hostTableStyle" }] : /* istanbul ignore next */ []));
1028
+ this.hostClass = computed(() => this.hostTableClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1029
+ this.hostStyle = computed(() => this.hostTableStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1145
1030
  }
1146
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1147
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent }); }
1031
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1032
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent }); }
1148
1033
  }
1149
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent, decorators: [{
1034
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent, decorators: [{
1150
1035
  type: Injectable
1151
1036
  }] });
1152
1037
 
1153
1038
  class AXPTableItemOpsBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {
1154
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1155
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent }); }
1039
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1040
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent }); }
1156
1041
  }
1157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent, decorators: [{
1042
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent, decorators: [{
1158
1043
  type: Injectable
1159
1044
  }] });
1160
1045
 
@@ -1164,57 +1049,105 @@ class AXPTableItemBaseLayoutWidgetComponent extends AXPTableItemOpsBaseLayoutWid
1164
1049
  this.colSpan = computed(() => {
1165
1050
  const v = this.options()?.colSpan;
1166
1051
  return v ? Math.max(1, v) : 1;
1167
- }, ...(ngDevMode ? [{ debugName: "colSpan" }] : []));
1052
+ }, ...(ngDevMode ? [{ debugName: "colSpan" }] : /* istanbul ignore next */ []));
1168
1053
  this.rowSpan = computed(() => {
1169
1054
  const v = this.options()?.rowSpan;
1170
1055
  return v ? Math.max(1, v) : 1;
1171
- }, ...(ngDevMode ? [{ debugName: "rowSpan" }] : []));
1172
- this.hostClass = computed(() => this.blockClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
1173
- this.hostStyle = computed(() => this.blockStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
1056
+ }, ...(ngDevMode ? [{ debugName: "rowSpan" }] : /* istanbul ignore next */ []));
1057
+ this.hostClass = computed(() => this.blockClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
1058
+ this.hostStyle = computed(() => this.blockStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : /* istanbul ignore next */ []));
1174
1059
  }
1175
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1176
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent }); }
1060
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1061
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent }); }
1177
1062
  }
1178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent, decorators: [{
1063
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent, decorators: [{
1179
1064
  type: Injectable
1180
1065
  }] });
1181
1066
 
1067
+ //#region ---- Imports ----
1068
+ /**
1069
+ * Injection token for widget definition providers.
1070
+ * Modules register their widget providers using this token (multi: true).
1071
+ */
1072
+ const AXP_WIDGET_DEFINITION_PROVIDER = new InjectionToken('AXP_WIDGET_DEFINITION_PROVIDER', {
1073
+ factory: () => [],
1074
+ });
1075
+ //#endregion
1076
+
1077
+ //#region ---- Build widget map (shared with tooling / snapshot scripts) ----
1078
+ //TODO RECHECK THIS FUNCTION s.hosseini
1079
+ /**
1080
+ * Merges core + extended widgets the same way as AXPWidgetRegistryService.ensureBuilt().
1081
+ * Use with concrete providers (e.g. AXPCoreWidgetsProvider, AXPEntityWidgetsProvider) in Node scripts without DI.
1082
+ */
1083
+ function buildWidgetRegistryMapFromProviders(providers) {
1084
+ const types = new Map();
1085
+ const AXPExtendedWidgets = [];
1086
+ for (const provider of providers) {
1087
+ const widgets = provider.getWidgets?.() ?? [];
1088
+ for (const w of widgets) {
1089
+ types.set(w.name, w);
1090
+ }
1091
+ const extended = provider.getExtendedWidgets?.() ?? [];
1092
+ AXPExtendedWidgets.push(...extended);
1093
+ }
1094
+ for (const { parentName, widget } of AXPExtendedWidgets) {
1095
+ const parent = types.get(parentName);
1096
+ if (parent) {
1097
+ const merged = merge({}, parent, widget);
1098
+ merged.name = widget.name;
1099
+ types.set(merged.name, merged);
1100
+ }
1101
+ }
1102
+ return types;
1103
+ }
1104
+ //#endregion
1105
+ //#region ---- Widget Registry Service (Token-Based) ----
1106
+ /**
1107
+ * Aggregates widgets from all AXP_WIDGET_DEFINITION_PROVIDER instances.
1108
+ * Token-based like AXP_MENU_PROVIDER / AXP_PERMISSION_DEFINITION_PROVIDER / AXP_SETTING_DEFINITION_PROVIDER.
1109
+ * No separate registry - widgets come solely from providers.
1110
+ */
1182
1111
  class AXPWidgetRegistryService {
1183
- /**
1184
- *
1185
- */
1186
1112
  constructor() {
1187
- this.types = new Map();
1188
- AXPWidgetRegistryService.instance = this;
1189
- }
1190
- register(widget) {
1191
- this.types.set(widget.name, widget);
1113
+ this._providers = inject(AXP_WIDGET_DEFINITION_PROVIDER, { optional: true }) ?? [];
1114
+ this._types = null;
1192
1115
  }
1193
- extend(parentName, widget) {
1194
- const parentWidget = this.resolve(parentName);
1195
- const newWidget = merge({}, parentWidget, widget);
1196
- newWidget.name = widget.name;
1197
- this.register(newWidget);
1116
+ /**
1117
+ * Lazy-build widget map from all providers.
1118
+ */
1119
+ ensureBuilt() {
1120
+ if (this._types)
1121
+ return this._types;
1122
+ this._types = buildWidgetRegistryMapFromProviders(this._providers);
1123
+ return this._types;
1198
1124
  }
1199
1125
  resolve(name) {
1200
- const widget = this.types.get(name);
1126
+ const widget = this.ensureBuilt().get(name);
1201
1127
  if (!widget) {
1202
1128
  throw new Error(`Widget with name "${name}" does not exist.`);
1203
1129
  }
1204
1130
  return widget;
1205
1131
  }
1132
+ /**
1133
+ * Registered widget config when present; otherwise `undefined`. Does not throw — use when
1134
+ * {@link resolve}'s value may be a non-widget id (e.g. data-source row id in dynamic field configurator).
1135
+ */
1136
+ getOptional(name) {
1137
+ return this.ensureBuilt().get(name);
1138
+ }
1206
1139
  all() {
1207
- return Array.from(this.types.values());
1140
+ return Array.from(this.ensureBuilt().values());
1208
1141
  }
1209
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1210
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetRegistryService, providedIn: 'root' }); }
1142
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1143
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetRegistryService, providedIn: 'root' }); }
1211
1144
  }
1212
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetRegistryService, decorators: [{
1145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetRegistryService, decorators: [{
1213
1146
  type: Injectable,
1214
1147
  args: [{
1215
1148
  providedIn: 'root',
1216
1149
  }]
1217
- }], ctorParameters: () => [] });
1150
+ }] });
1218
1151
 
1219
1152
  class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1220
1153
  constructor() {
@@ -1222,8 +1155,8 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1222
1155
  this.widgetRegistery = inject(AXPWidgetRegistryService);
1223
1156
  this.grid = inject(AXBaseDataTable);
1224
1157
  this.expressionEvaluator = inject(AXPExpressionEvaluatorService);
1225
- this.mergedOptions = signal({}, ...(ngDevMode ? [{ debugName: "mergedOptions" }] : []));
1226
- this.loadingRow = signal(null, ...(ngDevMode ? [{ debugName: "loadingRow" }] : []));
1158
+ this.mergedOptions = signal({}, ...(ngDevMode ? [{ debugName: "mergedOptions" }] : /* istanbul ignore next */ []));
1159
+ this.loadingRow = signal(null, ...(ngDevMode ? [{ debugName: "loadingRow" }] : /* istanbul ignore next */ []));
1227
1160
  this.rowInjectorsCache = new Map();
1228
1161
  this.hasExpressions = false;
1229
1162
  this.pendingEvaluations = new Set();
@@ -1292,6 +1225,7 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1292
1225
  const tokenValue = {
1293
1226
  path: this.node.path,
1294
1227
  options: this.mergedOptions(),
1228
+ caption: this.caption,
1295
1229
  };
1296
1230
  this.widgetInjector = Injector.create({
1297
1231
  parent: this.injector,
@@ -1302,7 +1236,12 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1302
1236
  },
1303
1237
  ],
1304
1238
  });
1305
- this.width = this.mergedOptions().width === 'auto' ? 'auto' : this.customWidth ? this.customWidth : (this.mergedOptions().width ?? '200px');
1239
+ this.width =
1240
+ this.mergedOptions().width === 'auto'
1241
+ ? 'auto'
1242
+ : this.customWidth
1243
+ ? this.customWidth
1244
+ : (this.mergedOptions().width ?? '200px');
1306
1245
  this.allowResizing = this.mergedOptions().allowResizing || true;
1307
1246
  this.cdr.detectChanges();
1308
1247
  }
@@ -1390,6 +1329,7 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1390
1329
  const tokenValue = {
1391
1330
  path: this.node.path,
1392
1331
  options: this.mergedOptions(),
1332
+ caption: this.caption,
1393
1333
  };
1394
1334
  rowInjector = Injector.create({
1395
1335
  parent: this.injector,
@@ -1417,11 +1357,14 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1417
1357
  },
1418
1358
  };
1419
1359
  // Start async evaluation - will update injector when complete
1420
- this.expressionEvaluator.evaluate(this.mergedOptions(), scope).then((evaluatedOptions) => {
1360
+ this.expressionEvaluator
1361
+ .evaluate(this.mergedOptions(), scope)
1362
+ .then((evaluatedOptions) => {
1421
1363
  // Create injector with evaluated options
1422
1364
  const tokenValue = {
1423
1365
  path: this.node.path,
1424
1366
  options: evaluatedOptions,
1367
+ caption: this.caption,
1425
1368
  };
1426
1369
  const newInjector = Injector.create({
1427
1370
  parent: this.injector,
@@ -1439,7 +1382,8 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1439
1382
  this.pendingEvaluations.delete(cacheKey);
1440
1383
  // Schedule batched change detection (performance optimization)
1441
1384
  this.scheduleChangeDetection();
1442
- }).catch(() => {
1385
+ })
1386
+ .catch(() => {
1443
1387
  // If evaluation fails, keep using the fallback injector
1444
1388
  this.pendingEvaluations.delete(cacheKey);
1445
1389
  });
@@ -1448,6 +1392,7 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1448
1392
  const tokenValue = {
1449
1393
  path: this.node.path,
1450
1394
  options: this.mergedOptions(),
1395
+ caption: this.caption,
1451
1396
  };
1452
1397
  rowInjector = Injector.create({
1453
1398
  parent: this.injector,
@@ -1464,29 +1409,29 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1464
1409
  }
1465
1410
  return rowInjector;
1466
1411
  }
1467
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetColumnRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1468
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AXPWidgetColumnRendererComponent, isStandalone: false, selector: "axp-widget-column-renderer", inputs: { caption: "caption", customExpandIcon: "customExpandIcon", customCollapseIcon: "customCollapseIcon", customWidth: "customWidth", node: "node", footerTemplate: "footerTemplate", expandHandler: "expandHandler", cellTemplate: "cellTemplate", headerTemplate: "headerTemplate" }, providers: [
1412
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetColumnRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1413
+ 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", cellTemplate: "cellTemplate", headerTemplate: "headerTemplate" }, providers: [
1469
1414
  AXPWidgetCoreService,
1470
1415
  { provide: AXDataTableColumnComponent, useExisting: AXPWidgetColumnRendererComponent },
1471
1416
  ], viewQueries: [{ propertyName: "_contentFooterTemplate", first: true, predicate: ["footer"], descendants: true }, { propertyName: "_contentCellTemplate", first: true, predicate: ["cell"], descendants: true }, { propertyName: "_contentHeaderTemplate", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
1472
1417
  <ng-template #header>{{ caption | translate | async }}</ng-template>
1473
1418
  <ng-template #cell let-row>
1474
- <div [class]="expandHandler ? 'ax-flex ax-gap-2 ax-items-center' : ''">
1419
+ <div [class]="expandHandler ? 'flex gap-2 items-center' : ''">
1475
1420
  @if (expandHandler) {
1476
1421
  <div
1477
1422
  (click)="handleExpandRow(row)"
1478
1423
  class="ax-expand-handler"
1479
- [class.ax-invisible]="!hasExpandableRow(row)"
1424
+ [class.invisible]="!hasExpandableRow(row)"
1480
1425
  id="ax-expand-handler-container"
1481
1426
  [style.padding-inline-start.rem]="row.data?.__meta__?.level * 2"
1482
1427
  >
1483
1428
  @if (loadingRow() === row) {
1484
- <i class="fas fa-spinner-third ax-animate-twSpin ax-animate-infinite"></i>
1429
+ <i class="fas fa-spinner-third animate-twSpin animate-infinite"></i>
1485
1430
  } @else {
1486
1431
  @if (row.data?.__meta__?.expanded) {
1487
- <i [class]="customCollapseIcon || 'far fa-minus-square ax-text-md ax-opacity-75'"></i>
1432
+ <i [class]="customCollapseIcon || 'far fa-minus-square text-md opacity-75'"></i>
1488
1433
  } @else {
1489
- <i [class]="customExpandIcon || 'far fa-plus-square ax-text-md ax-opacity-75'"></i>
1434
+ <i [class]="customExpandIcon || 'far fa-plus-square text-md opacity-75'"></i>
1490
1435
  }
1491
1436
  }
1492
1437
  </div>
@@ -1499,31 +1444,31 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1499
1444
  </div>
1500
1445
  </ng-template>
1501
1446
  <ng-template #footer></ng-template>
1502
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1447
+ `, isInline: true, 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 }); }
1503
1448
  }
1504
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetColumnRendererComponent, decorators: [{
1449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetColumnRendererComponent, decorators: [{
1505
1450
  type: Component,
1506
1451
  args: [{
1507
1452
  selector: 'axp-widget-column-renderer',
1508
1453
  template: `
1509
1454
  <ng-template #header>{{ caption | translate | async }}</ng-template>
1510
1455
  <ng-template #cell let-row>
1511
- <div [class]="expandHandler ? 'ax-flex ax-gap-2 ax-items-center' : ''">
1456
+ <div [class]="expandHandler ? 'flex gap-2 items-center' : ''">
1512
1457
  @if (expandHandler) {
1513
1458
  <div
1514
1459
  (click)="handleExpandRow(row)"
1515
1460
  class="ax-expand-handler"
1516
- [class.ax-invisible]="!hasExpandableRow(row)"
1461
+ [class.invisible]="!hasExpandableRow(row)"
1517
1462
  id="ax-expand-handler-container"
1518
1463
  [style.padding-inline-start.rem]="row.data?.__meta__?.level * 2"
1519
1464
  >
1520
1465
  @if (loadingRow() === row) {
1521
- <i class="fas fa-spinner-third ax-animate-twSpin ax-animate-infinite"></i>
1466
+ <i class="fas fa-spinner-third animate-twSpin animate-infinite"></i>
1522
1467
  } @else {
1523
1468
  @if (row.data?.__meta__?.expanded) {
1524
- <i [class]="customCollapseIcon || 'far fa-minus-square ax-text-md ax-opacity-75'"></i>
1469
+ <i [class]="customCollapseIcon || 'far fa-minus-square text-md opacity-75'"></i>
1525
1470
  } @else {
1526
- <i [class]="customExpandIcon || 'far fa-plus-square ax-text-md ax-opacity-75'"></i>
1471
+ <i [class]="customExpandIcon || 'far fa-plus-square text-md opacity-75'"></i>
1527
1472
  }
1528
1473
  }
1529
1474
  </div>
@@ -1581,15 +1526,15 @@ class AXPWidgetContainerComponent {
1581
1526
  this.builderService.setFunctions(v);
1582
1527
  }
1583
1528
  constructor() {
1584
- this.contextService = inject(AXPWidgetCoreContextStore);
1529
+ this.contextService = inject(AXPContextStore);
1585
1530
  this.builderService = inject(AXPWidgetCoreService);
1586
1531
  this.onContextChanged = new EventEmitter();
1587
1532
  this.status = computed(() => {
1588
1533
  return this.builderService.status();
1589
- }, ...(ngDevMode ? [{ debugName: "status" }] : []));
1534
+ }, ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
1590
1535
  this.isBusy = computed(() => {
1591
1536
  return this.builderService.isBusy();
1592
- }, ...(ngDevMode ? [{ debugName: "isBusy" }] : []));
1537
+ }, ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
1593
1538
  effect(() => {
1594
1539
  if (this.contextService.isChanged()) {
1595
1540
  this.onContextChanged.emit(this.contextService.changeEvent());
@@ -1602,17 +1547,17 @@ class AXPWidgetContainerComponent {
1602
1547
  find(name) {
1603
1548
  return this.builderService.waitForWidget(name);
1604
1549
  }
1605
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1606
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: AXPWidgetContainerComponent, isStandalone: false, selector: "axp-widgets-container", inputs: { context: "context", functions: "functions" }, outputs: { onContextChanged: "onContextChanged" }, host: { styleAttribute: "display: contents;" }, providers: [AXPWidgetCoreService, AXPWidgetCoreContextStore], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1550
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1551
+ 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 }); }
1607
1552
  }
1608
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetContainerComponent, decorators: [{
1553
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetContainerComponent, decorators: [{
1609
1554
  type: Component,
1610
1555
  args: [{
1611
1556
  selector: 'axp-widgets-container',
1612
1557
  template: `<ng-content></ng-content>`,
1613
1558
  changeDetection: ChangeDetectionStrategy.OnPush,
1614
1559
  host: { style: 'display: contents;' },
1615
- providers: [AXPWidgetCoreService, AXPWidgetCoreContextStore],
1560
+ providers: [AXPWidgetCoreService, AXPContextStore],
1616
1561
  standalone: false,
1617
1562
  }]
1618
1563
  }], ctorParameters: () => [], propDecorators: { onContextChanged: [{
@@ -1624,17 +1569,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
1624
1569
  }] } });
1625
1570
 
1626
1571
  class AXPWidgetPlaceholderComponent {
1627
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1628
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: AXPWidgetPlaceholderComponent, isStandalone: true, selector: "axp-widget-placeholder", ngImport: i0, template: `<div>
1629
- <ax-skeleton class="ax-w-full ax-h-10 ax-rounded-md"></ax-skeleton>
1572
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1573
+ 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>
1574
+ <ax-skeleton class="w-full h-10 rounded-md"></ax-skeleton>
1630
1575
  </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1631
1576
  }
1632
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetPlaceholderComponent, decorators: [{
1577
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetPlaceholderComponent, decorators: [{
1633
1578
  type: Component,
1634
1579
  args: [{
1635
1580
  selector: 'axp-widget-placeholder',
1636
1581
  template: `<div>
1637
- <ax-skeleton class="ax-w-full ax-h-10 ax-rounded-md"></ax-skeleton>
1582
+ <ax-skeleton class="w-full h-10 rounded-md"></ax-skeleton>
1638
1583
  </div>`,
1639
1584
  changeDetection: ChangeDetectionStrategy.OnPush,
1640
1585
  imports: [AXSkeletonModule],
@@ -1646,11 +1591,11 @@ class AXPWidgetRendererDirective {
1646
1591
  //#endregion
1647
1592
  //#endregion
1648
1593
  constructor() {
1649
- this.parentNode = input(...(ngDevMode ? [undefined, { debugName: "parentNode" }] : []));
1650
- this.index = input(...(ngDevMode ? [undefined, { debugName: "index" }] : []));
1651
- this.mode = input.required(...(ngDevMode ? [{ debugName: "mode" }] : []));
1652
- this.node = input.required(...(ngDevMode ? [{ debugName: "node" }] : []));
1653
- this._options = signal({}, ...(ngDevMode ? [{ debugName: "_options" }] : []));
1594
+ this.parentNode = input(...(ngDevMode ? [undefined, { debugName: "parentNode" }] : /* istanbul ignore next */ []));
1595
+ this.index = input(...(ngDevMode ? [undefined, { debugName: "index" }] : /* istanbul ignore next */ []));
1596
+ this.mode = input.required(...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
1597
+ this.node = input.required(...(ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []));
1598
+ this._options = signal({}, ...(ngDevMode ? [{ debugName: "_options" }] : /* istanbul ignore next */ []));
1654
1599
  this.options = this._options.asReadonly();
1655
1600
  this.onOptionsChanged = output();
1656
1601
  this.onValueChanged = output();
@@ -1659,22 +1604,22 @@ class AXPWidgetRendererDirective {
1659
1604
  /**
1660
1605
  * Signal that emits the component reference when it's ready
1661
1606
  */
1662
- this._componentRefSignal = signal(null, ...(ngDevMode ? [{ debugName: "_componentRefSignal" }] : []));
1607
+ this._componentRefSignal = signal(null, ...(ngDevMode ? [{ debugName: "_componentRefSignal" }] : /* istanbul ignore next */ []));
1663
1608
  this.componentRefSignal = this._componentRefSignal.asReadonly();
1664
1609
  //#endregion
1665
1610
  //#region ---- Properties ----
1666
- this.mergedOptions = signal({}, ...(ngDevMode ? [{ debugName: "mergedOptions" }] : []));
1611
+ this.mergedOptions = signal({}, ...(ngDevMode ? [{ debugName: "mergedOptions" }] : /* istanbul ignore next */ []));
1667
1612
  this.injector = inject(Injector);
1668
1613
  this.builderService = inject(AXPWidgetCoreService);
1669
- this.contextService = inject(AXPWidgetCoreContextStore);
1614
+ this.contextService = inject(AXPContextStore);
1670
1615
  this.widgetRegistery = inject(AXPWidgetRegistryService);
1671
1616
  this.unsubscriber = inject(AXUnsubscriber);
1672
1617
  this.translateService = inject(AXTranslationService);
1673
1618
  this.widgetService = inject(AXPWidgetRegistryService);
1674
1619
  this.expressionEvaluator = inject(AXPExpressionEvaluatorService);
1675
1620
  this.viewContainerRef = inject(ViewContainerRef);
1676
- this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
1677
- this.isVisible = signal(true, ...(ngDevMode ? [{ debugName: "isVisible" }] : []));
1621
+ this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
1622
+ this.isVisible = signal(true, ...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
1678
1623
  this.expressionEvaluators = new Map();
1679
1624
  this.renderTimeoutId = null;
1680
1625
  this.hasInitialRender = false;
@@ -1852,77 +1797,88 @@ class AXPWidgetRendererDirective {
1852
1797
  }
1853
1798
  return false;
1854
1799
  }
1800
+ /**
1801
+ * True when a context store path used in an expression (`context.eval`, `context.options`) is
1802
+ * affected by `changedPath`.
1803
+ */
1804
+ contextStorePathDependsOnChangedPath(evalPath, changedPath) {
1805
+ const normalizePath = (p) => {
1806
+ if (!p)
1807
+ return p;
1808
+ const parts = p.split('.');
1809
+ const last = parts[parts.length - 1];
1810
+ if (last && last.endsWith('Id')) {
1811
+ parts.splice(parts.length - 1, 1, last.slice(0, -2), 'id');
1812
+ }
1813
+ return parts.join('.');
1814
+ };
1815
+ const isSegmentSuffix = (a, b) => {
1816
+ if (!a || !b)
1817
+ return false;
1818
+ const pa = a.split('.');
1819
+ const pb = b.split('.');
1820
+ if (pb.length > pa.length)
1821
+ return false;
1822
+ for (let i = 1; i <= pb.length; i++) {
1823
+ if (pa[pa.length - i] !== pb[pb.length - i])
1824
+ return false;
1825
+ }
1826
+ return true;
1827
+ };
1828
+ const evalNorm = normalizePath(evalPath);
1829
+ const changedNorm = normalizePath(changedPath);
1830
+ const rawMatch = evalPath === changedPath ||
1831
+ evalPath.startsWith(changedPath + '.') ||
1832
+ changedPath.startsWith(evalPath + '.') ||
1833
+ isSegmentSuffix(evalPath, changedPath) ||
1834
+ isSegmentSuffix(changedPath, evalPath);
1835
+ const normMatch = evalNorm === changedNorm ||
1836
+ evalNorm.startsWith(changedNorm + '.') ||
1837
+ changedNorm.startsWith(evalNorm + '.') ||
1838
+ isSegmentSuffix(evalNorm, changedNorm) ||
1839
+ isSegmentSuffix(changedNorm, evalNorm);
1840
+ if (rawMatch || normMatch) {
1841
+ return true;
1842
+ }
1843
+ return this.isPathAlias(evalPath, changedPath);
1844
+ }
1845
+ /**
1846
+ * Whether an expression template string reads context store paths affected by `changedPath`.
1847
+ */
1848
+ expressionTextDependsOnContextPath(expressionValue, changedPath) {
1849
+ const contextEvalRegex = /context\.eval\(['"]([^'\"]+)['"]\)/g;
1850
+ let match;
1851
+ while ((match = contextEvalRegex.exec(expressionValue)) !== null) {
1852
+ if (this.contextStorePathDependsOnChangedPath(match[1], changedPath)) {
1853
+ return true;
1854
+ }
1855
+ }
1856
+ const contextOptionsQuoted = /context\.options\(\s*['"]([^'"]*)['"]\s*\)/g;
1857
+ while ((match = contextOptionsQuoted.exec(expressionValue)) !== null) {
1858
+ const sub = match[1];
1859
+ const evalPath = sub === '' ? 'options' : `options.${sub}`;
1860
+ if (this.contextStorePathDependsOnChangedPath(evalPath, changedPath)) {
1861
+ return true;
1862
+ }
1863
+ }
1864
+ const contextOptionsEmpty = /context\.options\(\s*\)/g;
1865
+ while ((match = contextOptionsEmpty.exec(expressionValue)) !== null) {
1866
+ if (this.contextStorePathDependsOnChangedPath('options', changedPath)) {
1867
+ return true;
1868
+ }
1869
+ }
1870
+ return false;
1871
+ }
1855
1872
  hasExpressionDependency(changedPath) {
1856
- // Check if any cached expressions depend on the changed path
1857
1873
  for (const [path, evaluator] of this.expressionEvaluators) {
1858
- // Check if the expression path itself contains the changed path
1859
1874
  if (path.includes(changedPath)) {
1860
1875
  return true;
1861
1876
  }
1862
- // Parse the actual expression content to check for context.eval() calls
1863
- // We need to get the original expression string to analyze it
1864
1877
  const node = this.node();
1865
1878
  const expressionValue = this.getExpressionValueFromNode(node, path);
1866
1879
  if (expressionValue && typeof expressionValue === 'string') {
1867
- // Look for context.eval() calls that reference the changed path
1868
- const contextEvalRegex = /context\.eval\(['"]([^'\"]+)['"]\)/g;
1869
- let match;
1870
- while ((match = contextEvalRegex.exec(expressionValue)) !== null) {
1871
- const evalPath = match[1];
1872
- // Normalize Id-suffixed segments to dot-id form (e.g., 'typeId' -> 'type.id', 'person.typeId' -> 'person.type.id')
1873
- const normalizePath = (p) => {
1874
- if (!p)
1875
- return p;
1876
- const parts = p.split('.');
1877
- const last = parts[parts.length - 1];
1878
- if (last && last.endsWith('Id')) {
1879
- parts.splice(parts.length - 1, 1, last.slice(0, -2), 'id');
1880
- }
1881
- return parts.join('.');
1882
- };
1883
- const isSegmentSuffix = (a, b) => {
1884
- if (!a || !b)
1885
- return false;
1886
- const pa = a.split('.');
1887
- const pb = b.split('.');
1888
- if (pb.length > pa.length)
1889
- return false;
1890
- for (let i = 1; i <= pb.length; i++) {
1891
- if (pa[pa.length - i] !== pb[pb.length - i])
1892
- return false;
1893
- }
1894
- return true;
1895
- };
1896
- const evalNorm = normalizePath(evalPath);
1897
- const changedNorm = normalizePath(changedPath);
1898
- // Debug log for dependency check
1899
- // console.log(
1900
- // `🧭 [${this.node().type}] dep-check expr='${path}', changed='${changedPath}', eval='${evalPath}', evalNorm='${evalNorm}', changedNorm='${changedNorm}'`,
1901
- // );
1902
- // Generic direct and hierarchical dependency checks (raw and normalized)
1903
- const rawMatch = evalPath === changedPath ||
1904
- evalPath.startsWith(changedPath + '.') ||
1905
- changedPath.startsWith(evalPath + '.') ||
1906
- isSegmentSuffix(evalPath, changedPath) ||
1907
- isSegmentSuffix(changedPath, evalPath);
1908
- const normMatch = evalNorm === changedNorm ||
1909
- evalNorm.startsWith(changedNorm + '.') ||
1910
- changedNorm.startsWith(evalNorm + '.') ||
1911
- isSegmentSuffix(evalNorm, changedNorm) ||
1912
- isSegmentSuffix(changedNorm, evalNorm);
1913
- if (rawMatch || normMatch) {
1914
- // console.log(
1915
- // `🔍 [${this.node().type}] Expression '${path}' depends on '${changedPath}' via context.eval('${evalPath}') (generic match)`,
1916
- // );
1917
- return true;
1918
- }
1919
- // Check for path aliases/mappings (e.g., typeId.id <-> type.id)
1920
- if (this.isPathAlias(evalPath, changedPath)) {
1921
- // console.log(
1922
- // `🔍 [${this.node().type}] Expression '${path}' depends on '${changedPath}' via context.eval('${evalPath}') (path alias)`,
1923
- // );
1924
- return true;
1925
- }
1880
+ if (this.expressionTextDependsOnContextPath(expressionValue, changedPath)) {
1881
+ return true;
1926
1882
  }
1927
1883
  }
1928
1884
  }
@@ -2009,20 +1965,8 @@ class AXPWidgetRendererDirective {
2009
1965
  const visibility = node.options?.['visible'] || this.mergedOptions()?.visible;
2010
1966
  if (!visibility || typeof visibility !== 'string')
2011
1967
  return false;
2012
- // Check if visibility expression depends on the changed path
2013
1968
  if (this.expressionEvaluator.isExpression(visibility)) {
2014
- // Parse the visibility expression to check for context.eval() calls
2015
- const contextEvalRegex = /context\.eval\(['"]([^'\"]+)['"]\)/g;
2016
- let match;
2017
- while ((match = contextEvalRegex.exec(visibility)) !== null) {
2018
- const evalPath = match[1];
2019
- // Check for direct or hierarchical dependency
2020
- if (evalPath === changedPath ||
2021
- evalPath.startsWith(changedPath + '.') ||
2022
- changedPath.startsWith(evalPath + '.')) {
2023
- return true;
2024
- }
2025
- }
1969
+ return this.expressionTextDependsOnContextPath(visibility, changedPath);
2026
1970
  }
2027
1971
  return false;
2028
1972
  }
@@ -2438,34 +2382,46 @@ class AXPWidgetRendererDirective {
2438
2382
  isDirty: () => {
2439
2383
  return this.contextService.isDirty();
2440
2384
  },
2385
+ /**
2386
+ * Host/widget-under-edit `options` from the shared context store (same values as
2387
+ * `context.eval('options' + (path ? '.' + path : ''))`), not `widget.options` on the nested
2388
+ * property field instance. Uses one `getValue` so smart-path behavior matches `context.eval`.
2389
+ */
2390
+ options: (path) => {
2391
+ if (path == null || path === '') {
2392
+ return this.contextService.getValue('options');
2393
+ }
2394
+ return this.contextService.getValue(`options.${path}`);
2395
+ },
2441
2396
  };
2442
2397
  }
2443
2398
  getEventScope() {
2444
2399
  return {
2445
- context: (path) => {
2400
+ context: (...paths) => {
2446
2401
  return this.onContextChanged.pipe(filter((c) => {
2447
- // If no path filter specified, pass all events
2448
- if (path == null || path === '') {
2402
+ const activePaths = paths.filter((p) => !!p && p.trim().length > 0);
2403
+ // If no path filters specified, pass all events
2404
+ if (activePaths.length === 0) {
2449
2405
  return true;
2450
2406
  }
2451
2407
  // Ensure c.path exists
2452
2408
  if (!c.path) {
2453
2409
  return false;
2454
2410
  }
2455
- // Pattern: "prefix*" - matches paths that start with prefix
2456
- if (path.endsWith('*')) {
2457
- const prefix = path.substring(0, path.length - 1);
2458
- return c.path.startsWith(prefix);
2459
- }
2460
- // Pattern: "*suffix" - matches paths that end with suffix
2461
- else if (path.startsWith('*')) {
2462
- const suffix = path.substring(1);
2463
- return c.path.endsWith(suffix);
2464
- }
2465
- // Exact match
2466
- else {
2411
+ return activePaths.some((path) => {
2412
+ // Pattern: "prefix*" - matches paths that start with prefix
2413
+ if (path.endsWith('*')) {
2414
+ const prefix = path.substring(0, path.length - 1);
2415
+ return c.path.startsWith(prefix);
2416
+ }
2417
+ // Pattern: "*suffix" - matches paths that end with suffix
2418
+ if (path.startsWith('*')) {
2419
+ const suffix = path.substring(1);
2420
+ return c.path.endsWith(suffix);
2421
+ }
2422
+ // Exact match
2467
2423
  return c.path === path;
2468
- }
2424
+ });
2469
2425
  }));
2470
2426
  },
2471
2427
  from: (event) => get(this.instance.api(), event),
@@ -2476,6 +2432,16 @@ class AXPWidgetRendererDirective {
2476
2432
  }
2477
2433
  getWidgetScope() {
2478
2434
  return {
2435
+ /** Resolved options for this renderer's widget instance (not the host / property-viewer target). */
2436
+ options: (path) => {
2437
+ const opts = this.instance && typeof this.instance.options === 'function'
2438
+ ? this.instance.options()
2439
+ : this.mergedOptions();
2440
+ if (path == null || path === '') {
2441
+ return opts;
2442
+ }
2443
+ return getSmart(opts, path);
2444
+ },
2479
2445
  call: (name, ...args) => {
2480
2446
  this.instance.call(name, ...args);
2481
2447
  },
@@ -2581,14 +2547,14 @@ class AXPWidgetRendererDirective {
2581
2547
  // console.error('Error evaluating action expression:', templateExpression, error);
2582
2548
  }
2583
2549
  }
2584
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2585
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.19", 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: [
2550
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2551
+ 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: [
2586
2552
  {
2587
2553
  provide: AXUnsubscriber,
2588
2554
  },
2589
2555
  ], exportAs: ["widgetRenderer"], usesOnChanges: true, ngImport: i0 }); }
2590
2556
  }
2591
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetRendererDirective, decorators: [{
2557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetRendererDirective, decorators: [{
2592
2558
  type: Directive,
2593
2559
  args: [{
2594
2560
  selector: '[axp-widget-renderer]',
@@ -2604,63 +2570,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
2604
2570
 
2605
2571
  const COMPONENTS = [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective];
2606
2572
  class AXPWidgetCoreModule {
2607
- static forRoot(config) {
2608
- return {
2609
- ngModule: AXPWidgetCoreModule,
2610
- providers: [
2611
- {
2612
- provide: 'AXPWidgetCoreModuleFactory',
2613
- useFactory: (registry) => async () => {
2614
- await Promise.all(config?.widgets?.map((w) => Promise.resolve(registry.register(w))) || []);
2615
- await Promise.all(config?.extendedWidgets?.map((ew) => Promise.resolve(registry.extend(ew.parentName, ew.widget))) || []);
2616
- },
2617
- deps: [AXPWidgetRegistryService],
2618
- multi: true,
2619
- },
2620
- ],
2621
- };
2622
- }
2623
- static forChild(config) {
2624
- return {
2625
- ngModule: AXPWidgetCoreModule,
2626
- providers: [
2627
- {
2628
- provide: 'AXPWidgetCoreModuleFactory',
2629
- useFactory: (registry) => async () => {
2630
- await Promise.all(config?.widgets?.map((w) => Promise.resolve(registry.register(w))) || []);
2631
- await Promise.all(config?.extendedWidgets?.map((ew) => Promise.resolve(registry.extend(ew.parentName, ew.widget))) || []);
2632
- },
2633
- deps: [AXPWidgetRegistryService],
2634
- multi: true,
2635
- },
2636
- ],
2637
- };
2638
- }
2639
- /**
2640
- * @ignore
2641
- */
2642
- constructor(instances) {
2643
- instances?.forEach((f) => {
2644
- f();
2645
- });
2646
- }
2647
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetCoreModule, deps: [{ token: 'AXPWidgetCoreModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
2648
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetCoreModule, declarations: [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective], imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule, AXTranslationModule], exports: [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective] }); }
2649
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetCoreModule, imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule, AXTranslationModule] }); }
2573
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2574
+ 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] }); }
2575
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreModule, imports: [CommonModule, PortalModule, AXSkeletonModule, AXTranslationModule] }); }
2650
2576
  }
2651
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWidgetCoreModule, decorators: [{
2577
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWidgetCoreModule, decorators: [{
2652
2578
  type: NgModule,
2653
2579
  args: [{
2654
- imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule, AXTranslationModule],
2580
+ imports: [CommonModule, PortalModule, AXSkeletonModule, AXTranslationModule],
2655
2581
  exports: [...COMPONENTS],
2656
2582
  declarations: [...COMPONENTS],
2583
+ providers: [],
2657
2584
  }]
2658
- }], ctorParameters: () => [{ type: undefined, decorators: [{
2659
- type: Optional
2660
- }, {
2661
- type: Inject,
2662
- args: ['AXPWidgetCoreModuleFactory']
2663
- }] }] });
2585
+ }] });
2586
+
2587
+ //#endregion
2588
+ //#region ---- Mapping ----
2589
+ /**
2590
+ * Converts a domain {@link AXPProperty} into a {@link AXPWidgetProperty} row for
2591
+ * the layout property viewer (`AXPPropertyViewerService` and `buildPropertyViewerTabsFromProperties`).
2592
+ */
2593
+ function mapAXPPropertyToWidgetProperty(property, options) {
2594
+ const { group, order, valuePathPrefix, resolveTitle, resolveDescription } = options;
2595
+ const path = valuePathPrefix ? `${valuePathPrefix}.${property.name}` : property.name;
2596
+ const iface = property.interface;
2597
+ const widgetType = iface?.type ?? 'text-editor';
2598
+ const description = resolveDescription?.(property);
2599
+ return {
2600
+ name: property.name,
2601
+ title: resolveTitle(property),
2602
+ ...(description !== undefined && description !== '' ? { description } : {}),
2603
+ group,
2604
+ order,
2605
+ schema: {
2606
+ dataType: property.dataType,
2607
+ interface: {
2608
+ path,
2609
+ name: property.name,
2610
+ type: widgetType,
2611
+ options: iface?.options ?? {},
2612
+ ...(iface?.triggers ? { triggers: iface.triggers } : {}),
2613
+ },
2614
+ },
2615
+ validations: property.validations,
2616
+ visible: true,
2617
+ };
2618
+ }
2619
+ //#endregion
2664
2620
 
2665
2621
  class AXPPropertyEditorHelper {
2666
2622
  static expandShorthand(values) {
@@ -2944,31 +2900,148 @@ class AXPWidgetSerializationHelper {
2944
2900
  }
2945
2901
  //#endregion
2946
2902
 
2903
+ //#region ---- Editor sub-categories (widget picker) ----
2904
+ const AXP_WIDGETS_EDITOR_SUB_TEXT_INPUTS = {
2905
+ name: 'editor-text-inputs',
2906
+ order: 1,
2907
+ title: '@platform-layout-widgets:subcategories.editor-text-inputs.title',
2908
+ };
2909
+ const AXP_WIDGETS_EDITOR_SUB_NUMERIC = {
2910
+ name: 'editor-numeric',
2911
+ order: 2,
2912
+ title: '@platform-layout-widgets:subcategories.editor-numeric.title',
2913
+ };
2914
+ const AXP_WIDGETS_EDITOR_SUB_DATETIME = {
2915
+ name: 'editor-datetime',
2916
+ order: 3,
2917
+ title: '@platform-layout-widgets:subcategories.editor-datetime.title',
2918
+ };
2919
+ const AXP_WIDGETS_EDITOR_SUB_CHOICE = {
2920
+ name: 'editor-choice',
2921
+ order: 4,
2922
+ title: '@platform-layout-widgets:subcategories.editor-choice.title',
2923
+ };
2924
+ const AXP_WIDGETS_EDITOR_SUB_RICH = {
2925
+ name: 'editor-rich',
2926
+ order: 5,
2927
+ title: '@platform-layout-widgets:subcategories.editor-rich.title',
2928
+ };
2929
+ const AXP_WIDGETS_EDITOR_SUB_VISUAL = {
2930
+ name: 'editor-visual',
2931
+ order: 6,
2932
+ title: '@platform-layout-widgets:subcategories.editor-visual.title',
2933
+ };
2934
+ const AXP_WIDGETS_EDITOR_SUB_COMPOSITE = {
2935
+ name: 'editor-composite',
2936
+ order: 7,
2937
+ title: '@platform-layout-widgets:subcategories.editor-composite.title',
2938
+ };
2939
+ const AXP_WIDGETS_EDITOR_SUB_CONFIG = {
2940
+ name: 'editor-config',
2941
+ order: 8,
2942
+ title: '@platform-layout-widgets:subcategories.editor-config.title',
2943
+ };
2944
+ //#endregion
2945
+ //#region ---- Layout sub-categories (widget picker) ----
2946
+ const AXP_WIDGETS_LAYOUT_SUB_SHELL = {
2947
+ name: 'layout-shell',
2948
+ order: 1,
2949
+ title: '@platform-layout-widgets:subcategories.layout-shell.title',
2950
+ };
2951
+ const AXP_WIDGETS_LAYOUT_SUB_GRID = {
2952
+ name: 'layout-grid',
2953
+ order: 2,
2954
+ title: '@platform-layout-widgets:subcategories.layout-grid.title',
2955
+ };
2956
+ const AXP_WIDGETS_LAYOUT_SUB_SURFACES = {
2957
+ name: 'layout-surfaces',
2958
+ order: 3,
2959
+ title: '@platform-layout-widgets:subcategories.layout-surfaces.title',
2960
+ };
2961
+ const AXP_WIDGETS_LAYOUT_SUB_TABS = {
2962
+ name: 'layout-tabs',
2963
+ order: 4,
2964
+ title: '@platform-layout-widgets:subcategories.layout-tabs.title',
2965
+ };
2966
+ const AXP_WIDGETS_LAYOUT_SUB_LISTS = {
2967
+ name: 'layout-lists',
2968
+ order: 5,
2969
+ title: '@platform-layout-widgets:subcategories.layout-lists.title',
2970
+ };
2971
+ const AXP_WIDGETS_LAYOUT_SUB_UTILITY = {
2972
+ name: 'layout-utility',
2973
+ order: 6,
2974
+ title: '@platform-layout-widgets:subcategories.layout-utility.title',
2975
+ };
2976
+ //#endregion
2977
+ //#region ---- Action sub-categories (widget picker) ----
2978
+ const AXP_WIDGETS_ACTION_SUB_CONTROLS = {
2979
+ name: 'action-controls',
2980
+ order: 1,
2981
+ title: '@platform-layout-widgets:subcategories.action-controls.title',
2982
+ };
2983
+ //#endregion
2984
+ //#region ---- Advance sub-categories (widget picker) ----
2985
+ const AXP_WIDGETS_ADVANCE_SUB_MEDIA = {
2986
+ name: 'advance-media',
2987
+ order: 1,
2988
+ title: '@platform-layout-widgets:subcategories.advance-media.title',
2989
+ };
2990
+ const AXP_WIDGETS_ADVANCE_SUB_INPUT = {
2991
+ name: 'advance-input',
2992
+ order: 2,
2993
+ title: '@platform-layout-widgets:subcategories.advance-input.title',
2994
+ };
2995
+ const AXP_WIDGETS_ADVANCE_SUB_DATA = {
2996
+ name: 'advance-data',
2997
+ order: 3,
2998
+ title: '@platform-layout-widgets:subcategories.advance-data.title',
2999
+ };
3000
+ const AXP_WIDGETS_ADVANCE_SUB_TOOLS = {
3001
+ name: 'advance-tools',
3002
+ order: 4,
3003
+ title: '@platform-layout-widgets:subcategories.advance-tools.title',
3004
+ };
3005
+ //#endregion
3006
+ /** Normalizes widget categories to an array for iteration and serialization. */
3007
+ function normalizeWidgetCategories(categories) {
3008
+ if (categories == null) {
3009
+ return [];
3010
+ }
3011
+ return Array.isArray(categories) ? categories : [categories];
3012
+ }
2947
3013
  const AXP_WIDGETS_LAYOUT_CATEGORY = {
2948
3014
  name: 'layout',
2949
3015
  order: 1,
2950
- title: 'Layout',
3016
+ title: '@platform-layout-widgets:categories.layout.title',
2951
3017
  };
2952
3018
  const AXP_WIDGETS_EDITOR_CATEGORY = {
2953
3019
  name: 'editor',
2954
3020
  order: 2,
2955
- title: 'Editors',
3021
+ title: '@platform-layout-widgets:categories.editor.title',
2956
3022
  };
2957
3023
  const AXP_WIDGETS_ACTION_CATEGORY = {
2958
3024
  name: 'action',
2959
3025
  order: 3,
2960
- title: 'Action',
3026
+ title: '@platform-layout-widgets:categories.action.title',
2961
3027
  };
2962
3028
  const AXP_WIDGETS_ADVANCE_CATEGORY = {
2963
3029
  name: 'advance',
2964
3030
  order: 4,
2965
- title: 'Advance',
3031
+ title: '@platform-layout-widgets:categories.advance.title',
3032
+ };
3033
+ /** AI category tab in the widget picker (metadata); unrelated to Widgets:GetForAI listing scope. */
3034
+ const AXP_WIDGETS_AI_CATEGORY = {
3035
+ name: 'ai',
3036
+ order: 5,
3037
+ title: '@platform-layout-widgets:categories.ai.title',
2966
3038
  };
2967
3039
  const AXP_WIDGETS_CATEGORIES = [
2968
3040
  AXP_WIDGETS_LAYOUT_CATEGORY,
2969
3041
  AXP_WIDGETS_EDITOR_CATEGORY,
2970
3042
  AXP_WIDGETS_ACTION_CATEGORY,
2971
3043
  AXP_WIDGETS_ADVANCE_CATEGORY,
3044
+ AXP_WIDGETS_AI_CATEGORY,
2972
3045
  ];
2973
3046
 
2974
3047
  var AXPWidgetGroupEnum;
@@ -2981,11 +3054,12 @@ var AXPWidgetGroupEnum;
2981
3054
  AXPWidgetGroupEnum["SettingWidget"] = "setting-widget";
2982
3055
  AXPWidgetGroupEnum["EntityWidget"] = "entity-widget";
2983
3056
  AXPWidgetGroupEnum["UtilityWidget"] = "utility-widget";
3057
+ AXPWidgetGroupEnum["BaseWidget"] = "base-widget";
2984
3058
  })(AXPWidgetGroupEnum || (AXPWidgetGroupEnum = {}));
2985
3059
 
2986
3060
  /**
2987
3061
  * Generated bundle index. Do not edit.
2988
3062
  */
2989
3063
 
2990
- export { AXPBaseWidgetComponent, AXPBlockBaseLayoutWidgetComponent, AXPBoxModelLayoutWidgetComponent, AXPColumnWidgetComponent, AXPDataListWidgetComponent, AXPFlexBaseLayoutWidgetComponent, AXPFlexItemBaseLayoutWidgetComponent, AXPGridBaseLayoutWidgetComponent, AXPGridItemBaseLayoutWidgetComponent, AXPInlineBaseLayoutWidgetComponent, AXPLayoutBaseWidgetComponent, AXPPageStatus, AXPPropertyEditorHelper, AXPTableBaseLayoutWidgetComponent, AXPTableItemBaseLayoutWidgetComponent, AXPTableItemOpsBaseLayoutWidgetComponent, AXPValueWidgetComponent, AXPWidgetColumnRendererComponent, AXPWidgetContainerComponent, AXPWidgetCoreContextChangeEvent, AXPWidgetCoreContextStore, AXPWidgetCoreElement, AXPWidgetCoreModule, AXPWidgetCoreService, AXPWidgetGroupEnum, AXPWidgetRegistryService, AXPWidgetRendererDirective, AXPWidgetSerializationHelper, AXPWidgetStatus, AXPWidgetsCatalog, AXP_WIDGETS_ACTION_CATEGORY, AXP_WIDGETS_ADVANCE_CATEGORY, AXP_WIDGETS_CATEGORIES, AXP_WIDGETS_EDITOR_CATEGORY, AXP_WIDGETS_LAYOUT_CATEGORY, AXP_WIDGET_COLUMN_TOKEN, AXP_WIDGET_TOKEN, cloneProperty, createBooleanProperty, createNumberProperty, createSelectProperty, createStringProperty, findNonEmptyBreakpoints };
3064
+ export { AXPBaseWidgetComponent, AXPBlockBaseLayoutWidgetComponent, AXPBoxModelLayoutWidgetComponent, AXPColumnWidgetComponent, AXPDataListWidgetComponent, AXPFlexBaseLayoutWidgetComponent, AXPFlexItemBaseLayoutWidgetComponent, AXPGridBaseLayoutWidgetComponent, AXPGridItemBaseLayoutWidgetComponent, AXPInlineBaseLayoutWidgetComponent, AXPLayoutBaseWidgetComponent, AXPPageStatus, AXPPropertyEditorHelper, AXPTableBaseLayoutWidgetComponent, AXPTableItemBaseLayoutWidgetComponent, AXPTableItemOpsBaseLayoutWidgetComponent, AXPValueWidgetComponent, AXPWidgetColumnRendererComponent, AXPWidgetContainerComponent, AXPWidgetCoreElement, AXPWidgetCoreModule, AXPWidgetCoreService, AXPWidgetGroupEnum, AXPWidgetRegistryService, AXPWidgetRendererDirective, AXPWidgetSerializationHelper, AXPWidgetStatus, AXPWidgetsCatalog, AXP_WIDGETS_ACTION_CATEGORY, AXP_WIDGETS_ACTION_SUB_CONTROLS, AXP_WIDGETS_ADVANCE_CATEGORY, AXP_WIDGETS_ADVANCE_SUB_DATA, AXP_WIDGETS_ADVANCE_SUB_INPUT, AXP_WIDGETS_ADVANCE_SUB_MEDIA, AXP_WIDGETS_ADVANCE_SUB_TOOLS, AXP_WIDGETS_AI_CATEGORY, AXP_WIDGETS_CATEGORIES, AXP_WIDGETS_EDITOR_CATEGORY, AXP_WIDGETS_EDITOR_SUB_CHOICE, AXP_WIDGETS_EDITOR_SUB_COMPOSITE, AXP_WIDGETS_EDITOR_SUB_CONFIG, AXP_WIDGETS_EDITOR_SUB_DATETIME, AXP_WIDGETS_EDITOR_SUB_NUMERIC, AXP_WIDGETS_EDITOR_SUB_RICH, AXP_WIDGETS_EDITOR_SUB_TEXT_INPUTS, AXP_WIDGETS_EDITOR_SUB_VISUAL, AXP_WIDGETS_LAYOUT_CATEGORY, AXP_WIDGETS_LAYOUT_SUB_GRID, AXP_WIDGETS_LAYOUT_SUB_LISTS, AXP_WIDGETS_LAYOUT_SUB_SHELL, AXP_WIDGETS_LAYOUT_SUB_SURFACES, AXP_WIDGETS_LAYOUT_SUB_TABS, AXP_WIDGETS_LAYOUT_SUB_UTILITY, AXP_WIDGET_COLUMN_TOKEN, AXP_WIDGET_DEFINITION_PROVIDER, AXP_WIDGET_TOKEN, buildWidgetRegistryMapFromProviders, cloneProperty, createBooleanProperty, createNumberProperty, createSelectProperty, createStringProperty, findNonEmptyBreakpoints, mapAXPPropertyToWidgetProperty, normalizeWidgetCategories };
2991
3065
  //# sourceMappingURL=acorex-platform-layout-widget-core.mjs.map