@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.
- package/core/index.d.ts +14 -1
- package/fesm2022/acorex-platform-auth.mjs +19 -19
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/acorex-platform-common.mjs +126 -105
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +55 -42
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +16 -16
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +182 -159
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +542 -2387
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +72 -72
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-entity-create-entity.command-BXExgI3W.mjs → acorex-platform-layout-entity-create-entity.command-DyXF9zAh.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-entity-create-entity.command-BXExgI3W.mjs.map → acorex-platform-layout-entity-create-entity.command-DyXF9zAh.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +156 -156
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +15 -15
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +73 -73
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-BPzn8lr3.mjs → acorex-platform-layout-widgets-file-list-popup.component-DuuFHWvB.mjs} +4 -4
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/fesm2022/acorex-platform-layout-widgets.mjs +742 -892
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-native.mjs +7 -7
- package/fesm2022/acorex-platform-native.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +40 -40
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- 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
- 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
- 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
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-C60W6UnN.mjs.map +1 -0
- 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
- 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
- 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
- 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
- package/fesm2022/{acorex-platform-themes-default-error-401.component-CoBaQFTn.mjs → acorex-platform-themes-default-error-401.component-CcvGfdhu.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-401.component-CoBaQFTn.mjs.map → acorex-platform-themes-default-error-401.component-CcvGfdhu.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-error-404.component-BLlVOsS2.mjs → acorex-platform-themes-default-error-404.component-4-CaEsnV.mjs} +4 -4
- 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
- package/fesm2022/{acorex-platform-themes-default-error-offline.component-CybYQI9F.mjs → acorex-platform-themes-default-error-offline.component-BNecbFEj.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-offline.component-CybYQI9F.mjs.map → acorex-platform-themes-default-error-offline.component-BNecbFEj.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +39 -39
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- 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
- 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
- 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
- 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
- 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
- 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
- package/fesm2022/acorex-platform-themes-shared.mjs +41 -41
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +25 -25
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/layout/builder/README.md +1577 -2
- package/layout/builder/index.d.ts +182 -125
- package/layout/components/index.d.ts +8 -805
- package/layout/entity/index.d.ts +2 -2
- package/layout/widgets/index.d.ts +11 -36
- package/package.json +9 -9
- 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.
|
|
90
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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.
|
|
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
|
-
//
|
|
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 = (
|
|
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.
|
|
1489
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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.
|
|
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 = (
|
|
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.
|
|
1828
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
1853
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.
|
|
1854
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.
|
|
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.
|
|
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.
|
|
1938
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.
|
|
1939
|
-
<div class="ax-p-4">
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
1967
|
+
<ng-container *ngTemplateOutlet="footerPrefixActions"></ng-container>
|
|
1973
1968
|
</ax-prefix>
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
</
|
|
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
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
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
|
-
</
|
|
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.
|
|
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: [
|
|
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
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
2040
|
+
<ng-container *ngTemplateOutlet="footerPrefixActions"></ng-container>
|
|
2039
2041
|
</ax-prefix>
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
</
|
|
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
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
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
|
-
</
|
|
2060
|
-
|
|
2061
|
-
</ng-template>
|
|
2062
|
-
`
|
|
2084
|
+
</ng-template>
|
|
2085
|
+
`,
|
|
2063
2086
|
}]
|
|
2064
2087
|
}], propDecorators: { config: [{
|
|
2065
2088
|
type: Input
|