@acorex/platform 20.3.0-next.20 → 20.3.0-next.21

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 (86) hide show
  1. package/core/index.d.ts +14 -1
  2. package/fesm2022/acorex-platform-auth.mjs +19 -19
  3. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-common.mjs +126 -105
  5. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-core.mjs +55 -42
  7. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-domain.mjs +16 -16
  9. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-layout-builder.mjs +182 -159
  11. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-components.mjs +542 -2387
  13. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-layout-designer.mjs +72 -72
  15. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  16. package/fesm2022/{acorex-platform-layout-entity-create-entity.command-BXExgI3W.mjs → acorex-platform-layout-entity-create-entity.command-DyXF9zAh.mjs} +4 -4
  17. package/fesm2022/{acorex-platform-layout-entity-create-entity.command-BXExgI3W.mjs.map → acorex-platform-layout-entity-create-entity.command-DyXF9zAh.mjs.map} +1 -1
  18. package/fesm2022/acorex-platform-layout-entity.mjs +156 -156
  19. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-layout-views.mjs +15 -15
  21. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  22. package/fesm2022/acorex-platform-layout-widget-core.mjs +73 -73
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  24. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-BzsfTNs2.mjs → acorex-platform-layout-widgets-button-widget-designer.component-C_3IWNkj.mjs} +4 -4
  25. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-BzsfTNs2.mjs.map → acorex-platform-layout-widgets-button-widget-designer.component-C_3IWNkj.mjs.map} +1 -1
  26. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-Dvk76-2W.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-CJltEgut.mjs} +4 -4
  27. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-Dvk76-2W.mjs.map → acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-CJltEgut.mjs.map} +1 -1
  28. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-BYLaipWi.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-pM-TIuk0.mjs} +4 -4
  29. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-BYLaipWi.mjs.map → acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-pM-TIuk0.mjs.map} +1 -1
  30. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-DcSllNik.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-BqI96-fU.mjs} +4 -4
  31. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-DcSllNik.mjs.map → acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-BqI96-fU.mjs.map} +1 -1
  32. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-view.component-BT-U4BiA.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-view.component-C-AhenaM.mjs} +4 -4
  33. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-view.component-BT-U4BiA.mjs.map → acorex-platform-layout-widgets-extra-properties-values-widget-view.component-C-AhenaM.mjs.map} +1 -1
  34. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-edit.component-Il7jnRBg.mjs → acorex-platform-layout-widgets-extra-properties-widget-edit.component-DCAya5ne.mjs} +4 -4
  35. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-edit.component-Il7jnRBg.mjs.map → acorex-platform-layout-widgets-extra-properties-widget-edit.component-DCAya5ne.mjs.map} +1 -1
  36. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-view.component-CBEPu7Fl.mjs → acorex-platform-layout-widgets-extra-properties-widget-view.component-D-PnBqLb.mjs} +4 -4
  37. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-view.component-CBEPu7Fl.mjs.map → acorex-platform-layout-widgets-extra-properties-widget-view.component-D-PnBqLb.mjs.map} +1 -1
  38. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-BPzn8lr3.mjs → acorex-platform-layout-widgets-file-list-popup.component-DuuFHWvB.mjs} +4 -4
  39. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-BPzn8lr3.mjs.map → acorex-platform-layout-widgets-file-list-popup.component-DuuFHWvB.mjs.map} +1 -1
  40. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-C_JrGoXy.mjs → acorex-platform-layout-widgets-page-widget-designer.component-Bss0xUcu.mjs} +4 -4
  41. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-C_JrGoXy.mjs.map → acorex-platform-layout-widgets-page-widget-designer.component-Bss0xUcu.mjs.map} +1 -1
  42. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-C6DaBt_N.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-Cy9mHnNP.mjs} +4 -4
  43. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-C6DaBt_N.mjs.map → acorex-platform-layout-widgets-tabular-data-edit-popup.component-Cy9mHnNP.mjs.map} +1 -1
  44. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-Bth3jI9T.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-DznLtuer.mjs} +4 -4
  45. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-Bth3jI9T.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-DznLtuer.mjs.map} +1 -1
  46. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-CUHptbP4.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-ndOUSFi9.mjs} +4 -4
  47. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-CUHptbP4.mjs.map → acorex-platform-layout-widgets-text-block-widget-designer.component-ndOUSFi9.mjs.map} +1 -1
  48. package/fesm2022/acorex-platform-layout-widgets.mjs +742 -892
  49. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  50. package/fesm2022/acorex-platform-native.mjs +7 -7
  51. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  52. package/fesm2022/acorex-platform-runtime.mjs +40 -40
  53. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  54. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-eGzN6g2Y.mjs → acorex-platform-themes-default-entity-master-create-view.component-Fnj54AxV.mjs} +4 -4
  55. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-eGzN6g2Y.mjs.map → acorex-platform-themes-default-entity-master-create-view.component-Fnj54AxV.mjs.map} +1 -1
  56. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-nDHfQQ3O.mjs → acorex-platform-themes-default-entity-master-list-view.component-C60W6UnN.mjs} +60 -13
  57. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-C60W6UnN.mjs.map +1 -0
  58. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-HJyalvcu.mjs → acorex-platform-themes-default-entity-master-modify-view.component-B3NyKGIG.mjs} +4 -4
  59. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-HJyalvcu.mjs.map → acorex-platform-themes-default-entity-master-modify-view.component-B3NyKGIG.mjs.map} +1 -1
  60. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-e7m70Wls.mjs → acorex-platform-themes-default-entity-master-single-view.component-B8gx5cG7.mjs} +7 -7
  61. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-e7m70Wls.mjs.map → acorex-platform-themes-default-entity-master-single-view.component-B8gx5cG7.mjs.map} +1 -1
  62. package/fesm2022/{acorex-platform-themes-default-error-401.component-CoBaQFTn.mjs → acorex-platform-themes-default-error-401.component-CcvGfdhu.mjs} +4 -4
  63. package/fesm2022/{acorex-platform-themes-default-error-401.component-CoBaQFTn.mjs.map → acorex-platform-themes-default-error-401.component-CcvGfdhu.mjs.map} +1 -1
  64. package/fesm2022/{acorex-platform-themes-default-error-404.component-BLlVOsS2.mjs → acorex-platform-themes-default-error-404.component-4-CaEsnV.mjs} +4 -4
  65. package/fesm2022/{acorex-platform-themes-default-error-404.component-BLlVOsS2.mjs.map → acorex-platform-themes-default-error-404.component-4-CaEsnV.mjs.map} +1 -1
  66. package/fesm2022/{acorex-platform-themes-default-error-offline.component-CybYQI9F.mjs → acorex-platform-themes-default-error-offline.component-BNecbFEj.mjs} +4 -4
  67. package/fesm2022/{acorex-platform-themes-default-error-offline.component-CybYQI9F.mjs.map → acorex-platform-themes-default-error-offline.component-BNecbFEj.mjs.map} +1 -1
  68. package/fesm2022/acorex-platform-themes-default.mjs +39 -39
  69. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  70. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-ReKSoVeN.mjs → acorex-platform-themes-shared-icon-chooser-view.component-Dc_Txe32.mjs} +4 -4
  71. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-ReKSoVeN.mjs.map → acorex-platform-themes-shared-icon-chooser-view.component-Dc_Txe32.mjs.map} +1 -1
  72. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-B2HDyY2z.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-hgWLhhle.mjs} +4 -4
  73. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-B2HDyY2z.mjs.map → acorex-platform-themes-shared-theme-color-chooser-column.component-hgWLhhle.mjs.map} +1 -1
  74. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-CeZxa49U.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-CY3JZK_W.mjs} +4 -4
  75. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-CeZxa49U.mjs.map → acorex-platform-themes-shared-theme-color-chooser-view.component-CY3JZK_W.mjs.map} +1 -1
  76. package/fesm2022/acorex-platform-themes-shared.mjs +41 -41
  77. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  78. package/fesm2022/acorex-platform-workflow.mjs +25 -25
  79. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  80. package/layout/builder/README.md +1577 -2
  81. package/layout/builder/index.d.ts +182 -125
  82. package/layout/components/index.d.ts +8 -805
  83. package/layout/entity/index.d.ts +2 -2
  84. package/layout/widgets/index.d.ts +11 -36
  85. package/package.json +9 -9
  86. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-nDHfQQ3O.mjs.map +0 -1
