@acorex/platform 20.3.0-next.0 → 20.3.0-next.10

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 (112) hide show
  1. package/common/index.d.ts +8 -9
  2. package/core/index.d.ts +597 -46
  3. package/fesm2022/acorex-platform-auth.mjs +19 -19
  4. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-common.mjs +111 -163
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +759 -113
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +16 -16
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +518 -95
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-components.mjs +1997 -215
  14. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-layout-designer.mjs +86 -79
  16. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-entity-create-entity.command-764ie8R8.mjs +52 -0
  18. package/fesm2022/acorex-platform-layout-entity-create-entity.command-764ie8R8.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-layout-entity.mjs +1650 -916
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +37 -29
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-native.mjs +7 -7
  24. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-runtime.mjs +40 -40
  26. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  27. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-I7Eq8Nti.mjs → acorex-platform-themes-default-entity-master-create-view.component-Ct-ri59W.mjs} +5 -5
  28. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Ct-ri59W.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-D3VUh8K8.mjs → acorex-platform-themes-default-entity-master-list-view.component-7BB4LdjK.mjs} +30 -31
  30. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-7BB4LdjK.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BDJR088o.mjs +101 -0
  32. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BDJR088o.mjs.map +1 -0
  33. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BMkhNfF4.mjs → acorex-platform-themes-default-entity-master-single-view.component-BExtm1JE.mjs} +7 -7
  34. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BMkhNfF4.mjs.map → acorex-platform-themes-default-entity-master-single-view.component-BExtm1JE.mjs.map} +1 -1
  35. package/fesm2022/{acorex-platform-themes-default-error-401.component-D4glpFvU.mjs → acorex-platform-themes-default-error-401.component-DrO1PEOH.mjs} +4 -4
  36. package/fesm2022/{acorex-platform-themes-default-error-401.component-D4glpFvU.mjs.map → acorex-platform-themes-default-error-401.component-DrO1PEOH.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-themes-default-error-404.component-BvGeDMjo.mjs → acorex-platform-themes-default-error-404.component-DqVq0oHX.mjs} +4 -4
  38. package/fesm2022/{acorex-platform-themes-default-error-404.component-BvGeDMjo.mjs.map → acorex-platform-themes-default-error-404.component-DqVq0oHX.mjs.map} +1 -1
  39. package/fesm2022/{acorex-platform-themes-default-error-offline.component-BINy-Zo3.mjs → acorex-platform-themes-default-error-offline.component-Bt2PTL7_.mjs} +4 -4
  40. package/fesm2022/{acorex-platform-themes-default-error-offline.component-BINy-Zo3.mjs.map → acorex-platform-themes-default-error-offline.component-Bt2PTL7_.mjs.map} +1 -1
  41. package/fesm2022/acorex-platform-themes-default.mjs +40 -40
  42. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  43. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-C833prGO.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BgEh06Tn.mjs} +24 -14
  44. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BgEh06Tn.mjs.map +1 -0
  45. package/fesm2022/{acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs → acorex-platform-themes-shared-settings.provider-CLUKU4y0.mjs} +2 -2
  46. package/fesm2022/acorex-platform-themes-shared-settings.provider-CLUKU4y0.mjs.map +1 -0
  47. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-DjKLg513.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-AeOQxjbS.mjs} +23 -8
  48. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-AeOQxjbS.mjs.map +1 -0
  49. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-DE0wO98F.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-DEVzRd6-.mjs} +23 -8
  50. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DEVzRd6-.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-themes-shared.mjs +241 -74
  52. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  53. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-BJtkWusr.mjs → acorex-platform-widgets-button-widget-designer.component-DSaD9Fwc.mjs} +5 -5
  54. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-DSaD9Fwc.mjs.map +1 -0
  55. package/fesm2022/{acorex-platform-widgets-extra-properties-schema-widget-edit.component-B3SJUnGQ.mjs → acorex-platform-widgets-extra-properties-schema-widget-edit.component-D9mf08rU.mjs} +4 -4
  56. package/fesm2022/{acorex-platform-widgets-extra-properties-schema-widget-edit.component-B3SJUnGQ.mjs.map → acorex-platform-widgets-extra-properties-schema-widget-edit.component-D9mf08rU.mjs.map} +1 -1
  57. package/fesm2022/{acorex-platform-widgets-extra-properties-schema-widget-view.component-BLR0JkRt.mjs → acorex-platform-widgets-extra-properties-schema-widget-view.component-D6GQ-eyr.mjs} +4 -4
  58. package/fesm2022/{acorex-platform-widgets-extra-properties-schema-widget-view.component-BLR0JkRt.mjs.map → acorex-platform-widgets-extra-properties-schema-widget-view.component-D6GQ-eyr.mjs.map} +1 -1
  59. package/fesm2022/{acorex-platform-widgets-extra-properties-values-widget-edit.component-hzR2FgOm.mjs → acorex-platform-widgets-extra-properties-values-widget-edit.component-DVbIdVZ6.mjs} +4 -4
  60. package/fesm2022/{acorex-platform-widgets-extra-properties-values-widget-edit.component-hzR2FgOm.mjs.map → acorex-platform-widgets-extra-properties-values-widget-edit.component-DVbIdVZ6.mjs.map} +1 -1
  61. package/fesm2022/{acorex-platform-widgets-extra-properties-values-widget-view.component-IDm6Clua.mjs → acorex-platform-widgets-extra-properties-values-widget-view.component-D-aM64Hu.mjs} +4 -4
  62. package/fesm2022/{acorex-platform-widgets-extra-properties-values-widget-view.component-IDm6Clua.mjs.map → acorex-platform-widgets-extra-properties-values-widget-view.component-D-aM64Hu.mjs.map} +1 -1
  63. package/fesm2022/{acorex-platform-widgets-extra-properties-widget-edit.component-BRO9tYDa.mjs → acorex-platform-widgets-extra-properties-widget-edit.component-em2-aU8E.mjs} +4 -4
  64. package/fesm2022/{acorex-platform-widgets-extra-properties-widget-edit.component-BRO9tYDa.mjs.map → acorex-platform-widgets-extra-properties-widget-edit.component-em2-aU8E.mjs.map} +1 -1
  65. package/fesm2022/{acorex-platform-widgets-extra-properties-widget-view.component-CkpLimyW.mjs → acorex-platform-widgets-extra-properties-widget-view.component-BeuIofdr.mjs} +4 -4
  66. package/fesm2022/{acorex-platform-widgets-extra-properties-widget-view.component-CkpLimyW.mjs.map → acorex-platform-widgets-extra-properties-widget-view.component-BeuIofdr.mjs.map} +1 -1
  67. package/fesm2022/{acorex-platform-widgets-file-list-popup.component-BafU5Lfl.mjs → acorex-platform-widgets-file-list-popup.component-Cmtq2bBV.mjs} +5 -5
  68. package/fesm2022/acorex-platform-widgets-file-list-popup.component-Cmtq2bBV.mjs.map +1 -0
  69. package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-Cw9WcZze.mjs → acorex-platform-widgets-page-widget-designer.component-B-ZEi2yd.mjs} +6 -6
  70. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-B-ZEi2yd.mjs.map +1 -0
  71. package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-BDQIfr0g.mjs → acorex-platform-widgets-tabular-data-edit-popup.component-CMqq_iOj.mjs} +11 -11
  72. package/fesm2022/acorex-platform-widgets-tabular-data-edit-popup.component-CMqq_iOj.mjs.map +1 -0
  73. package/fesm2022/{acorex-platform-widgets-tabular-data-view-popup.component-CmPqtt0G.mjs → acorex-platform-widgets-tabular-data-view-popup.component-CRpjdiNz.mjs} +6 -5
  74. package/fesm2022/acorex-platform-widgets-tabular-data-view-popup.component-CRpjdiNz.mjs.map +1 -0
  75. package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-DaR4Nkv4.mjs → acorex-platform-widgets-text-block-widget-designer.component-DeSmBqMa.mjs} +5 -6
  76. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-DeSmBqMa.mjs.map +1 -0
  77. package/fesm2022/acorex-platform-widgets.mjs +9725 -8964
  78. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  79. package/fesm2022/acorex-platform-workflow.mjs +25 -25
  80. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  81. package/layout/builder/index.d.ts +69 -21
  82. package/layout/components/index.d.ts +816 -58
  83. package/layout/designer/index.d.ts +4 -2
  84. package/layout/entity/index.d.ts +437 -231
  85. package/package.json +8 -8
  86. package/widgets/index.d.ts +1806 -732
  87. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-I7Eq8Nti.mjs.map +0 -1
  88. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D3VUh8K8.mjs.map +0 -1
  89. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-16sdMBvH.mjs +0 -101
  90. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-16sdMBvH.mjs.map +0 -1
  91. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-C833prGO.mjs.map +0 -1
  92. package/fesm2022/acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs.map +0 -1
  93. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DjKLg513.mjs.map +0 -1
  94. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DE0wO98F.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-BJtkWusr.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-DeKpl0uK.mjs +0 -84
  97. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-DeKpl0uK.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-Cv7dEMCm.mjs +0 -55
  99. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-Cv7dEMCm.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-C6-QPsnb.mjs +0 -76
  101. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-C6-QPsnb.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-CohkI1w1.mjs +0 -55
  103. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-CohkI1w1.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-widgets-file-list-popup.component-BafU5Lfl.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-widgets-file-rename-popup.component-DA_CgIvm.mjs +0 -211
  106. package/fesm2022/acorex-platform-widgets-file-rename-popup.component-DA_CgIvm.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-Cw9WcZze.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-CM_v-cL4.mjs +0 -40
  109. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-CM_v-cL4.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-widgets-tabular-data-edit-popup.component-BDQIfr0g.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-widgets-tabular-data-view-popup.component-CmPqtt0G.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-DaR4Nkv4.mjs.map +0 -1
@@ -158,10 +158,10 @@ class AXPLayoutBuilderService {
158
158
  });
159
159
  }
160
160
  ngOnDestroy() { }
161
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPLayoutBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
162
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPLayoutBuilderService }); }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLayoutBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
162
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLayoutBuilderService }); }
163
163
  }
164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPLayoutBuilderService, decorators: [{
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLayoutBuilderService, decorators: [{
165
165
  type: Injectable
166
166
  }] });
167
167
 
@@ -284,13 +284,10 @@ const AXPWidgetsCatalog = {
284
284
  color: 'color-editor',
285
285
  contact: 'contact-editor',
286
286
  dateTime: 'date-time-editor',
287
- email: 'email-editor',
288
287
  largeText: 'large-text-editor',
289
- link: 'link-editor',
290
288
  number: 'number-editor',
291
289
  numberUnit: 'number-unit-editor',
292
290
  password: 'password-editor',
293
- phone: 'phone-editor',
294
291
  richText: 'rich-text-editor',
295
292
  select: 'select-editor',
296
293
  selectionList: 'selection-list-editor',
@@ -317,7 +314,7 @@ const AXPWidgetsCatalog = {
317
314
  advancedGridItem: 'advanced-grid-item-layout',
318
315
  grid: 'grid-layout',
319
316
  gridItem: 'grid-item-layout',
320
- gridRow: 'grid-row-layout',
317
+ // gridRow: 'grid-row-layout',
321
318
  widgetSelector: 'widget-selector',
322
319
  template: 'template',
323
320
  templateDesigner: 'template-designer',
@@ -327,6 +324,8 @@ const AXPWidgetsCatalog = {
327
324
  border: 'border',
328
325
  flexLayout: 'flex-layout',
329
326
  flexItem: 'flex-item-layout',
327
+ tableLayout: 'table-layout',
328
+ tableItem: 'table-item-layout',
330
329
  avatar: 'avatar',
331
330
  themePaletteChooser: 'theme-palette-chooser',
332
331
  themeModeChooser: 'theme-mode-chooser',
@@ -469,6 +468,7 @@ class AXPBaseWidgetComponent extends AXPLayoutElement {
469
468
  this.config = this.token.config;
470
469
  this.node = this.token.node;
471
470
  this.name = this.token.node.name;
471
+ this.component = this;
472
472
  this._options = signal(this.token.options ?? {}, ...(ngDevMode ? [{ debugName: "_options" }] : []));
473
473
  this.options = this._options.asReadonly();
474
474
  this.onOptionsChanged = new Subject();
@@ -526,17 +526,17 @@ class AXPBaseWidgetComponent extends AXPLayoutElement {
526
526
  this._children.set([...children]);
527
527
  }
528
528
  onAdded() { }
529
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
530
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPBaseWidgetComponent }); }
529
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
530
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBaseWidgetComponent }); }
531
531
  }
532
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPBaseWidgetComponent, decorators: [{
532
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBaseWidgetComponent, decorators: [{
533
533
  type: Injectable
534
534
  }] });
535
535
  class AXPLayoutBaseWidgetComponent extends AXPBaseWidgetComponent {
536
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPLayoutBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
537
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPLayoutBaseWidgetComponent }); }
536
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLayoutBaseWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
537
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLayoutBaseWidgetComponent }); }
538
538
  }
539
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPLayoutBaseWidgetComponent, decorators: [{
539
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLayoutBaseWidgetComponent, decorators: [{
540
540
  type: Injectable
541
541
  }] });
542
542
  class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
@@ -640,10 +640,10 @@ class AXPValueWidgetComponent extends AXPLayoutBaseWidgetComponent {
640
640
  this.setValue(e.value);
641
641
  }
642
642
  }
643
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPValueWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
644
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPValueWidgetComponent }); }
643
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPValueWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
644
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPValueWidgetComponent }); }
645
645
  }
646
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPValueWidgetComponent, decorators: [{
646
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPValueWidgetComponent, decorators: [{
647
647
  type: Injectable
648
648
  }] });
649
649
  class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
@@ -750,10 +750,10 @@ class AXPDataListWidgetComponent extends AXPValueWidgetComponent {
750
750
  [this.textField()]: item,
751
751
  };
752
752
  }
753
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPDataListWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
754
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPDataListWidgetComponent }); }
753
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDataListWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
754
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDataListWidgetComponent }); }
755
755
  }
756
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPDataListWidgetComponent, decorators: [{
756
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPDataListWidgetComponent, decorators: [{
757
757
  type: Injectable
758
758
  }] });
759
759
  class AXPColumnWidgetComponent {
@@ -771,10 +771,10 @@ class AXPColumnWidgetComponent {
771
771
  return this.rawValue;
772
772
  }, ...(ngDevMode ? [{ debugName: "value" }] : []));
773
773
  }
774
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPColumnWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
775
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPColumnWidgetComponent }); }
774
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPColumnWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
775
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPColumnWidgetComponent }); }
776
776
  }