@@ -3,12 +3,12 @@ import { CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, Injectable, input, model, signal, effect, output, viewChild, ChangeDetectionStrategy, Component, NgModule, EventEmitter, Output, Input } from '@angular/core';
5
5
  import { AXPopupService } from '@acorex/components/popup';
6
- import * as i1 from '@acorex/platform/layout/widget-core';
7
- import { AXPWidgetContainerComponent, AXPPageStatus, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';
8
6
  import * as i2 from '@acorex/components/form';
9
7
  import { AXFormComponent, AXFormModule } from '@acorex/components/form';
10
- import { isEqual, get, cloneDeep } from 'lodash-es';
11
8
  import { AXPExpressionEvaluatorService } from '@acorex/platform/core';
9
+ import * as i1 from '@acorex/platform/layout/widget-core';
10
+ import { AXPWidgetContainerComponent, AXPPageStatus, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';
11
+ import { isEqual, get, cloneDeep } from 'lodash-es';
12
12
  import { Subject, debounceTime, distinctUntilChanged, startWith } from 'rxjs';
13
13
  import * as i2$1 from '@acorex/components/button';
14
14
  import { AXButtonModule } from '@acorex/components/button';
@@ -86,10 +86,10 @@ class AXPLayoutBuilderService {
86
86
  create() {
87
87
  return new LayoutBuilder(this.popupService);
88
88
  }
89
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXPLayoutBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
90
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXPLayoutBuilderService, providedIn: 'root' }); }
89
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPLayoutBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
90
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPLayoutBuilderService, providedIn: 'root' }); }
91
91
  }
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXPLayoutBuilderService, decorators: [{
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPLayoutBuilderService, decorators: [{
93
93
  type: Injectable,
94
94
  args: [{
95
95
  providedIn: 'root',
@@ -351,7 +351,28 @@ class BaseContainerMixin extends BaseContainerBuilder {
351
351
  */
352
352
  class LayoutContainerMixin extends BaseContainerMixin {
353
353
  layout(value) {
354
- // Layout handling can be added here if needed
354
+ // Map layout intent to grid item sizing so containers like `form-field`
355
+ // can span multiple columns inside grid/fieldset layouts.
356
+ if (!this.containerState.options)
357
+ this.containerState.options = {};
358
+ if (typeof value === 'number') {
359
+ // Direct numeric shorthand → colSpan
360
+ this.containerState.options.colSpan = value;
361
+ }
362
+ else if (value) {
363
+ // Try to extract a reasonable colSpan from breakpoint positions
364
+ const positions = value.positions;
365
+ if (positions) {
366
+ const colSpan = positions?.lg?.colSpan ??
367
+ positions?.xl?.colSpan ??
368
+ positions?.xxl?.colSpan ??
369
+ positions?.md?.colSpan ??
370
+ positions?.sm?.colSpan;
371
+ if (colSpan != null) {
372
+ this.containerState.options.colSpan = colSpan;
373
+ }
374
+ }
375
+ }
355
376
  return this;
356
377
  }
357
378
  }
@@ -1264,11 +1285,11 @@ class AXPLayoutConversionService {
1264
1285
  grid: {
1265
1286
  default: {
1266
1287
  columns: 1,
1267
- gap: '1rem'
1268
- }
1269
- }
1288
+ gap: '1rem',
1289
+ },
1290
+ },
1270
1291
  },
1271
- children: formDefinition.groups.map(group => this.createGroupAsFieldsetWidget(group))
1292
+ children: formDefinition.groups.map((group) => this.createGroupAsFieldsetWidget(group)),
1272
1293
  };
1273
1294
  // Cache the result
1274
1295
  this.widgetTreeCache.set(cacheKey, widgetTree);
@@ -1289,7 +1310,7 @@ class AXPLayoutConversionService {
1289
1310
  // Parse widget tree
1290
1311
  const groups = [];
1291
1312
  if (widgetTree.children) {
1292
- widgetTree.children.forEach(child => {
1313
+ widgetTree.children.forEach((child) => {
1293
1314
  if (child.type === 'fieldset-layout') {
1294
1315
  const group = this.extractGroupFromFieldset(child);
1295
1316
  groups.push(group);
@@ -1312,11 +1333,9 @@ class AXPLayoutConversionService {
1312
1333
  return true; // Empty form is valid
1313
1334
  }
1314
1335
  // Check that all children are fieldset-layout widgets
1315
- return widgetTree.children.every(child => child.type === 'fieldset-layout' &&
1336
+ return widgetTree.children.every((child) => child.type === 'fieldset-layout' &&
1316
1337
  child.children &&
1317
- child.children.every(formField => formField.type === 'form-field' &&
1318
- formField.children &&
1319
- formField.children.length > 0));
1338
+ child.children.every((formField) => formField.type === 'form-field' && formField.children && formField.children.length > 0));
1320
1339
  }
1321
1340
  /**
1322
1341
  * Clear all caches
@@ -1331,7 +1350,7 @@ class AXPLayoutConversionService {
1331
1350
  getCacheStats() {
1332
1351
  return {
1333
1352
  widgetTreeCacheSize: this.widgetTreeCache.size,
1334
- formDefinitionCacheSize: this.formDefinitionCache.size
1353
+ formDefinitionCacheSize: this.formDefinitionCache.size,
1335
1354
  };
1336
1355
  }
1337
1356
  //#endregion
@@ -1348,16 +1367,16 @@ class AXPLayoutConversionService {
1348
1367
  options: {
1349
1368
  title: group.title,
1350
1369
  description: group.description,
1351
- cols: columnsCount
1370
+ cols: columnsCount,
1352
1371
  },
1353
- children: this.createFieldWidgets(group.parameters, columnsCount)
1372
+ children: this.createFieldWidgets(group.parameters, columnsCount),
1354
1373
  };
1355
1374
  }
1356
1375
  /**
1357
1376
  * Convert fields to Form Field widgets
1358
1377
  */
1359
1378
  createFieldWidgets(fields, columnsCount) {
1360
- return fields.map(field => this.createFormFieldWidget(field));
1379
+ return fields.map((field) => this.createFormFieldWidget(field));
1361
1380
  }
1362
1381
  /**
1363
1382
  * Convert a single field to Form Field widget with editor as child
@@ -1369,9 +1388,9 @@ class AXPLayoutConversionService {
1369
1388
  options: {
1370
1389
  label: field.title,
1371
1390
  description: field.description,
1372
- showLabel: true
1391
+ showLabel: true,
1373
1392
  },
1374
- children: [field.widget] // The editor widget becomes a child of form-field
1393
+ children: [field.widget], // The editor widget becomes a child of form-field
1375
1394
  };
1376
1395
  }
1377
1396
  /**
@@ -1382,7 +1401,7 @@ class AXPLayoutConversionService {
1382
1401
  // Extract fields directly from fieldset children
1383
1402
  const fields = [];
1384
1403
  if (fieldsetNode.children) {
1385
- fieldsetNode.children.forEach(formField => {
1404
+ fieldsetNode.children.forEach((formField) => {
1386
1405
  if (formField.type === 'form-field' && formField.children && formField.children.length > 0) {
1387
1406
  const field = this.extractFieldFromFormWidget(formField);
1388
1407
  if (field) {
@@ -1411,7 +1430,7 @@ class AXPLayoutConversionService {
1411
1430
  title: formFieldNode.options?.['label'],
1412
1431
  description: formFieldNode.options?.['description'],
1413
1432
  widget: editorWidget,
1414
- mode: formFieldNode.mode
1433
+ mode: formFieldNode.mode,
1415
1434
  };
1416
1435
  }
1417
1436
  /**
@@ -1480,18 +1499,18 @@ class AXPLayoutConversionService {
1480
1499
  return hash.toString();
1481
1500
  for (let i = 0; i < str.length; i++) {
1482
1501
  const char = str.charCodeAt(i);
1483
- hash = ((hash << 5) - hash) + char;
1502
+ hash = (hash << 5) - hash + char;
1484
1503
  hash = hash & hash; // Convert to 32-bit integer
1485
1504
  }
1486
1505
  return Math.abs(hash).toString(36); // Convert to base36 for shorter string
1487
1506
  }
1488
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXPLayoutConversionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1489
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXPLayoutConversionService, providedIn: 'root' }); }
1507
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPLayoutConversionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1508
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPLayoutConversionService, providedIn: 'root' }); }
1490
1509
  }
1491
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXPLayoutConversionService, decorators: [{
1510
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPLayoutConversionService, decorators: [{
1492
1511
  type: Injectable,
1493
1512
  args: [{
1494
- providedIn: 'root'
1513
+ providedIn: 'root',
1495
1514
  }]
1496
1515
  }] });
1497
1516
 
@@ -1634,7 +1653,7 @@ class AXPLayoutRendererComponent {
1634
1653
  if (this.expressionCache.size > 50) {
1635
1654
  // Clear half the cache when it gets too large
1636
1655
  const keysToDelete = Array.from(this.expressionCache.keys()).slice(0, 25);
1637
- keysToDelete.forEach(key => this.expressionCache.delete(key));
1656
+ keysToDelete.forEach((key) => this.expressionCache.delete(key));
1638
1657
  }
1639
1658
  this.expressionCache.set(cacheKey, result);
1640
1659
  return result;
@@ -1750,14 +1769,14 @@ class AXPLayoutRendererComponent {
1750
1769
  this.contextUpdateSubject
1751
1770
  .pipe(debounceTime(16), // ~60fps
1752
1771
  distinctUntilChanged((prev, curr) => isEqual(prev, curr)), startWith(this.context() ?? {}))
1753
- .subscribe(ctx => {
1772
+ .subscribe((ctx) => {
1754
1773
  this.internalContext.set(ctx);
1755
1774
  });
1756
1775
  // Debounced context changes from widgets
1757
1776
  this.contextChangeSubject
1758
1777
  .pipe(debounceTime(16), // ~60fps
1759
1778
  distinctUntilChanged((prev, curr) => isEqual(prev, curr)))
1760
- .subscribe(ctx => {
1779
+ .subscribe((ctx) => {
1761
1780
  this.internalContext.set(ctx);
1762
1781
  // Update the model signal directly - it will emit change events automatically
1763
1782
  this.context.set(this.internalContext());
@@ -1769,10 +1788,7 @@ class AXPLayoutRendererComponent {
1769
1788
  * Type guard to check if the input is a form definition
1770
1789
  */
1771
1790
  isFormDefinition(data) {
1772
- return data &&
1773
- typeof data === 'object' &&
1774
- 'groups' in data &&
1775
- Array.isArray(data.groups);
1791
+ return data && typeof data === 'object' && 'groups' in data && Array.isArray(data.groups);
1776
1792
  }
1777
1793
  //#endregion
1778
1794
  //#region ---- Utility Methods ----
@@ -1806,7 +1822,7 @@ class AXPLayoutRendererComponent {
1806
1822
  }
1807
1823
  // Generate short hash for context
1808
1824
  const keys = Object.keys(context).sort();
1809
- const contextStr = keys.map(key => `${key}:${context[key]}`).join('|');
1825
+ const contextStr = keys.map((key) => `${key}:${context[key]}`).join('|');
1810
1826
  return this.simpleHash(contextStr);
1811
1827
  }
1812
1828
  /**
@@ -1818,14 +1834,14 @@ class AXPLayoutRendererComponent {
1818
1834
  return hash.toString();
1819
1835
  for (let i = 0; i < str.length; i++) {
1820
1836
  const char = str.charCodeAt(i);
1821
- hash = ((hash << 5) - hash) + char;
1837
+ hash = (hash << 5) - hash + char;
1822
1838
  hash = hash & hash; // Convert to 32-bit integer
1823
1839
  }
1824
1840
  // Convert to positive hex string
1825
1841
  return Math.abs(hash).toString(16);
1826
1842
  }
1827
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXPLayoutRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1828
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXPLayoutRendererComponent, isStandalone: true, selector: "axp-layout-renderer", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: true, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { context: "contextChange", contextInitiated: "contextInitiated", validityChange: "validityChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: AXFormComponent, descendants: true, isSignal: true }, { propertyName: "container", first: true, predicate: AXPWidgetContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
1843
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPLayoutRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1844
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: AXPLayoutRendererComponent, isStandalone: true, selector: "axp-layout-renderer", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: true, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { context: "contextChange", contextInitiated: "contextInitiated", validityChange: "validityChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: AXFormComponent, descendants: true, isSignal: true }, { propertyName: "container", first: true, predicate: AXPWidgetContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
1829
1845
  <ax-form>
1830
1846
  <axp-widgets-container [context]="internalContext()" (onContextChanged)="handleContextChanged($event)">
1831
1847
  @if (widgetTree()) {
@@ -1835,7 +1851,7 @@ class AXPLayoutRendererComponent {
1835
1851
  </ax-form>
1836
1852
  `, isInline: true, styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i2.AXFormComponent, selector: "ax-form", inputs: ["labelMode", "look", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1837
1853
  }
1838
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXPLayoutRendererComponent, decorators: [{
1854
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPLayoutRendererComponent, decorators: [{
1839
1855
  type: Component,
1840
1856
  args: [{ selector: 'axp-layout-renderer', standalone: true, imports: [CommonModule, AXPWidgetCoreModule, AXFormModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
1841
1857
  <ax-form>
@@ -1849,11 +1865,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
1849
1865
  }] });
1850
1866
 
1851
1867
  class LayoutBuilderModule {
1852
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: LayoutBuilderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1853
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.3", ngImport: i0, type: LayoutBuilderModule, imports: [CommonModule, AXPLayoutRendererComponent], exports: [AXPLayoutRendererComponent] }); }
1854
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: LayoutBuilderModule, providers: [AXPLayoutBuilderService], imports: [CommonModule, AXPLayoutRendererComponent] }); }
1868
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: LayoutBuilderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1869
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: LayoutBuilderModule, imports: [CommonModule, AXPLayoutRendererComponent], exports: [AXPLayoutRendererComponent] }); }
1870
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: LayoutBuilderModule, providers: [AXPLayoutBuilderService], imports: [CommonModule, AXPLayoutRendererComponent] }); }
1855
1871
  }
1856
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: LayoutBuilderModule, decorators: [{
1872
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: LayoutBuilderModule, decorators: [{
1857
1873
  type: NgModule,
1858
1874
  args: [{
1859
1875
  imports: [CommonModule, AXPLayoutRendererComponent],
@@ -1887,10 +1903,10 @@ class AXPDialogRendererComponent extends AXBasePageComponent {
1887
1903
  return this.config?.actions?.footer?.prefix || [];
1888
1904
  }
1889
1905
  visibleFooterSuffixActions() {
1890
- return this.config?.actions?.footer?.suffix || [
1906
+ return (this.config?.actions?.footer?.suffix || [
1891
1907
  { title: 'Cancel', color: 'secondary', command: { name: 'cancel' } },
1892
- { title: 'Confirm', color: 'primary', command: { name: 'confirm' } }
1893
- ];
1908
+ { title: 'Confirm', color: 'primary', command: { name: 'confirm' } },
1909
+ ]);
1894
1910
  }
1895
1911
  isFormLoading() {
1896
1912
  return this.isDialogLoading();
@@ -1903,7 +1919,7 @@ class AXPDialogRendererComponent extends AXBasePageComponent {
1903
1919
  // Store the action and context - same pattern as dynamic-dialog
1904
1920
  const result = {
1905
1921
  context: this.context(),
1906
- action: actionName
1922
+ action: actionName,
1907
1923
  };
1908
1924
  // Store result in component property
1909
1925
  this.dialogResult = result;
@@ -1925,7 +1941,7 @@ class AXPDialogRendererComponent extends AXBasePageComponent {
1925
1941
  },
1926
1942
  setLoading: (loading) => {
1927
1943
  this.isDialogLoading.set(loading);
1928
- }
1944
+ },
1929
1945
  });
1930
1946
  }
1931
1947
  close(result) {
@@ -1934,132 +1950,139 @@ class AXPDialogRendererComponent extends AXBasePageComponent {
1934
1950
  }
1935
1951
  super.close(result);
1936
1952
  }
1937
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXPDialogRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1938
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXPDialogRendererComponent, isStandalone: true, selector: "axp-dialog-renderer", inputs: { config: "config" }, outputs: { result: "result" }, usesInheritance: true, ngImport: i0, template: `
1939
- <div class="ax-p-4">
1940
- <axp-layout-renderer
1941
- [layout]="config.definition"
1942
- [context]="context()"
1943
- (contextChange)="handleContextChanged($event)"
1944
- (contextInitiated)="handleContextInitiated($event)"
1945
- >
1946
- </axp-layout-renderer>
1947
- </div>
1948
-
1949
- <ax-footer>
1950
- <ax-prefix>
1951
- <ng-container *ngTemplateOutlet="footerPrefixActions"></ng-container>
1952
- </ax-prefix>
1953
- <ax-suffix>
1954
- <ng-container *ngTemplateOutlet="footerSuffixActions"></ng-container>
1955
- </ax-suffix>
1956
- </ax-footer>
1953
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPDialogRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1954
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: AXPDialogRendererComponent, isStandalone: true, selector: "axp-dialog-renderer", inputs: { config: "config" }, outputs: { result: "result" }, usesInheritance: true, ngImport: i0, template: `
1955
+ <div class="ax-p-4">
1956
+ <axp-layout-renderer
1957
+ [layout]="config.definition"
1958
+ [context]="context()"
1959
+ (contextChange)="handleContextChanged($event)"
1960
+ (contextInitiated)="handleContextInitiated($event)"
1961
+ >
1962
+ </axp-layout-renderer>
1963
+ </div>
1957
1964
 
1958
- <!-- Footer Prefix Actions -->
1959
- <ng-template #footerPrefixActions>
1960
- @for (action of visibleFooterPrefixActions(); track $index) {
1961
- <ax-button
1962
- [disabled]="action.disabled || isFormLoading()"
1963
- [text]="(action.title | translate | async)!"
1964
- [look]="'outline'"
1965
- [color]="action.color"
1966
- (onClick)="executeAction(action)"
1967
- >
1968
- @if (isFormLoading() && action.command?.name != 'cancel') {
1969
- <ax-loading></ax-loading>
1970
- }
1965
+ <ax-footer>
1971
1966
  <ax-prefix>
1972
- <i class="{{ action.icon }}"></i>
1967
+ <ng-container *ngTemplateOutlet="footerPrefixActions"></ng-container>
1973
1968
  </ax-prefix>
1974
- </ax-button>
1975
- }
1976
- </ng-template>
1969
+ <ax-suffix>
1970
+ <ng-container *ngTemplateOutlet="footerSuffixActions"></ng-container>
1971
+ </ax-suffix>
1972
+ </ax-footer>
1973
+
1974
+ <!-- Footer Prefix Actions -->
1975
+ <ng-template #footerPrefixActions>
1976
+ @for (action of visibleFooterPrefixActions(); track $index) {
1977
+ <ax-button
1978
+ [disabled]="action.disabled || isFormLoading()"
1979
+ [text]="(action.title | translate | async)!"
1980
+ [look]="'outline'"
1981
+ [color]="action.color"
1982
+ (onClick)="executeAction(action)"
1983
+ >
1984
+ @if (isFormLoading() && action.command?.name != 'cancel') {
1985
+ <ax-loading></ax-loading>
1986
+ }
1987
+ <ax-prefix>
1988
+ <i class="{{ action.icon }}"></i>
1989
+ </ax-prefix>
1990
+ </ax-button>
1991
+ }
1992
+ </ng-template>
1977
1993
 
1978
- <!-- Footer Suffix Actions -->
1979
- <ng-template #footerSuffixActions>
1980
- @for (action of visibleFooterSuffixActions(); track $index) {
1981
- <ax-button
1982
- [disabled]="action.disabled || isSubmitting()"
1983
- [text]="(action.title | translate | async)!"
1984
- [look]="'solid'"
1985
- [color]="action.color"
1986
- (onClick)="executeAction(action)"
1987
- >
1988
- @if (action.icon) {
1989
- <ax-prefix>
1990
- <ax-icon icon="{{ action.icon }}"></ax-icon>
1991
- </ax-prefix>
1994
+ <!-- Footer Suffix Actions -->
1995
+ <ng-template #footerSuffixActions>
1996
+ @for (action of visibleFooterSuffixActions(); track $index) {
1997
+ <ax-button
1998
+ [disabled]="action.disabled || isSubmitting()"
1999
+ [text]="(action.title | translate | async)!"
2000
+ [look]="'solid'"
2001
+ [color]="action.color"
2002
+ (onClick)="executeAction(action)"
2003
+ >
2004
+ @if (action.icon) {
2005
+ <ax-prefix>
2006
+ <ax-icon icon="{{ action.icon }}"></ax-icon>
2007
+ </ax-prefix>
2008
+ }
2009
+ </ax-button>
1992
2010
  }
1993
- </ax-button>
1994
- }
1995
- </ng-template>
2011
+ </ng-template>
1996
2012
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXPLayoutRendererComponent, selector: "axp-layout-renderer", inputs: ["layout", "context", "look", "mode"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }] }); }
1997
2013
  }
1998
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXPDialogRendererComponent, decorators: [{
2014
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPDialogRendererComponent, decorators: [{
1999
2015
  type: Component,
2000
2016
  args: [{
2001
2017
  selector: 'axp-dialog-renderer',
2002
2018
  standalone: true,
2003
- imports: [CommonModule, AXPLayoutRendererComponent, AXButtonModule, AXDecoratorModule, AXLoadingModule, AXTranslationModule],
2019
+ imports: [
2020
+ CommonModule,
2021
+ AXPLayoutRendererComponent,
2022
+ AXButtonModule,
2023
+ AXDecoratorModule,
2024
+ AXLoadingModule,
2025
+ AXTranslationModule,
2026
+ ],
2004
2027
  template: `
2005
- <div class="ax-p-4">
2006
- <axp-layout-renderer
2007
- [layout]="config.definition"
2008
- [context]="context()"
2009
- (contextChange)="handleContextChanged($event)"
2010
- (contextInitiated)="handleContextInitiated($event)"
2011
- >
2012
- </axp-layout-renderer>
2013
- </div>
2014
-
2015
- <ax-footer>
2016
- <ax-prefix>
2017
- <ng-container *ngTemplateOutlet="footerPrefixActions"></ng-container>
2018
- </ax-prefix>
2019
- <ax-suffix>
2020
- <ng-container *ngTemplateOutlet="footerSuffixActions"></ng-container>
2021
- </ax-suffix>
2022
- </ax-footer>
2028
+ <div class="ax-p-4">
2029
+ <axp-layout-renderer
2030
+ [layout]="config.definition"
2031
+ [context]="context()"
2032
+ (contextChange)="handleContextChanged($event)"
2033
+ (contextInitiated)="handleContextInitiated($event)"
2034
+ >
2035
+ </axp-layout-renderer>
2036
+ </div>
2023
2037
 
2024
- <!-- Footer Prefix Actions -->
2025
- <ng-template #footerPrefixActions>
2026
- @for (action of visibleFooterPrefixActions(); track $index) {
2027
- <ax-button
2028
- [disabled]="action.disabled || isFormLoading()"
2029
- [text]="(action.title | translate | async)!"
2030
- [look]="'outline'"
2031
- [color]="action.color"
2032
- (onClick)="executeAction(action)"
2033
- >
2034
- @if (isFormLoading() && action.command?.name != 'cancel') {
2035
- <ax-loading></ax-loading>
2036
- }
2038
+ <ax-footer>
2037
2039
  <ax-prefix>
2038
- <i class="{{ action.icon }}"></i>
2040
+ <ng-container *ngTemplateOutlet="footerPrefixActions"></ng-container>
2039
2041
  </ax-prefix>
2040
- </ax-button>
2041
- }
2042
- </ng-template>
2042
+ <ax-suffix>
2043
+ <ng-container *ngTemplateOutlet="footerSuffixActions"></ng-container>
2044
+ </ax-suffix>
2045
+ </ax-footer>
2046
+
2047
+ <!-- Footer Prefix Actions -->
2048
+ <ng-template #footerPrefixActions>
2049
+ @for (action of visibleFooterPrefixActions(); track $index) {
2050
+ <ax-button
2051
+ [disabled]="action.disabled || isFormLoading()"
2052
+ [text]="(action.title | translate | async)!"
2053
+ [look]="'outline'"
2054
+ [color]="action.color"
2055
+ (onClick)="executeAction(action)"
2056
+ >
2057
+ @if (isFormLoading() && action.command?.name != 'cancel') {
2058
+ <ax-loading></ax-loading>
2059
+ }
2060
+ <ax-prefix>
2061
+ <i class="{{ action.icon }}"></i>
2062
+ </ax-prefix>
2063
+ </ax-button>
2064
+ }
2065
+ </ng-template>
2043
2066
 
2044
- <!-- Footer Suffix Actions -->
2045
- <ng-template #footerSuffixActions>
2046
- @for (action of visibleFooterSuffixActions(); track $index) {
2047
- <ax-button
2048
- [disabled]="action.disabled || isSubmitting()"
2049
- [text]="(action.title | translate | async)!"
2050
- [look]="'solid'"
2051
- [color]="action.color"
2052
- (onClick)="executeAction(action)"
2053
- >
2054
- @if (action.icon) {
2055
- <ax-prefix>
2056
- <ax-icon icon="{{ action.icon }}"></ax-icon>
2057
- </ax-prefix>
2067
+ <!-- Footer Suffix Actions -->
2068
+ <ng-template #footerSuffixActions>
2069
+ @for (action of visibleFooterSuffixActions(); track $index) {
2070
+ <ax-button
2071
+ [disabled]="action.disabled || isSubmitting()"
2072
+ [text]="(action.title | translate | async)!"
2073
+ [look]="'solid'"
2074
+ [color]="action.color"
2075
+ (onClick)="executeAction(action)"
2076
+ >
2077
+ @if (action.icon) {
2078
+ <ax-prefix>
2079
+ <ax-icon icon="{{ action.icon }}"></ax-icon>
2080
+ </ax-prefix>
2081
+ }
2082
+ </ax-button>
2058
2083
  }
2059
- </ax-button>
2060
- }
2061
- </ng-template>
2062
- `
2084
+ </ng-template>
2085
+ `,
2063
2086
  }]
2064
2087
  }], propDecorators: { config: [{
2065
2088
  type: Input