777
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPColumnWidgetComponent, decorators: [{
777
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPColumnWidgetComponent, decorators: [{
778
778
  type: Injectable
779
779
  }] });
780
780
 
@@ -828,7 +828,7 @@ class AXPBoxModelLayoutWidgetComponent extends AXPLayoutBaseWidgetComponent {
828
828
  return {
829
829
  'ax-block': true,
830
830
  'ax-w-full': true,
831
- 'ax-widget-outline': true,
831
+ // 'ax-widget-outline': true,
832
832
  };
833
833
  }, ...(ngDevMode ? [{ debugName: "blockClass" }] : []));
834
834
  this.inlineClass = computed(() => {
@@ -837,10 +837,10 @@ class AXPBoxModelLayoutWidgetComponent extends AXPLayoutBaseWidgetComponent {
837
837
  };
838
838
  }, ...(ngDevMode ? [{ debugName: "inlineClass" }] : []));
839
839
  }
840
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
841
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent }); }
840
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
841
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent }); }
842
842
  }
843
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, decorators: [{
843
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBoxModelLayoutWidgetComponent, decorators: [{
844
844
  type: Injectable
845
845
  }] });
846
846
 
@@ -850,10 +850,10 @@ class AXPBlockBaseLayoutWidgetComponent extends AXPBoxModelLayoutWidgetComponent
850
850
  this.hostClass = computed(() => this.blockClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
851
851
  this.hostStyle = computed(() => this.blockStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
852
852
  }
853
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
854
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent }); }
853
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
854
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent }); }
855
855
  }
856
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, decorators: [{
856
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPBlockBaseLayoutWidgetComponent, decorators: [{
857
857
  type: Injectable
858
858
  }] });
859
859
 
@@ -904,6 +904,7 @@ class AXPFlexBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent
904
904
  return {
905
905
  ...this.blockClass(),
906
906
  'ax-flex': true,
907
+ 'ax-h-full': true,
907
908
  };
908
909
  }, ...(ngDevMode ? [{ debugName: "hostFlexClass" }] : []));
909
910
  this.hostClass = computed(() => {
@@ -913,10 +914,10 @@ class AXPFlexBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent
913
914
  return this.hostFlexStyle();
914
915
  }, ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
915
916
  }
916
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
917
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent }); }
917
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
918
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent }); }
918
919
  }
919
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, decorators: [{
920
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPFlexBaseLayoutWidgetComponent, decorators: [{
920
921
  type: Injectable
921
922
  }] });
922
923
 
@@ -926,10 +927,10 @@ class AXPInlineBaseLayoutWidgetComponent extends AXPBoxModelLayoutWidgetComponen
926
927
  this.hostClass = computed(() => this.inlineClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
927
928
  this.hostStyle = computed(() => this.inlineStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
928
929
  }
929
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
930
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent }); }
930
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
931
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent }); }
931
932
  }
932
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, decorators: [{
933
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPInlineBaseLayoutWidgetComponent, decorators: [{
933
934
  type: Injectable
934
935
  }] });
935
936
 
@@ -985,17 +986,17 @@ class AXPFlexItemBaseLayoutWidgetComponent extends AXPInlineBaseLayoutWidgetComp
985
986
  return this.hostFlexItemStyle();
986
987
  }, ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
987
988
  }
988
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
989
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent }); }
989
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
990
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent }); }
990
991
  }
991
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, decorators: [{
992
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPFlexItemBaseLayoutWidgetComponent, decorators: [{
992
993
  type: Injectable
993
994
  }] });
994
995
 
995
996
  class AXPGridBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {
996
997
  constructor() {
997
998
  super(...arguments);
998
- this.grid = computed(() => this.options()?.grid, ...(ngDevMode ? [{ debugName: "grid" }] : []));
999
+ this.grid = computed(() => this.options()?.['grid'], ...(ngDevMode ? [{ debugName: "grid" }] : []));
999
1000
  this.hostGridStyle = computed(() => {
1000
1001
  const style = { ...this.inlineStyle() };
1001
1002
  const g = this.grid()?.default;
@@ -1024,20 +1025,28 @@ class AXPGridBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent
1024
1025
  this.hostClass = computed(() => this.hostGridClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
1025
1026
  this.hostStyle = computed(() => this.hostGridStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
1026
1027
  }
1027
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1028
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent }); }
1028
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1029
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent }); }
1029
1030
  }
1030
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, decorators: [{
1031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPGridBaseLayoutWidgetComponent, decorators: [{
1031
1032
  type: Injectable
1032
1033
  }] });
1033
1034
 
1034
- class AXPGridItemBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {
1035
+ class AXPGridItemBaseLayoutWidgetComponent extends AXPFlexBaseLayoutWidgetComponent {
1035
1036
  constructor() {
1036
1037
  super(...arguments);
1037
1038
  this.gridItem = computed(() => this.options(), ...(ngDevMode ? [{ debugName: "gridItem" }] : []));
1038
- this.hostGridItemStyle = computed(() => ({ ...this.inlineStyle() }), ...(ngDevMode ? [{ debugName: "hostGridItemStyle" }] : []));
1039
+ this.hostGridItemStyle = computed(() => {
1040
+ const style = { ...this.hostFlexStyle() };
1041
+ const g = this.gridItem();
1042
+ if (g?.alignSelf)
1043
+ style['align-self'] = g.alignSelf;
1044
+ if (g?.justifySelf)
1045
+ style['justify-self'] = g.justifySelf;
1046
+ return style;
1047
+ }, ...(ngDevMode ? [{ debugName: "hostGridItemStyle" }] : []));
1039
1048
  this.hostGridItemClass = computed(() => {
1040
- const cls = { ...this.inlineClass() };
1049
+ const cls = { ...this.hostFlexClass() };
1041
1050
  const g = this.gridItem();
1042
1051
  if (g?.colSpan)
1043
1052
  cls[`lg:ax-col-span-${g.colSpan}`] = true;
@@ -1056,10 +1065,60 @@ class AXPGridItemBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetCompo
1056
1065
  this.hostClass = computed(() => this.hostGridItemClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
1057
1066
  this.hostStyle = computed(() => this.hostGridItemStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
1058
1067
  }
1059
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1060
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent }); }
1068
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1069
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent }); }
1070
+ }
1071
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, decorators: [{
1072
+ type: Injectable
1073
+ }] });
1074
+
1075
+ class AXPTableBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {
1076
+ constructor() {
1077
+ super(...arguments);
1078
+ this.hostTableClass = computed(() => ({
1079
+ ...this.blockClass(),
1080
+ }), ...(ngDevMode ? [{ debugName: "hostTableClass" }] : []));
1081
+ this.hostTableStyle = computed(() => {
1082
+ const style = { ...this.blockStyle() };
1083
+ style['overflow-x'] = 'auto';
1084
+ return style;
1085
+ }, ...(ngDevMode ? [{ debugName: "hostTableStyle" }] : []));
1086
+ this.hostClass = computed(() => this.hostTableClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
1087
+ this.hostStyle = computed(() => this.hostTableStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
1088
+ }
1089
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1090
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent }); }
1091
+ }
1092
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTableBaseLayoutWidgetComponent, decorators: [{
1093
+ type: Injectable
1094
+ }] });
1095
+
1096
+ class AXPTableItemOpsBaseLayoutWidgetComponent extends AXPBlockBaseLayoutWidgetComponent {
1097
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1098
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent }); }
1061
1099
  }
1062
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPGridItemBaseLayoutWidgetComponent, decorators: [{
1100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTableItemOpsBaseLayoutWidgetComponent, decorators: [{
1101
+ type: Injectable
1102
+ }] });
1103
+
1104
+ class AXPTableItemBaseLayoutWidgetComponent extends AXPTableItemOpsBaseLayoutWidgetComponent {
1105
+ constructor() {
1106
+ super(...arguments);
1107
+ this.colSpan = computed(() => {
1108
+ const v = this.options()?.colSpan;
1109
+ return v ? Math.max(1, v) : 1;
1110
+ }, ...(ngDevMode ? [{ debugName: "colSpan" }] : []));
1111
+ this.rowSpan = computed(() => {
1112
+ const v = this.options()?.rowSpan;
1113
+ return v ? Math.max(1, v) : 1;
1114
+ }, ...(ngDevMode ? [{ debugName: "rowSpan" }] : []));
1115
+ this.hostClass = computed(() => this.blockClass(), ...(ngDevMode ? [{ debugName: "hostClass" }] : []));
1116
+ this.hostStyle = computed(() => this.blockStyle(), ...(ngDevMode ? [{ debugName: "hostStyle" }] : []));
1117
+ }
1118
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1119
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent }); }
1120
+ }
1121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPTableItemBaseLayoutWidgetComponent, decorators: [{
1063
1122
  type: Injectable
1064
1123
  }] });
1065
1124
 
@@ -1090,10 +1149,10 @@ class AXPWidgetRegistryService {
1090
1149
  all() {
1091
1150
  return Array.from(this.types.values());
1092
1151
  }
1093
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1094
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetRegistryService, providedIn: 'root' }); }
1152
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1153
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetRegistryService, providedIn: 'root' }); }
1095
1154
  }
1096
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetRegistryService, decorators: [{
1155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetRegistryService, decorators: [{
1097
1156
  type: Injectable,
1098
1157
  args: [{
1099
1158
  providedIn: 'root',
@@ -1175,8 +1234,8 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1175
1234
  rowData: data,
1176
1235
  };
1177
1236
  }
1178
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetColumnRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1179
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.6", 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: [
1237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetColumnRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1238
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.8", type: AXPWidgetColumnRendererComponent, isStandalone: false, selector: "axp-widget-column-renderer", inputs: { caption: "caption", customExpandIcon: "customExpandIcon", customCollapseIcon: "customCollapseIcon", customWidth: "customWidth", node: "node", footerTemplate: "footerTemplate", expandHandler: "expandHandler", cellTemplate: "cellTemplate", headerTemplate: "headerTemplate" }, providers: [
1180
1239
  AXPLayoutBuilderService,
1181
1240
  { provide: AXDataTableColumnComponent, useExisting: AXPWidgetColumnRendererComponent },
1182
1241
  ], 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: `
@@ -1212,7 +1271,7 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
1212
1271
  <ng-template #footer></ng-template>
1213
1272
  `, 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 }); }
1214
1273
  }
1215
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetColumnRendererComponent, decorators: [{
1274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetColumnRendererComponent, decorators: [{
1216
1275
  type: Component,
1217
1276
  args: [{
1218
1277
  selector: 'axp-widget-column-renderer',
@@ -1313,10 +1372,10 @@ class AXPWidgetContainerComponent {
1313
1372
  find(name) {
1314
1373
  return this.builderService.waitForWidget(name);
1315
1374
  }
1316
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1317
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: AXPWidgetContainerComponent, isStandalone: false, selector: "axp-widgets-container", inputs: { context: "context", functions: "functions" }, outputs: { onContextChanged: "onContextChanged" }, host: { styleAttribute: "display: contents;" }, providers: [AXPLayoutBuilderService, AXPLayoutBuilderContextStore], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1375
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1376
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.8", type: AXPWidgetContainerComponent, isStandalone: false, selector: "axp-widgets-container", inputs: { context: "context", functions: "functions" }, outputs: { onContextChanged: "onContextChanged" }, host: { styleAttribute: "display: contents;" }, providers: [AXPLayoutBuilderService, AXPLayoutBuilderContextStore], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1318
1377
  }
1319
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetContainerComponent, decorators: [{
1378
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetContainerComponent, decorators: [{
1320
1379
  type: Component,
1321
1380
  args: [{
1322
1381
  selector: 'axp-widgets-container',
@@ -1335,12 +1394,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImpor
1335
1394
  }] } });
1336
1395
 
1337
1396
  class AXPWidgetPlaceholderComponent {
1338
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1339
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: AXPWidgetPlaceholderComponent, isStandalone: true, selector: "axp-widget-placeholder", ngImport: i0, template: `<div>
1397
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1398
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.8", type: AXPWidgetPlaceholderComponent, isStandalone: true, selector: "axp-widget-placeholder", ngImport: i0, template: `<div>
1340
1399
  <ax-skeleton class="ax-w-full ax-h-10 ax-rounded-md"></ax-skeleton>
1341
1400
  </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1$1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1342
1401
  }
1343
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetPlaceholderComponent, decorators: [{
1402
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetPlaceholderComponent, decorators: [{
1344
1403
  type: Component,
1345
1404
  args: [{
1346
1405
  selector: 'axp-widget-placeholder',
@@ -1354,6 +1413,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImpor
1354
1413
  }] });
1355
1414
 
1356
1415
  class AXPWidgetRendererDirective {
1416
+ //#endregion
1357
1417
  //#endregion
1358
1418
  constructor() {
1359
1419
  this.parentNode = input(...(ngDevMode ? [undefined, { debugName: "parentNode" }] : []));
@@ -1380,29 +1440,314 @@ class AXPWidgetRendererDirective {
1380
1440
  this.renderTimeoutId = null;
1381
1441
  this.hasInitialRender = false;
1382
1442
  this.onContextChanged = new Subject();
1443
+ //#region ---- Performance Optimization Properties ----
1444
+ this.contextUpdateQueue = new Set();
1445
+ this.contextUpdateTimeout = null;
1446
+ this.CONTEXT_UPDATE_DEBOUNCE_MS = 4; // ~250fps for large forms
1447
+ // Removed visibility detection - not needed for current implementation
1448
+ // Expression result caching
1449
+ this.expressionCache = new Map();
1450
+ this.EXPRESSION_CACHE_TTL = 500; // Cache for 500ms (increased for better hit rate)
1451
+ // Options change tracking
1452
+ this.lastAppliedOptions = null;
1453
+ // Expression result tracking
1454
+ this.lastExpressionResults = new Map();
1455
+ // Buffer for context changes that happen before initial render completes
1456
+ this.preRenderContextQueue = new Set();
1383
1457
  effect(async () => {
1384
1458
  const changed = this.contextService.changeEvent();
1385
1459
  // Don't trigger re-render during initial setup
1386
1460
  if (!this.hasInitialRender) {
1461
+ if (changed.path) {
1462
+ this.preRenderContextQueue.add(changed.path);
1463
+ // console.log(`📝 [${this.node().type}] Buffered pre-render context change: ${changed.path}`);
1464
+ }
1387
1465
  return;
1388
1466
  }
1389
- if ((await this.updateOptionsBasedOnContext()) > 0) {
1390
- this.applyOptions();
1391
- }
1392
- if (this.checkFormulaForUpdate(this.node().formula, changed.path)) {
1393
- await this.updateValueBasedOnFormula();
1394
- }
1395
- //
1396
- if (changed.path) {
1397
- this.onContextChanged.next({ path: changed.path });
1467
+ // CRITICAL PERFORMANCE FIX: Only respond to relevant context changes
1468
+ if (changed.path && this.isRelevantContextChange(changed.path)) {
1469
+ // console.log(`🎯 [${this.node().type}] Context change detected: ${changed.path}`);
1470
+ this.queueContextUpdate(changed.path);
1398
1471
  }
1399
1472
  });
1400
1473
  this.builderService.onRefresh.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {
1401
- if ((await this.updateOptionsBasedOnContext()) > 0) {
1402
- this.applyOptions();
1474
+ await this.processBatchedUpdates();
1475
+ });
1476
+ }
1477
+ //#region ---- Expression Caching Methods ----
1478
+ getCachedExpressionResult(expressionKey) {
1479
+ const cached = this.expressionCache.get(expressionKey);
1480
+ if (cached && performance.now() - cached.timestamp < this.EXPRESSION_CACHE_TTL) {
1481
+ // console.log(`💾 [${this.node().type}] Using cached expression result for '${expressionKey}'`);
1482
+ return cached.value;
1483
+ }
1484
+ return null;
1485
+ }
1486
+ setCachedExpressionResult(expressionKey, value) {
1487
+ this.expressionCache.set(expressionKey, {
1488
+ value,
1489
+ timestamp: performance.now(),
1490
+ });
1491
+ }
1492
+ clearExpressionCache() {
1493
+ this.expressionCache.clear();
1494
+ }
1495
+ isPathAffectingExpressions(changedPath) {
1496
+ // console.log(
1497
+ // `🔍 [${this.node().type}] Checking if path '${changedPath}' affects expressions. Expression count: ${this.expressionEvaluators.size}`,
1498
+ // );
1499
+ // If widget has no expressions, no need to clear cache
1500
+ if (this.expressionEvaluators.size === 0) {
1501
+ // console.log(`🔍 [${this.node().type}] Path '${changedPath}' - no expressions, keeping cache`);
1502
+ return false;
1503
+ }
1504
+ // Use the same logic as hasExpressionDependency to check for actual dependencies
1505
+ if (this.hasExpressionDependency(changedPath)) {
1506
+ // console.log(`🔍 [${this.node().type}] Path '${changedPath}' affects expressions - clearing cache`);
1507
+ return true;
1508
+ }
1509
+ // console.log(`🔍 [${this.node().type}] Path '${changedPath}' does not affect expressions - keeping cache`);
1510
+ return false;
1511
+ }
1512
+ //#endregion
1513
+ //#region ---- Context Batching Methods ----
1514
+ queueContextUpdate(path) {
1515
+ if (path) {
1516
+ // console.log(`🔄 [${this.node().type}] Queueing context update for path: ${path}`);
1517
+ this.contextUpdateQueue.add(path);
1518
+ // Clear existing timeout
1519
+ if (this.contextUpdateTimeout) {
1520
+ clearTimeout(this.contextUpdateTimeout);
1403
1521
  }
1522
+ // Debounce updates
1523
+ this.contextUpdateTimeout = setTimeout(() => {
1524
+ // console.log(`⚡ [${this.node().type}] Processing batched updates for ${this.contextUpdateQueue.size} paths`);
1525
+ this.processBatchedUpdates();
1526
+ }, this.CONTEXT_UPDATE_DEBOUNCE_MS);
1527
+ }
1528
+ }
1529
+ async processBatchedUpdates() {
1530
+ if (this.contextUpdateQueue.size === 0)
1531
+ return;
1532
+ const startTime = performance.now();
1533
+ const paths = Array.from(this.contextUpdateQueue);
1534
+ this.contextUpdateQueue.clear();
1535
+ // console.log(`📊 [${this.node().type}] Processing ${paths.length} paths:`, paths);
1536
+ // Clear expression cache only if changed paths affect this widget's expressions
1537
+ const shouldClearCache = paths.some((path) => this.isPathAffectingExpressions(path));
1538
+ if (shouldClearCache) {
1539
+ // console.log(`🗑️ [${this.node().type}] Clearing expression cache due to expression-affecting path change`);
1540
+ this.clearExpressionCache();
1541
+ }
1542
+ // Process updates in batches
1543
+ const optionsStartTime = performance.now();
1544
+ const hasOptionsUpdate = await this.updateOptionsBasedOnContext();
1545
+ const optionsTime = performance.now() - optionsStartTime;
1546
+ if (typeof hasOptionsUpdate === 'number' && hasOptionsUpdate > 0) {
1547
+ // console.log(`🔧 [${this.node().type}] Options updated (${optionsTime.toFixed(2)}ms)`);
1548
+ this.applyOptions();
1549
+ }
1550
+ // Check formulas for any of the changed paths
1551
+ const formulaStartTime = performance.now();
1552
+ const formulaNeedsUpdate = paths.some((path) => this.checkFormulaForUpdate(this.node().formula, path));
1553
+ if (formulaNeedsUpdate) {
1554
+ // console.log(`🧮 [${this.node().type}] Formula needs update`);
1555
+ await this.updateValueBasedOnFormula();
1556
+ }
1557
+ const formulaTime = performance.now() - formulaStartTime;
1558
+ // Emit context changes
1559
+ paths.forEach((path) => {
1560
+ this.onContextChanged.next({ path });
1404
1561
  });
1562
+ const totalTime = performance.now() - startTime;
1563
+ // console.log(
1564
+ // `✅ [${this.node().type}] Batch processing completed in ${totalTime.toFixed(2)}ms (options: ${optionsTime.toFixed(2)}ms, formula: ${formulaTime.toFixed(2)}ms)`,
1565
+ // );
1566
+ }
1567
+ //#endregion
1568
+ //#region ---- Context Relevance Filtering ----
1569
+ isRelevantContextChange(changedPath) {
1570
+ const node = this.node();
1571
+ // 1. Direct path match - widget's own field
1572
+ if (node.path === changedPath) {
1573
+ return true;
1574
+ }
1575
+ // 2. Parent path match - widget is inside the changed container
1576
+ if (node.path && changedPath.startsWith(node.path + '.')) {
1577
+ return true;
1578
+ }
1579
+ // 3. Child path match - changed field is inside this widget's container
1580
+ if (node.path && node.path.startsWith(changedPath + '.')) {
1581
+ return true;
1582
+ }
1583
+ // 4. Expression dependency check - if widget has expressions that depend on this path
1584
+ if (this.hasExpressionDependency(changedPath)) {
1585
+ return true;
1586
+ }
1587
+ // 5. Formula dependency check - if widget's formula depends on this path
1588
+ if (node.formula && this.checkFormulaForUpdate(node.formula, changedPath)) {
1589
+ return true;
1590
+ }
1591
+ // 6. Trigger dependency check - if widget has triggers that depend on this path
1592
+ if (this.hasTriggerDependency(changedPath)) {
1593
+ return true;
1594
+ }
1595
+ return false;
1596
+ }
1597
+ hasExpressionDependency(changedPath) {
1598
+ // Check if any cached expressions depend on the changed path
1599
+ for (const [path, evaluator] of this.expressionEvaluators) {
1600
+ // Check if the expression path itself contains the changed path
1601
+ if (path.includes(changedPath)) {
1602
+ return true;
1603
+ }
1604
+ // Parse the actual expression content to check for context.eval() calls
1605
+ // We need to get the original expression string to analyze it
1606
+ const node = this.node();
1607
+ const expressionValue = this.getExpressionValueFromNode(node, path);
1608
+ if (expressionValue && typeof expressionValue === 'string') {
1609
+ // Look for context.eval() calls that reference the changed path
1610
+ const contextEvalRegex = /context\.eval\(['"]([^'\"]+)['"]\)/g;
1611
+ let match;
1612
+ while ((match = contextEvalRegex.exec(expressionValue)) !== null) {
1613
+ const evalPath = match[1];
1614
+ // Normalize Id-suffixed segments to dot-id form (e.g., 'typeId' -> 'type.id', 'party.typeId' -> 'party.type.id')
1615
+ const normalizePath = (p) => {
1616
+ if (!p)
1617
+ return p;
1618
+ const parts = p.split('.');
1619
+ const last = parts[parts.length - 1];
1620
+ if (last && last.endsWith('Id')) {
1621
+ parts.splice(parts.length - 1, 1, last.slice(0, -2), 'id');
1622
+ }
1623
+ return parts.join('.');
1624
+ };
1625
+ const isSegmentSuffix = (a, b) => {
1626
+ if (!a || !b)
1627
+ return false;
1628
+ const pa = a.split('.');
1629
+ const pb = b.split('.');
1630
+ if (pb.length > pa.length)
1631
+ return false;
1632
+ for (let i = 1; i <= pb.length; i++) {
1633
+ if (pa[pa.length - i] !== pb[pb.length - i])
1634
+ return false;
1635
+ }
1636
+ return true;
1637
+ };
1638
+ const evalNorm = normalizePath(evalPath);
1639
+ const changedNorm = normalizePath(changedPath);
1640
+ // Debug log for dependency check
1641
+ // console.log(
1642
+ // `🧭 [${this.node().type}] dep-check expr='${path}', changed='${changedPath}', eval='${evalPath}', evalNorm='${evalNorm}', changedNorm='${changedNorm}'`,
1643
+ // );
1644
+ // Generic direct and hierarchical dependency checks (raw and normalized)
1645
+ const rawMatch = evalPath === changedPath ||
1646
+ evalPath.startsWith(changedPath + '.') ||
1647
+ changedPath.startsWith(evalPath + '.') ||
1648
+ isSegmentSuffix(evalPath, changedPath) ||
1649
+ isSegmentSuffix(changedPath, evalPath);
1650
+ const normMatch = evalNorm === changedNorm ||
1651
+ evalNorm.startsWith(changedNorm + '.') ||
1652
+ changedNorm.startsWith(evalNorm + '.') ||
1653
+ isSegmentSuffix(evalNorm, changedNorm) ||
1654
+ isSegmentSuffix(changedNorm, evalNorm);
1655
+ if (rawMatch || normMatch) {
1656
+ // console.log(
1657
+ // `🔍 [${this.node().type}] Expression '${path}' depends on '${changedPath}' via context.eval('${evalPath}') (generic match)`,
1658
+ // );
1659
+ return true;
1660
+ }
1661
+ // Check for path aliases/mappings (e.g., typeId.id <-> type.id)
1662
+ if (this.isPathAlias(evalPath, changedPath)) {
1663
+ // console.log(
1664
+ // `🔍 [${this.node().type}] Expression '${path}' depends on '${changedPath}' via context.eval('${evalPath}') (path alias)`,
1665
+ // );
1666
+ return true;
1667
+ }
1668
+ }
1669
+ }
1670
+ }
1671
+ return false;
1672
+ }
1673
+ isPathAlias(evalPath, changedPath) {
1674
+ // Dynamic path alias detection based on 'Id' suffix pattern
1675
+ // Examples: typeId.id <-> type.id, categoryId.name <-> category.name
1676
+ // Check if evalPath ends with 'Id' and has a property
1677
+ if (evalPath.endsWith('Id') && evalPath.includes('.')) {
1678
+ const basePath = evalPath.substring(0, evalPath.lastIndexOf('Id'));
1679
+ const property = evalPath.substring(evalPath.lastIndexOf('.') + 1);
1680
+ const mappedPath = `${basePath}.${property}`;
1681
+ if (changedPath === mappedPath) {
1682
+ // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);
1683
+ return true;
1684
+ }
1685
+ }
1686
+ // Check if changedPath ends with 'Id' and has a property
1687
+ if (changedPath.endsWith('Id') && changedPath.includes('.')) {
1688
+ const basePath = changedPath.substring(0, changedPath.lastIndexOf('Id'));
1689
+ const property = changedPath.substring(changedPath.lastIndexOf('.') + 1);
1690
+ const mappedPath = `${basePath}.${property}`;
1691
+ if (evalPath === mappedPath) {
1692
+ // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);
1693
+ return true;
1694
+ }
1695
+ }
1696
+ // Check for direct 'Id' suffix mapping (e.g., typeId <-> type.id)
1697
+ if (evalPath.endsWith('Id') && !evalPath.includes('.')) {
1698
+ const basePath = evalPath.substring(0, evalPath.lastIndexOf('Id'));
1699
+ const mappedPath = `${basePath}.id`;
1700
+ if (changedPath === mappedPath) {
1701
+ // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);
1702
+ return true;
1703
+ }
1704
+ }
1705
+ if (changedPath.endsWith('Id') && !changedPath.includes('.')) {
1706
+ const basePath = changedPath.substring(0, changedPath.lastIndexOf('Id'));
1707
+ const mappedPath = `${basePath}.id`;
1708
+ if (evalPath === mappedPath) {
1709
+ // console.log(`🔍 [${this.node().type}] Path alias detected: '${evalPath}' <-> '${changedPath}'`);
1710
+ return true;
1711
+ }
1712
+ }
1713
+ return false;
1714
+ }
1715
+ getExpressionValueFromNode(node, path) {
1716
+ try {
1717
+ // Navigate through the node structure to find the expression value
1718
+ const pathParts = path.split('.');
1719
+ let current = node.options || {};
1720
+ // Navigate through the path parts
1721
+ for (const part of pathParts) {
1722
+ if (current && typeof current === 'object' && part in current) {
1723
+ current = current[part];
1724
+ }
1725
+ else {
1726
+ return null;
1727
+ }
1728
+ }
1729
+ return typeof current === 'string' ? current : null;
1730
+ }
1731
+ catch (error) {
1732
+ // console.error('Error extracting expression value from node:', error);
1733
+ return null;
1734
+ }
1735
+ }
1736
+ hasTriggerDependency(changedPath) {
1737
+ const node = this.node();
1738
+ const triggers = node.triggers || node.options?.['triggers'] || this.mergedOptions()?.triggers;
1739
+ if (!triggers)
1740
+ return false;
1741
+ // Check if any trigger event depends on the changed path
1742
+ for (const trigger of triggers) {
1743
+ if (trigger.event && trigger.event.includes(changedPath)) {
1744
+ return true;
1745
+ }
1746
+ }
1747
+ return false;
1405
1748
  }
1749
+ //#endregion
1750
+ // Removed visibility detection methods - not needed for current implementation
1406
1751
  // Detect input changes
1407
1752
  ngOnChanges(changes) {
1408
1753
  if (changes['mode'] || changes['node']) {
@@ -1428,6 +1773,9 @@ class AXPWidgetRendererDirective {
1428
1773
  if (this.renderTimeoutId) {
1429
1774
  clearTimeout(this.renderTimeoutId);
1430
1775
  }
1776
+ if (this.contextUpdateTimeout) {
1777
+ clearTimeout(this.contextUpdateTimeout);
1778
+ }
1431
1779
  if (this.componentRef) {
1432
1780
  this.componentRef.destroy();
1433
1781
  }
@@ -1461,7 +1809,7 @@ class AXPWidgetRendererDirective {
1461
1809
  props[property.name] = evaluatedValue;
1462
1810
  }
1463
1811
  catch (error) {
1464
- console.error(`Error evaluating default value expression for property ${property.name}:`, error);
1812
+ // console.error(`Error evaluating default value expression for property ${property.name}:`, error);
1465
1813
  props[property.name] = cloneDeep(defaultValue); // Fallback to original value
1466
1814
  }
1467
1815
  }
@@ -1472,6 +1820,9 @@ class AXPWidgetRendererDirective {
1472
1820
  }
1473
1821
  //
1474
1822
  this.mergedOptions.set(merge(props, widget?.options, this.node().options) || {});
1823
+ this.expressionEvaluators.clear();
1824
+ // Register expressions from widget defaults and node options to cover related-entity cases
1825
+ this.preprocessAndInitialOptions(cloneDeep(widget?.options));
1475
1826
  this.preprocessAndInitialOptions(cloneDeep(this.node().options));
1476
1827
  await this.updateOptionsBasedOnContext();
1477
1828
  //
@@ -1502,7 +1853,7 @@ class AXPWidgetRendererDirective {
1502
1853
  //
1503
1854
  const com = await widget?.components[this.mode()]?.component();
1504
1855
  if (!com) {
1505
- console.error(`${this.node().type} widget component not found with mode: ${this.mode()}`);
1856
+ // console.error(`${this.node().type} widget component not found with mode: ${this.mode()}`);
1506
1857
  return;
1507
1858
  }
1508
1859
  this.componentRef = this.viewContainerRef.createComponent(com, { injector: token });
@@ -1524,9 +1875,24 @@ class AXPWidgetRendererDirective {
1524
1875
  loadingRef.destroy();
1525
1876
  // Mark that initial render is complete
1526
1877
  this.hasInitialRender = true;
1878
+ // Re-evaluate expressions after initial render to catch late-arriving related context
1879
+ if (this.expressionEvaluators.size > 0) {
1880
+ // console.log(`🔄 [${this.node().type}] Re-evaluating expressions after initial render`);
1881
+ await this.updateOptionsBasedOnContext();
1882
+ this.applyOptions();
1883
+ }
1884
+ // Process any buffered pre-render context changes now that the component is ready
1885
+ if (this.preRenderContextQueue.size > 0) {
1886
+ // console.log(
1887
+ // `🚀 [${this.node().type}] Processing ${this.preRenderContextQueue.size} buffered pre-render changes`,
1888
+ // );
1889
+ this.preRenderContextQueue.forEach((p) => this.contextUpdateQueue.add(p));
1890
+ this.preRenderContextQueue.clear();
1891
+ await this.processBatchedUpdates();
1892
+ }
1527
1893
  }
1528
1894
  catch (error) {
1529
- console.error('Error loading component:', error);
1895
+ // console.error('Error loading component:', error);
1530
1896
  }
1531
1897
  finally {
1532
1898
  this.isLoading.set(false);
@@ -1535,9 +1901,26 @@ class AXPWidgetRendererDirective {
1535
1901
  applyOptions() {
1536
1902
  if (!this.instance)
1537
1903
  return;
1538
- this._options.update((val) => ({ ...val, ...this.mergedOptions() }));
1539
- this.instance.setOptions(this.mergedOptions());
1904
+ const currentOptions = this.mergedOptions();
1905
+ // Check if options have actually changed
1906
+ if (this.hasOptionsChanged(currentOptions)) {
1907
+ // console.log('applyOptions', this.node().path, '- options changed');
1908
+ this._options.update((val) => ({ ...val, ...currentOptions }));
1909
+ this.instance.setOptions(currentOptions);
1910
+ this.lastAppliedOptions = cloneDeep(currentOptions); // Deep clone using Lodash
1911
+ }
1912
+ else {
1913
+ // console.log('applyOptions', this.node().path, '- no changes, skipping');
1914
+ }
1540
1915
  }
1916
+ hasOptionsChanged(newOptions) {
1917
+ if (!this.lastAppliedOptions) {
1918
+ return true; // First time, always apply
1919
+ }
1920
+ // Deep comparison of options using Lodash isEqual
1921
+ return !isEqual(newOptions, this.lastAppliedOptions);
1922
+ }
1923
+ // Removed deepCloneValue method - now using Lodash cloneDeep
1541
1924
  checkFormulaForUpdate(formula, path) {
1542
1925
  if (formula) {
1543
1926
  const regex = /context\.eval\('([^']+)'\)/g;
@@ -1596,24 +1979,64 @@ class AXPWidgetRendererDirective {
1596
1979
  });
1597
1980
  }
1598
1981
  async updateOptionsBasedOnContext() {
1982
+ // Early return if no expressions to evaluate
1983
+ if (this.expressionEvaluators.size === 0) {
1984
+ return 0;
1985
+ }
1986
+ // console.log(`🔍 [${this.node().type}] Evaluating ${this.expressionEvaluators.size} expressions`);
1599
1987
  const updatePromises = Array.from(this.expressionEvaluators).map(async ([path, evaluator]) => {
1988
+ // Check cache first
1989
+ const cachedValue = this.getCachedExpressionResult(path);
1990
+ if (cachedValue !== null) {
1991
+ // console.log(`💾 [${this.node().type}] Using cached expression result for '${path}'`);
1992
+ return { path, newValue: cachedValue, fromCache: true };
1993
+ }
1994
+ // Evaluate expression if not cached
1995
+ const evalStartTime = performance.now();
1600
1996
  const newValue = await evaluator();
1601
- return { path, newValue };
1997
+ const evalTime = performance.now() - evalStartTime;
1998
+ // Check if result has actually changed using Lodash isEqual
1999
+ const lastValue = this.lastExpressionResults.get(path);
2000
+ const hasChanged = !isEqual(newValue, lastValue);
2001
+ if (hasChanged) {
2002
+ // console.log(
2003
+ // `📝 [${this.node().type}] Expression '${path}' evaluated in ${evalTime.toFixed(2)}ms - value changed`,
2004
+ // );
2005
+ // Cache the result and track it
2006
+ this.setCachedExpressionResult(path, newValue);
2007
+ this.lastExpressionResults.set(path, cloneDeep(newValue));
2008
+ return { path, newValue, fromCache: false, hasChanged: true };
2009
+ }
2010
+ else {
2011
+ // console.log(
2012
+ // `📝 [${this.node().type}] Expression '${path}' evaluated in ${evalTime.toFixed(2)}ms - value unchanged, skipping update`,
2013
+ // );
2014
+ // Cache the result but don't update
2015
+ this.setCachedExpressionResult(path, newValue);
2016
+ this.lastExpressionResults.set(path, cloneDeep(newValue));
2017
+ return { path, newValue, fromCache: false, hasChanged: false };
2018
+ }
1602
2019
  });
1603
2020
  // Wait for all evaluators to complete
1604
2021
  const updates = await Promise.all(updatePromises);
1605
- // Apply updates to mergedOptions
1606
- if (updates.length > 0) {
2022
+ // Filter updates to only include those that have actually changed
2023
+ const changedUpdates = updates.filter((update) => update.hasChanged !== false);
2024
+ // Apply updates to mergedOptions only for changed values
2025
+ if (changedUpdates.length > 0) {
1607
2026
  this.mergedOptions.update((o) => {
1608
2027
  const updatedOptions = { ...o };
1609
- updates.forEach(({ path, newValue }) => {
1610
- // Set the new value in the updatedOptions object by path
1611
- set(updatedOptions, path, newValue); // Assuming 'set' can handle paths like 'property.subproperty'
2028
+ changedUpdates.forEach(({ path, newValue }) => {
2029
+ set(updatedOptions, path, newValue);
1612
2030
  });
1613
2031
  return updatedOptions;
1614
2032
  });
1615
2033
  }
1616
- return updates.length;
2034
+ const cacheHits = updates.filter((update) => update.fromCache).length;
2035
+ const skippedUpdates = updates.length - changedUpdates.length;
2036
+ // console.log(
2037
+ // `📋 [${this.node().type}] Applied ${changedUpdates.length} expression updates (${cacheHits} cache hits, ${skippedUpdates} skipped)`,
2038
+ // );
2039
+ return changedUpdates.length;
1617
2040
  }
1618
2041
  async updateValueBasedOnFormula() {
1619
2042
  if (this.node().formula) {
@@ -1627,7 +2050,7 @@ class AXPWidgetRendererDirective {
1627
2050
  return await this.expressionEvaluator.evaluate(templateExpression, scope);
1628
2051
  }
1629
2052
  catch (error) {
1630
- console.error('Error evaluating expression:', error);
2053
+ // console.error('Error evaluating expression:', error);
1631
2054
  return false;
1632
2055
  }
1633
2056
  }
@@ -1763,7 +2186,7 @@ class AXPWidgetRendererDirective {
1763
2186
  }
1764
2187
  }
1765
2188
  catch (error) {
1766
- console.error('Error assigning trigger:', error);
2189
+ // console.error('Error assigning trigger:', error);
1767
2190
  }
1768
2191
  }
1769
2192
  }
@@ -1780,7 +2203,7 @@ class AXPWidgetRendererDirective {
1780
2203
  }
1781
2204
  }
1782
2205
  catch (error) {
1783
- console.error('Error evaluating trigger expression:', error);
2206
+ // console.error('Error evaluating trigger expression:', error);
1784
2207
  return null;
1785
2208
  }
1786
2209
  }
@@ -1790,17 +2213,17 @@ class AXPWidgetRendererDirective {
1790
2213
  await this.expressionEvaluator.evaluate(templateExpression, scope);
1791
2214
  }
1792
2215
  catch (error) {
1793
- console.error('Error evaluating action expression:', templateExpression, error);
2216
+ // console.error('Error evaluating action expression:', templateExpression, error);
1794
2217
  }
1795
2218
  }
1796
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1797
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.6", 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" }, providers: [
2219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2220
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.8", type: AXPWidgetRendererDirective, isStandalone: false, selector: "[axp-widget-renderer]", inputs: { parentNode: { classPropertyName: "parentNode", publicName: "parentNode", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onOptionsChanged: "onOptionsChanged", onValueChanged: "onValueChanged" }, providers: [
1798
2221
  {
1799
2222
  provide: AXUnsubscriber,
1800
2223
  },
1801
2224
  ], exportAs: ["widgetRenderer"], usesOnChanges: true, ngImport: i0 }); }
1802
2225
  }
1803
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPWidgetRendererDirective, decorators: [{
2226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPWidgetRendererDirective, decorators: [{
1804
2227
  type: Directive,
1805
2228
  args: [{
1806
2229
  selector: '[axp-widget-renderer]',
@@ -1856,11 +2279,11 @@ class AXPLayoutBuilderModule {
1856
2279
  f();
1857
2280
  });
1858
2281
  }
1859
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPLayoutBuilderModule, deps: [{ token: 'AXPLayoutBuilderModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
1860
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.6", ngImport: i0, type: AXPLayoutBuilderModule, declarations: [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective], imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule, AXTranslationModule], exports: [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective] }); }
1861
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPLayoutBuilderModule, imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule, AXTranslationModule] }); }
2282
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLayoutBuilderModule, deps: [{ token: 'AXPLayoutBuilderModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
2283
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.8", ngImport: i0, type: AXPLayoutBuilderModule, declarations: [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective], imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule, AXTranslationModule], exports: [AXPWidgetContainerComponent, AXPWidgetColumnRendererComponent, AXPWidgetRendererDirective] }); }
2284
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLayoutBuilderModule, imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule, AXTranslationModule] }); }
1862
2285
  }
1863
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AXPLayoutBuilderModule, decorators: [{
2286
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPLayoutBuilderModule, decorators: [{
1864
2287
  type: NgModule,
1865
2288
  args: [{
1866
2289
  imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule, AXTranslationModule],
@@ -2091,5 +2514,5 @@ var AXPWidgetGroupEnum;
2091
2514
  * Generated bundle index. Do not edit.
2092
2515
  */
2093
2516
 
2094
- export { AXPBaseWidgetComponent, AXPBlockBaseLayoutWidgetComponent, AXPBoxModelLayoutWidgetComponent, AXPColumnWidgetComponent, AXPDataListWidgetComponent, AXPFlexBaseLayoutWidgetComponent, AXPFlexItemBaseLayoutWidgetComponent, AXPGridBaseLayoutWidgetComponent, AXPGridItemBaseLayoutWidgetComponent, AXPInlineBaseLayoutWidgetComponent, AXPLayoutBaseWidgetComponent, AXPLayoutBuilderContextStore, AXPLayoutBuilderModule, AXPLayoutBuilderService, AXPLayoutContextChangeEvent, AXPLayoutElement, AXPPageStatus, AXPPropertyEditorHelper, AXPValueWidgetComponent, AXPWidgetColumnRendererComponent, AXPWidgetContainerComponent, AXPWidgetGroupEnum, AXPWidgetRegistryService, AXPWidgetRendererDirective, 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 };
2517
+ export { AXPBaseWidgetComponent, AXPBlockBaseLayoutWidgetComponent, AXPBoxModelLayoutWidgetComponent, AXPColumnWidgetComponent, AXPDataListWidgetComponent, AXPFlexBaseLayoutWidgetComponent, AXPFlexItemBaseLayoutWidgetComponent, AXPGridBaseLayoutWidgetComponent, AXPGridItemBaseLayoutWidgetComponent, AXPInlineBaseLayoutWidgetComponent, AXPLayoutBaseWidgetComponent, AXPLayoutBuilderContextStore, AXPLayoutBuilderModule, AXPLayoutBuilderService, AXPLayoutContextChangeEvent, AXPLayoutElement, AXPPageStatus, AXPPropertyEditorHelper, AXPTableBaseLayoutWidgetComponent, AXPTableItemBaseLayoutWidgetComponent, AXPTableItemOpsBaseLayoutWidgetComponent, AXPValueWidgetComponent, AXPWidgetColumnRendererComponent, AXPWidgetContainerComponent, AXPWidgetGroupEnum, AXPWidgetRegistryService, AXPWidgetRendererDirective, 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 };
2095
2518
  //# sourceMappingURL=acorex-platform-layout-builder.mjs.map