@acorex/platform 20.4.2 → 20.5.0-next.1

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 (29) hide show
  1. package/common/index.d.ts +9 -1
  2. package/core/index.d.ts +405 -193
  3. package/fesm2022/acorex-platform-common.mjs +34 -11
  4. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-core.mjs +638 -244
  6. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-layout-builder.mjs +417 -112
  8. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-layout-components.mjs +614 -31
  10. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-entity.mjs +143 -511
  12. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-widget-core.mjs +70 -47
  14. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-layout-widgets.mjs +2750 -1480
  16. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  17. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-rdKxuMC_.mjs → acorex-platform-themes-default-entity-master-list-view.component-ccqB5ShI.mjs} +7 -1
  18. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-rdKxuMC_.mjs.map → acorex-platform-themes-default-entity-master-list-view.component-ccqB5ShI.mjs.map} +1 -1
  19. package/fesm2022/acorex-platform-themes-default.mjs +8 -3
  20. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-themes-shared.mjs +676 -271
  22. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  23. package/layout/builder/index.d.ts +127 -28
  24. package/layout/components/index.d.ts +245 -3
  25. package/layout/entity/index.d.ts +1 -59
  26. package/layout/widget-core/index.d.ts +20 -1
  27. package/layout/widgets/index.d.ts +396 -6
  28. package/package.json +6 -5
  29. package/themes/default/index.d.ts +1 -0
@@ -20,9 +20,9 @@ import { AXDataSource } from '@acorex/cdk/common';
20
20
  import { AXFormatService } from '@acorex/core/format';
21
21
  import * as i4$1 from '@acorex/platform/common';
22
22
  import { AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, getEntityInfo, AXPSettingService, AXPRefreshEvent, AXPReloadEvent, AXPCommonSettings, AXPCleanNestedFilters, AXPWorkflowNavigateAction, AXPToastAction, AXP_SEARCH_DEFINITION_PROVIDER } from '@acorex/platform/common';
23
- import * as i1$2 from '@acorex/platform/core';
23
+ import * as i1$1 from '@acorex/platform/core';
24
24
  import { resolveActionLook, AXPExpressionEvaluatorService, AXPDistributedEventListenerService, AXPBroadcastEventService, AXPPlatformScope, getChangedPaths, extractValue, setSmart, AXPSystemActionType } from '@acorex/platform/core';
25
- import * as i2$2 from '@acorex/platform/workflow';
25
+ import * as i2$3 from '@acorex/platform/workflow';
26
26
  import { AXPWorkflowService, ofType, createWorkFlowEvent, AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
27
27
  import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
28
28
  import { Subject, takeUntil } from 'rxjs';
@@ -36,19 +36,18 @@ import { AXDecoratorModule } from '@acorex/components/decorators';
36
36
  import * as i4$2 from '@acorex/components/dropdown';
37
37
  import { AXDropdownModule } from '@acorex/components/dropdown';
38
38
  import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_ALLOW_CLEAR_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_ALLOW_MULTIPLE_PROPERTY, AXPFileUploaderWidgetService } from '@acorex/platform/layout/widgets';
39
- import * as i1$1 from '@angular/forms';
39
+ import * as i1 from '@angular/forms';
40
40
  import { FormsModule } from '@angular/forms';
41
41
  import * as i5$1 from '@acorex/components/form';
42
42
  import { AXFormModule } from '@acorex/components/form';
43
43
  import * as i7 from '@acorex/components/select-box';
44
44
  import { AXSelectBoxModule } from '@acorex/components/select-box';
45
- import * as i2$1 from '@acorex/components/text-box';
45
+ import * as i2$2 from '@acorex/components/text-box';
46
46
  import { AXTextBoxModule, AXTextBoxComponent } from '@acorex/components/text-box';
47
47
  import { AXValidationModule } from '@acorex/core/validation';
48
- import * as i1 from '@acorex/components/badge';
48
+ import * as i2$1 from '@acorex/components/badge';
49
49
  import { AXBadgeModule } from '@acorex/components/badge';
50
- import * as i6$2 from '@acorex/components/search-box';
51
- import { AXSearchBoxComponent, AXSearchBoxModule } from '@acorex/components/search-box';
50
+ import { AXSearchBoxComponent } from '@acorex/components/search-box';
52
51
  import * as i6$1 from '@acorex/components/tag-box';
53
52
  import { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';
54
53
  import { AXPDataSelectorService, AXPWidgetPropertyViewerComponent } from '@acorex/platform/layout/components';
@@ -4413,6 +4412,131 @@ class AXPEntitySearchDefinitionProvider {
4413
4412
  }
4414
4413
  }
4415
4414
 
4415
+ /**
4416
+ * Error type that can be thrown by middlewares to abort the chain with a structured payload.
4417
+ */
4418
+ class AXPMiddlewareAbortError extends Error {
4419
+ constructor(message, options = {}) {
4420
+ super(message);
4421
+ this.message = message;
4422
+ this.options = options;
4423
+ this.name = 'AXPMiddlewareAbortError';
4424
+ }
4425
+ toResponse() {
4426
+ return {
4427
+ success: false,
4428
+ error: {
4429
+ code: this.options.code,
4430
+ message: this.message,
4431
+ status: this.options.status,
4432
+ details: this.options.details,
4433
+ },
4434
+ };
4435
+ }
4436
+ }
4437
+ /** Type guard for AXPMiddlewareAbortError */
4438
+ function isAXPMiddlewareAbortError(error) {
4439
+ return error instanceof AXPMiddlewareAbortError;
4440
+ }
4441
+ //#endregion
4442
+
4443
+ const AXP_ENTITY_STORAGE_BACKEND = new InjectionToken('AXP_ENTITY_STORAGE_BACKEND');
4444
+ const AXP_ENTITY_STORAGE_MIDDLEWARE = new InjectionToken('AXP_ENTITY_STORAGE_MIDDLEWARE');
4445
+
4446
+ class AXPMiddlewareEntityStorageService extends AXPEntityStorageService {
4447
+ constructor() {
4448
+ super(...arguments);
4449
+ this.backend = inject(AXP_ENTITY_STORAGE_BACKEND);
4450
+ this.allMiddlewares = (inject(AXP_ENTITY_STORAGE_MIDDLEWARE, { optional: true }) || []).slice();
4451
+ this.injector = inject(EnvironmentInjector);
4452
+ }
4453
+ get dbName() {
4454
+ return this.backend.dbName;
4455
+ }
4456
+ filterMiddlewares(ctx) {
4457
+ return this.allMiddlewares
4458
+ .filter((mw) => {
4459
+ const t = mw.target;
4460
+ if (!t)
4461
+ return true;
4462
+ if (t.ops && !t.ops.includes(ctx.op))
4463
+ return false;
4464
+ if (t.entity) {
4465
+ if (typeof t.entity === 'string' && t.entity !== ctx.entityName)
4466
+ return false;
4467
+ if (t.entity instanceof RegExp && !t.entity.test(ctx.entityName))
4468
+ return false;
4469
+ }
4470
+ if (t.predicate && !t.predicate(ctx))
4471
+ return false;
4472
+ return true;
4473
+ })
4474
+ .sort((a, b) => (a.target?.order ?? 0) - (b.target?.order ?? 0));
4475
+ }
4476
+ compose(mws, leaf, ctx) {
4477
+ return mws
4478
+ .slice()
4479
+ .reverse()
4480
+ .reduce((next, mw) => {
4481
+ return async () => runInInjectionContext(this.injector, () => mw.execute(ctx, next));
4482
+ }, leaf);
4483
+ }
4484
+ async run(ctx, delegate) {
4485
+ const chain = this.compose(this.filterMiddlewares(ctx), async () => {
4486
+ ctx.result = await delegate();
4487
+ }, ctx);
4488
+ await chain();
4489
+ return ctx.result;
4490
+ }
4491
+ createCtx(op, entityName, init) {
4492
+ return {
4493
+ op,
4494
+ entityName,
4495
+ locals: new Map(),
4496
+ backend: {
4497
+ getOne: (name, id) => this.backend.getOne(name, id),
4498
+ insertOne: (name, e) => this.backend.insertOne(name, e),
4499
+ query: (name, request) => this.backend.query(name, request),
4500
+ updateOne: (name, id, data) => this.backend.updateOne(name, id, data),
4501
+ },
4502
+ ...init,
4503
+ };
4504
+ }
4505
+ async initial(entityName, collection, options) {
4506
+ const ctx = this.createCtx('initial', entityName, { data: collection });
4507
+ return this.run(ctx, () => this.backend.initial(entityName, ctx.data, options));
4508
+ }
4509
+ async getOne(entityName, id) {
4510
+ const ctx = this.createCtx('getOne', entityName, { id });
4511
+ return this.run(ctx, () => this.backend.getOne(entityName, id));
4512
+ }
4513
+ async updateOne(entityName, id, keyValues) {
4514
+ const ctx = this.createCtx('update', entityName, { id, data: keyValues });
4515
+ return this.run(ctx, () => this.backend.updateOne(entityName, id, ctx.data));
4516
+ }
4517
+ async deleteOne(entityName, id) {
4518
+ const ctx = this.createCtx('delete', entityName, { id });
4519
+ return this.run(ctx, () => this.backend.deleteOne(entityName, id));
4520
+ }
4521
+ async insertOne(entityName, entity) {
4522
+ const ctx = this.createCtx('create', entityName, { data: entity });
4523
+ return this.run(ctx, () => this.backend.insertOne(entityName, ctx.data));
4524
+ }
4525
+ async getAll(entityName) {
4526
+ const ctx = this.createCtx('getAll', entityName);
4527
+ return this.run(ctx, () => this.backend.getAll(entityName));
4528
+ }
4529
+ async query(entityName, request) {
4530
+ const ctx = this.createCtx('query', entityName, { request });
4531
+ return this.run(ctx, () => this.backend.query(entityName, request));
4532
+ }
4533
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPMiddlewareEntityStorageService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
4534
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPMiddlewareEntityStorageService }); }
4535
+ }
4536
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPMiddlewareEntityStorageService, decorators: [{
4537
+ type: Injectable
4538
+ }] });
4539
+
4416
4540
  //#region ---- Column Mapping Helpers ----
4417
4541
  /**
4418
4542
  * Maps an entity property to a list widget column configuration.
@@ -5657,7 +5781,7 @@ class AXPLookupWidgetViewComponent extends AXPValueWidgetComponent {
5657
5781
  <span class="ax-text-muted">---</span>
5658
5782
  }
5659
5783
  }
5660
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5784
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2$1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5661
5785
  }
5662
5786
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPLookupWidgetViewComponent, decorators: [{
5663
5787
  type: Component,
@@ -6213,9 +6337,9 @@ class AXPLookupWidgetEditComponent extends AXPValueWidgetComponent {
6213
6337
  </ax-tag-box>
6214
6338
  }
6215
6339
  }
6216
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type:
6340
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type:
6217
6341
  //
6218
- AXButtonModule }, { kind: "component", type: i3.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$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$2.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3$2.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: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTagBoxModule }, { kind: "component", type: i6$1.AXTagBoxComponent, selector: "ax-tag-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "allowNull", "type", "look", "addOnComma", "addOnEnter", "valueField", "textField", "readonlyField", "allowDuplicateValues"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i7.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6342
+ AXButtonModule }, { kind: "component", type: i3.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$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$2.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3$2.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: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTagBoxModule }, { kind: "component", type: i6$1.AXTagBoxComponent, selector: "ax-tag-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "allowNull", "type", "look", "addOnComma", "addOnEnter", "valueField", "textField", "readonlyField", "allowDuplicateValues", "tagTemplate"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "onTagClick", "onTagDblClick", "onTagContextMenu"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i7.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6219
6343
  }
6220
6344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPLookupWidgetEditComponent, decorators: [{
6221
6345
  type: Component,
@@ -6480,375 +6604,6 @@ const AXPLookupWidget = {
6480
6604
  },
6481
6605
  };
6482
6606
 
6483
- class AXPTagableBoxWidgetColumnComponent extends AXPValueWidgetComponent {
6484
- constructor() {
6485
- super(...arguments);
6486
- this.internalValue = computed(() => (Array.isArray(this.getValue()) ? this.getValue() : [this.getValue()]), ...(ngDevMode ? [{ debugName: "internalValue" }] : []));
6487
- this.multiple = computed(() => this.options()['multiple'], ...(ngDevMode ? [{ debugName: "multiple" }] : []));
6488
- // ویژگی‌های مرتبط با SelectBox
6489
- this.useSelectBox = computed(() => this.options()['useSelectBox'], ...(ngDevMode ? [{ debugName: "useSelectBox" }] : []));
6490
- this.textField = computed(() => this.options()['textField'] ?? 'title', ...(ngDevMode ? [{ debugName: "textField" }] : []));
6491
- // استخراج داده‌ها برای نمایش
6492
- this.getData = computed(() => {
6493
- if (!this.useSelectBox()) {
6494
- return [];
6495
- }
6496
- const value = this.getValue();
6497
- if (!value) {
6498
- return [];
6499
- }
6500
- return Array.isArray(value) ? value : [value];
6501
- }, ...(ngDevMode ? [{ debugName: "getData" }] : []));
6502
- }
6503
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPTagableBoxWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6504
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: AXPTagableBoxWidgetColumnComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
6505
- <div class="ax-flex ax-gap-1 ax-flex-wrap">
6506
- @if (useSelectBox() && getData().length > 0) { @for (item of getData(); track $index) {
6507
- <ax-badge [look]="'twotone'" [text]="item[textField()]" color="primary"></ax-badge>
6508
- } } @else { @if(multiple()) { @for (item of internalValue(); track $index) {
6509
- <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-inline-block">{{ item }}</span>
6510
- } } @else {
6511
- <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-inline-block">{{ internalValue()[0] }}</span>
6512
- } }
6513
- </div>
6514
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6515
- }
6516
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPTagableBoxWidgetColumnComponent, decorators: [{
6517
- type: Component,
6518
- args: [{
6519
- template: `
6520
- <div class="ax-flex ax-gap-1 ax-flex-wrap">
6521
- @if (useSelectBox() && getData().length > 0) { @for (item of getData(); track $index) {
6522
- <ax-badge [look]="'twotone'" [text]="item[textField()]" color="primary"></ax-badge>
6523
- } } @else { @if(multiple()) { @for (item of internalValue(); track $index) {
6524
- <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-inline-block">{{ item }}</span>
6525
- } } @else {
6526
- <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-inline-block">{{ internalValue()[0] }}</span>
6527
- } }
6528
- </div>
6529
- `,
6530
- changeDetection: ChangeDetectionStrategy.OnPush,
6531
- imports: [AXBadgeModule],
6532
- inputs: [],
6533
- }]
6534
- }] });
6535
-
6536
- var tagableBoxWidgetColumn_component = /*#__PURE__*/Object.freeze({
6537
- __proto__: null,
6538
- AXPTagableBoxWidgetColumnComponent: AXPTagableBoxWidgetColumnComponent
6539
- });
6540
-
6541
- class AXPTagableBoxWidgetEditComponent extends AXPValueWidgetComponent {
6542
- constructor() {
6543
- super(...arguments);
6544
- this.entityResolver = inject(AXPEntityResolver);
6545
- this.hasClearButton = computed(() => this.options()['hasClearButton'], ...(ngDevMode ? [{ debugName: "hasClearButton" }] : []));
6546
- this.disabled = computed(() => this.options()['disabled'], ...(ngDevMode ? [{ debugName: "disabled" }] : []));
6547
- this.placeholder = computed(() => this.options()['placeholder'], ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
6548
- // پارامترهای SelectBox
6549
- this.moduleName = computed(() => this.options()['module'], ...(ngDevMode ? [{ debugName: "moduleName" }] : []));
6550
- this.entityName = computed(() => this.options()['entity'], ...(ngDevMode ? [{ debugName: "entityName" }] : []));
6551
- this.allowSearch = computed(() => this.options()['allowSearch'], ...(ngDevMode ? [{ debugName: "allowSearch" }] : []));
6552
- // منبع داده برای SelectBox
6553
- this._dataSource = new AXDataSource({
6554
- load: async (e) => {
6555
- const entity = await this.entityResolver.get(this.moduleName(), this.entityName());
6556
- const func = entity?.queries.list?.execute;
6557
- const result = await func(e);
6558
- console.log(result);
6559
- return {
6560
- items: result?.items || [],
6561
- total: result?.total || 0,
6562
- };
6563
- },
6564
- pageSize: 10,
6565
- });
6566
- }
6567
- handleSelectValueChange(e) {
6568
- if (e.isUserInteraction) {
6569
- this.setValue(e.value);
6570
- }
6571
- }
6572
- addItem() { }
6573
- get __class() {
6574
- const cls = {};
6575
- cls[`ax-block`] = true;
6576
- cls[`ax-flex-1`] = true;
6577
- return cls;
6578
- }
6579
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPTagableBoxWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6580
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: AXPTagableBoxWidgetEditComponent, isStandalone: true, selector: "axp-tagable-box-widget", host: { properties: { "class": "this.__class" } }, usesInheritance: true, ngImport: i0, template: `
6581
- <div class="ax-grid ax-grid-cols-12 ax-gap-4">
6582
- <!-- نمایش Select Box با دکمه اضافه کردن آیتم -->
6583
- <ax-select-box
6584
- class="ax-col-span-12"
6585
- [placeholder]="placeholder()"
6586
- [dataSource]="_dataSource"
6587
- [ngModel]="getValue()"
6588
- [valueField]="'name'"
6589
- [textField]="'title'"
6590
- [multiple]="true"
6591
- (onValueChanged)="handleSelectValueChange($event)"
6592
- >
6593
- @if (allowSearch()) {
6594
- <ax-search-box><ax-clear-button></ax-clear-button></ax-search-box>
6595
- }
6596
- @if (hasClearButton()) {
6597
- <ax-clear-button></ax-clear-button>
6598
- }
6599
- @for (validation of validationRules(); track $index) {
6600
- <ax-validation-rule
6601
- [rule]="validation.rule"
6602
- [message]="validation.options?.message"
6603
- [options]="validation.options"
6604
- ></ax-validation-rule>
6605
- }
6606
- </ax-select-box>
6607
- <ax-button
6608
- [text]="'افزودن آیتم جدید'"
6609
- look="twotone"
6610
- [disabled]="disabled()"
6611
- (onClick)="addItem()"
6612
- class="ax-col-start-8 md:ax-col-start-9 2xl:ax-col-start-10 ax-col-end-13"
6613
- >
6614
- <ax-prefix>
6615
- <ax-icon class="fa-solid fa-add"></ax-icon>
6616
- </ax-prefix>
6617
- </ax-button>
6618
- </div>
6619
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$2.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i3$2.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: AXValidationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: AXSelectBoxModule }, { kind: "component", type: i7.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6$2.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6620
- }
6621
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPTagableBoxWidgetEditComponent, decorators: [{
6622
- type: Component,
6623
- args: [{
6624
- selector: 'axp-tagable-box-widget',
6625
- template: `
6626
- <div class="ax-grid ax-grid-cols-12 ax-gap-4">
6627
- <!-- نمایش Select Box با دکمه اضافه کردن آیتم -->
6628
- <ax-select-box
6629
- class="ax-col-span-12"
6630
- [placeholder]="placeholder()"
6631
- [dataSource]="_dataSource"
6632
- [ngModel]="getValue()"
6633
- [valueField]="'name'"
6634
- [textField]="'title'"
6635
- [multiple]="true"
6636
- (onValueChanged)="handleSelectValueChange($event)"
6637
- >
6638
- @if (allowSearch()) {
6639
- <ax-search-box><ax-clear-button></ax-clear-button></ax-search-box>
6640
- }
6641
- @if (hasClearButton()) {
6642
- <ax-clear-button></ax-clear-button>
6643
- }
6644
- @for (validation of validationRules(); track $index) {
6645
- <ax-validation-rule
6646
- [rule]="validation.rule"
6647
- [message]="validation.options?.message"
6648
- [options]="validation.options"
6649
- ></ax-validation-rule>
6650
- }
6651
- </ax-select-box>
6652
- <ax-button
6653
- [text]="'افزودن آیتم جدید'"
6654
- look="twotone"
6655
- [disabled]="disabled()"
6656
- (onClick)="addItem()"
6657
- class="ax-col-start-8 md:ax-col-start-9 2xl:ax-col-start-10 ax-col-end-13"
6658
- >
6659
- <ax-prefix>
6660
- <ax-icon class="fa-solid fa-add"></ax-icon>
6661
- </ax-prefix>
6662
- </ax-button>
6663
- </div>
6664
- `,
6665
- changeDetection: ChangeDetectionStrategy.OnPush,
6666
- imports: [
6667
- AXTextBoxModule,
6668
- FormsModule,
6669
- AXFormModule,
6670
- AXDecoratorModule,
6671
- AXValidationModule,
6672
- AXButtonModule,
6673
- AXSelectBoxModule,
6674
- AXSearchBoxModule
6675
- ],
6676
- inputs: [],
6677
- }]
6678
- }], propDecorators: { __class: [{
6679
- type: HostBinding,
6680
- args: ['class']
6681
- }] } });
6682
-
6683
- var tagableBoxWidgetEdit_component = /*#__PURE__*/Object.freeze({
6684
- __proto__: null,
6685
- AXPTagableBoxWidgetEditComponent: AXPTagableBoxWidgetEditComponent
6686
- });
6687
-
6688
- class AXPTagableBoxWidgetFilterComponent extends AXPValueWidgetComponent {
6689
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPTagableBoxWidgetFilterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6690
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: AXPTagableBoxWidgetFilterComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6691
- }
6692
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPTagableBoxWidgetFilterComponent, decorators: [{
6693
- type: Component,
6694
- args: [{
6695
- template: ``,
6696
- changeDetection: ChangeDetectionStrategy.OnPush,
6697
- imports: [FormsModule],
6698
- inputs: [],
6699
- }]
6700
- }] });
6701
-
6702
- var tagableBoxWidgetFilter_component = /*#__PURE__*/Object.freeze({
6703
- __proto__: null,
6704
- AXPTagableBoxWidgetFilterComponent: AXPTagableBoxWidgetFilterComponent
6705
- });
6706
-
6707
- class AXPTagableBoxWidgetPrintComponent extends AXPValueWidgetComponent {
6708
- constructor() {
6709
- super(...arguments);
6710
- this.internalValue = computed(() => (Array.isArray(this.getValue()) ? this.getValue() : [this.getValue()]), ...(ngDevMode ? [{ debugName: "internalValue" }] : []));
6711
- this.multiple = computed(() => this.options()['multiple'], ...(ngDevMode ? [{ debugName: "multiple" }] : []));
6712
- // ویژگی‌های مرتبط با SelectBox
6713
- this.useSelectBox = computed(() => this.options()['useSelectBox'], ...(ngDevMode ? [{ debugName: "useSelectBox" }] : []));
6714
- this.textField = computed(() => this.options()['textField'] ?? 'title', ...(ngDevMode ? [{ debugName: "textField" }] : []));
6715
- // استخراج داده‌ها برای نمایش
6716
- this.getData = computed(() => {
6717
- if (!this.useSelectBox()) {
6718
- return [];
6719
- }
6720
- const value = this.getValue();
6721
- if (!value) {
6722
- return [];
6723
- }
6724
- return Array.isArray(value) ? value : [value];
6725
- }, ...(ngDevMode ? [{ debugName: "getData" }] : []));
6726
- }
6727
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPTagableBoxWidgetPrintComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6728
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: AXPTagableBoxWidgetPrintComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
6729
- <div>
6730
- @if (useSelectBox() && getData().length > 0) { @for (item of getData(); track $index) {
6731
- <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-mr-2 ax-mb-2 ax-inline-block">{{
6732
- item[textField()]
6733
- }}</span>
6734
- } } @else { @if(multiple()) { @for (item of internalValue(); track $index) {
6735
- <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-mr-2 ax-mb-2 ax-inline-block">{{ item }}</span>
6736
- } } @else {
6737
- <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-mr-2 ax-mb-2 ax-inline-block">{{
6738
- internalValue()[0]
6739
- }}</span>
6740
- } }
6741
- </div>
6742
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6743
- }
6744
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPTagableBoxWidgetPrintComponent, decorators: [{
6745
- type: Component,
6746
- args: [{
6747
- template: `
6748
- <div>
6749
- @if (useSelectBox() && getData().length > 0) { @for (item of getData(); track $index) {
6750
- <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-mr-2 ax-mb-2 ax-inline-block">{{
6751
- item[textField()]
6752
- }}</span>
6753
- } } @else { @if(multiple()) { @for (item of internalValue(); track $index) {
6754
- <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-mr-2 ax-mb-2 ax-inline-block">{{ item }}</span>
6755
- } } @else {
6756
- <span class="ax-bg-slate-100 ax-px-2 ax-py-1 ax-rounded ax-mr-2 ax-mb-2 ax-inline-block">{{
6757
- internalValue()[0]
6758
- }}</span>
6759
- } }
6760
- </div>
6761
- `,
6762
- changeDetection: ChangeDetectionStrategy.OnPush,
6763
- imports: [],
6764
- inputs: [],
6765
- }]
6766
- }] });
6767
-
6768
- var tagableBoxWidgetPrint_component = /*#__PURE__*/Object.freeze({
6769
- __proto__: null,
6770
- AXPTagableBoxWidgetPrintComponent: AXPTagableBoxWidgetPrintComponent
6771
- });
6772
-
6773
- class AXPTagableBoxWidgetViewComponent extends AXPValueWidgetComponent {
6774
- constructor() {
6775
- super(...arguments);
6776
- this.internalValue = computed(() => (Array.isArray(this.getValue()) ? this.getValue() : [this.getValue()]), ...(ngDevMode ? [{ debugName: "internalValue" }] : []));
6777
- this.multiple = computed(() => this.options()['multiple'], ...(ngDevMode ? [{ debugName: "multiple" }] : []));
6778
- // ویژگی‌های مرتبط با SelectBox
6779
- this.useSelectBox = computed(() => this.options()['useSelectBox'], ...(ngDevMode ? [{ debugName: "useSelectBox" }] : []));
6780
- this.textField = computed(() => this.options()['textField'] ?? 'title', ...(ngDevMode ? [{ debugName: "textField" }] : []));
6781
- // استخراج داده‌ها برای نمایش
6782
- this.getData = computed(() => {
6783
- if (!this.useSelectBox()) {
6784
- return [];
6785
- }
6786
- const value = this.getValue();
6787
- if (!value) {
6788
- return [];
6789
- }
6790
- return Array.isArray(value) ? value : [value];
6791
- }, ...(ngDevMode ? [{ debugName: "getData" }] : []));
6792
- }
6793
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPTagableBoxWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6794
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: AXPTagableBoxWidgetViewComponent, isStandalone: true, selector: "axp-tagable-box-widget", usesInheritance: true, ngImport: i0, template: `
6795
- @for (item of internalValue(); track $index) {
6796
- <ax-badge [look]="'twotone'" [text]="item" color="primary"></ax-badge>
6797
- }
6798
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6799
- }
6800
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPTagableBoxWidgetViewComponent, decorators: [{
6801
- type: Component,
6802
- args: [{
6803
- selector: 'axp-tagable-box-widget',
6804
- template: `
6805
- @for (item of internalValue(); track $index) {
6806
- <ax-badge [look]="'twotone'" [text]="item" color="primary"></ax-badge>
6807
- }
6808
- `,
6809
- changeDetection: ChangeDetectionStrategy.OnPush,
6810
- imports: [AXBadgeModule],
6811
- inputs: [],
6812
- }]
6813
- }] });
6814
-
6815
- var tagableBoxWidgetView_component = /*#__PURE__*/Object.freeze({
6816
- __proto__: null,
6817
- AXPTagableBoxWidgetViewComponent: AXPTagableBoxWidgetViewComponent
6818
- });
6819
-
6820
- const AXPTagableBoxWidget = {
6821
- name: 'tagable-editor',
6822
- title: 'Tagable Box',
6823
- icon: 'fa-light fa-tags',
6824
- description: 'Inputs text with tags',
6825
- categories: AXP_WIDGETS_EDITOR_CATEGORY,
6826
- type: 'editor',
6827
- groups: [AXPWidgetGroupEnum.EntityWidget],
6828
- defaultFilterWidgetName: 'string-filter',
6829
- properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],
6830
- components: {
6831
- view: {
6832
- component: () => Promise.resolve().then(function () { return tagableBoxWidgetView_component; }).then((c) => c.AXPTagableBoxWidgetViewComponent),
6833
- },
6834
- edit: {
6835
- component: () => Promise.resolve().then(function () { return tagableBoxWidgetEdit_component; }).then((c) => c.AXPTagableBoxWidgetEditComponent),
6836
- },
6837
- filter: {
6838
- component: () => Promise.resolve().then(function () { return tagableBoxWidgetFilter_component; }).then((c) => c.AXPTagableBoxWidgetFilterComponent),
6839
- },
6840
- column: {
6841
- component: () => Promise.resolve().then(function () { return tagableBoxWidgetColumn_component; }).then((c) => c.AXPTagableBoxWidgetColumnComponent),
6842
- },
6843
- print: {
6844
- component: () => Promise.resolve().then(function () { return tagableBoxWidgetPrint_component; }).then((c) => c.AXPTagableBoxWidgetPrintComponent),
6845
- },
6846
- designer: {
6847
- component: () => Promise.resolve().then(function () { return tagableBoxWidgetEdit_component; }).then((c) => c.AXPTagableBoxWidgetEditComponent),
6848
- },
6849
- },
6850
- };
6851
-
6852
6607
  class AXPWidgetSelectorWidgetEditComponent extends AXPValueWidgetComponent {
6853
6608
  constructor() {
6854
6609
  super(...arguments);
@@ -6913,7 +6668,7 @@ class AXPWidgetSelectorWidgetEditComponent extends AXPValueWidgetComponent {
6913
6668
  <axp-widget-property-viewer [widget]="selectedWidgetNode()!" (onChanged)="handleChangeWidget($event)">
6914
6669
  </axp-widget-property-viewer>
6915
6670
  }
6916
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i2$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$2.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: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget", "mode"], outputs: ["onChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6671
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i2$2.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$2.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: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i5$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget", "mode"], outputs: ["onChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6917
6672
  }
6918
6673
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPWidgetSelectorWidgetEditComponent, decorators: [{
6919
6674
  type: Component,
@@ -7432,8 +7187,8 @@ class AXPEntityModule {
7432
7187
  },
7433
7188
  });
7434
7189
  }
7435
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityModule, deps: [{ token: i1$2.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
7436
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityModule, imports: [RouterModule, i2$2.AXPWorkflowModule, i3$1.AXPWidgetCoreModule] }); }
7190
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityModule, deps: [{ token: i1$1.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
7191
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityModule, imports: [RouterModule, i2$3.AXPWorkflowModule, i3$1.AXPWidgetCoreModule] }); }
7437
7192
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPEntityModule, providers: [
7438
7193
  {
7439
7194
  provide: ROUTES,
@@ -7450,6 +7205,8 @@ class AXPEntityModule {
7450
7205
  useClass: AXPEntityCommandSearchDefinitionProvider,
7451
7206
  multi: true,
7452
7207
  },
7208
+ // Bind the middleware wrapper as the public storage service
7209
+ { provide: AXPEntityStorageService, useClass: AXPMiddlewareEntityStorageService },
7453
7210
  {
7454
7211
  provide: AXP_ENTITY_MODIFIER,
7455
7212
  useValue: columnWidthMiddlewareProvider,
@@ -7504,7 +7261,6 @@ class AXPEntityModule {
7504
7261
  AXPLookupWidget,
7505
7262
  AXPLookupFilterWidget,
7506
7263
  AXPWidgetSelectorWidget,
7507
- AXPTagableBoxWidget,
7508
7264
  AXPEntityListWidget,
7509
7265
  AXPEntityReferenceWidget,
7510
7266
  ],
@@ -7547,7 +7303,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
7547
7303
  AXPLookupWidget,
7548
7304
  AXPLookupFilterWidget,
7549
7305
  AXPWidgetSelectorWidget,
7550
- AXPTagableBoxWidget,
7551
7306
  AXPEntityListWidget,
7552
7307
  AXPEntityReferenceWidget,
7553
7308
  ],
@@ -7571,6 +7326,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
7571
7326
  useClass: AXPEntityCommandSearchDefinitionProvider,
7572
7327
  multi: true,
7573
7328
  },
7329
+ // Bind the middleware wrapper as the public storage service
7330
+ { provide: AXPEntityStorageService, useClass: AXPMiddlewareEntityStorageService },
7574
7331
  {
7575
7332
  provide: AXP_ENTITY_MODIFIER,
7576
7333
  useValue: columnWidthMiddlewareProvider,
@@ -7594,7 +7351,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
7594
7351
  ]),
7595
7352
  ],
7596
7353
  }]
7597
- }], ctorParameters: () => [{ type: i1$2.AXPAppStartUpService }, { type: i0.Injector }] });
7354
+ }], ctorParameters: () => [{ type: i1$1.AXPAppStartUpService }, { type: i0.Injector }] });
7598
7355
 
7599
7356
  const eventDispatchMiddleware = {
7600
7357
  target: { ops: ['create', 'update', 'delete'], order: 90 },
@@ -7976,131 +7733,6 @@ function toCompatFormFieldBuilder(field) {
7976
7733
  };
7977
7734
  }
7978
7735
 
7979
- /**
7980
- * Error type that can be thrown by middlewares to abort the chain with a structured payload.
7981
- */
7982
- class AXPMiddlewareAbortError extends Error {
7983
- constructor(message, options = {}) {
7984
- super(message);
7985
- this.message = message;
7986
- this.options = options;
7987
- this.name = 'AXPMiddlewareAbortError';
7988
- }
7989
- toResponse() {
7990
- return {
7991
- success: false,
7992
- error: {
7993
- code: this.options.code,
7994
- message: this.message,
7995
- status: this.options.status,
7996
- details: this.options.details,
7997
- },
7998
- };
7999
- }
8000
- }
8001
- /** Type guard for AXPMiddlewareAbortError */
8002
- function isAXPMiddlewareAbortError(error) {
8003
- return error instanceof AXPMiddlewareAbortError;
8004
- }
8005
- //#endregion
8006
-
8007
- const AXP_ENTITY_STORAGE_BACKEND = new InjectionToken('AXP_ENTITY_STORAGE_BACKEND');
8008
- const AXP_ENTITY_STORAGE_MIDDLEWARE = new InjectionToken('AXP_ENTITY_STORAGE_MIDDLEWARE');
8009
-
8010
- class AXPMiddlewareEntityStorageService extends AXPEntityStorageService {
8011
- constructor() {
8012
- super(...arguments);
8013
- this.backend = inject(AXP_ENTITY_STORAGE_BACKEND);
8014
- this.allMiddlewares = (inject(AXP_ENTITY_STORAGE_MIDDLEWARE, { optional: true }) || []).slice();
8015
- this.injector = inject(EnvironmentInjector);
8016
- }
8017
- get dbName() {
8018
- return this.backend.dbName;
8019
- }
8020
- filterMiddlewares(ctx) {
8021
- return this.allMiddlewares
8022
- .filter((mw) => {
8023
- const t = mw.target;
8024
- if (!t)
8025
- return true;
8026
- if (t.ops && !t.ops.includes(ctx.op))
8027
- return false;
8028
- if (t.entity) {
8029
- if (typeof t.entity === 'string' && t.entity !== ctx.entityName)
8030
- return false;
8031
- if (t.entity instanceof RegExp && !t.entity.test(ctx.entityName))
8032
- return false;
8033
- }
8034
- if (t.predicate && !t.predicate(ctx))
8035
- return false;
8036
- return true;
8037
- })
8038
- .sort((a, b) => (a.target?.order ?? 0) - (b.target?.order ?? 0));
8039
- }
8040
- compose(mws, leaf, ctx) {
8041
- return mws
8042
- .slice()
8043
- .reverse()
8044
- .reduce((next, mw) => {
8045
- return async () => runInInjectionContext(this.injector, () => mw.execute(ctx, next));
8046
- }, leaf);
8047
- }
8048
- async run(ctx, delegate) {
8049
- const chain = this.compose(this.filterMiddlewares(ctx), async () => {
8050
- ctx.result = await delegate();
8051
- }, ctx);
8052
- await chain();
8053
- return ctx.result;
8054
- }
8055
- createCtx(op, entityName, init) {
8056
- return {
8057
- op,
8058
- entityName,
8059
- locals: new Map(),
8060
- backend: {
8061
- getOne: (name, id) => this.backend.getOne(name, id),
8062
- insertOne: (name, e) => this.backend.insertOne(name, e),
8063
- query: (name, request) => this.backend.query(name, request),
8064
- updateOne: (name, id, data) => this.backend.updateOne(name, id, data),
8065
- },
8066
- ...init,
8067
- };
8068
- }
8069
- async initial(entityName, collection, options) {
8070
- const ctx = this.createCtx('initial', entityName, { data: collection });
8071
- return this.run(ctx, () => this.backend.initial(entityName, ctx.data, options));
8072
- }
8073
- async getOne(entityName, id) {
8074
- const ctx = this.createCtx('getOne', entityName, { id });
8075
- return this.run(ctx, () => this.backend.getOne(entityName, id));
8076
- }
8077
- async updateOne(entityName, id, keyValues) {
8078
- const ctx = this.createCtx('update', entityName, { id, data: keyValues });
8079
- return this.run(ctx, () => this.backend.updateOne(entityName, id, ctx.data));
8080
- }
8081
- async deleteOne(entityName, id) {
8082
- const ctx = this.createCtx('delete', entityName, { id });
8083
- return this.run(ctx, () => this.backend.deleteOne(entityName, id));
8084
- }
8085
- async insertOne(entityName, entity) {
8086
- const ctx = this.createCtx('create', entityName, { data: entity });
8087
- return this.run(ctx, () => this.backend.insertOne(entityName, ctx.data));
8088
- }
8089
- async getAll(entityName) {
8090
- const ctx = this.createCtx('getAll', entityName);
8091
- return this.run(ctx, () => this.backend.getAll(entityName));
8092
- }
8093
- async query(entityName, request) {
8094
- const ctx = this.createCtx('query', entityName, { request });
8095
- return this.run(ctx, () => this.backend.query(entityName, request));
8096
- }
8097
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPMiddlewareEntityStorageService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
8098
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPMiddlewareEntityStorageService }); }
8099
- }
8100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AXPMiddlewareEntityStorageService, decorators: [{
8101
- type: Injectable
8102
- }] });
8103
-
8104
7736
  // #region Master
8105
7737
  function entityMasterCreateAction() {
8106
7738
  return {
@@ -8295,5 +7927,5 @@ function detectEntityChanges(oldObj, newObj) {
8295
7927
  * Generated bundle index. Do not edit.
8296
7928
  */
8297
7929
 
8298
- export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityApplyUpdatesAction, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorService, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityDynamicDialogService, AXPEntityEventDispatcherService, AXPEntityListTableService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityReferenceWidget, AXPEntityReferenceWidgetColumnComponent, AXPEntityReferenceWidgetDesignerComponent, AXPEntityReferenceWidgetEditComponent, AXPEntityReferenceWidgetPrintComponent, AXPEntityReferenceWidgetViewComponent, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPGetEntityDetailsQuery, AXPLookupFilterWidget, AXPLookupFilterWidgetEditComponent, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXPTagableBoxWidget, AXPTagableBoxWidgetColumnComponent, AXPTagableBoxWidgetEditComponent, AXPTagableBoxWidgetFilterComponent, AXPTagableBoxWidgetPrintComponent, AXPTagableBoxWidgetViewComponent, AXPWidgetSelectorWidget, AXPWidgetSelectorWidgetEditComponent, AXPWidgetSelectorWidgetViewComponent, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, DEFAULT_COLUMN_WIDTHS, actionExists, columnWidthMiddlewareFactory, columnWidthMiddlewareProvider, createColumnWidthMiddlewareProvider, createModifierContext, detectEntityChanges, ensureListActions, entityDetailsCreateActions, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware, isAXPMiddlewareAbortError };
7930
+ export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityApplyUpdatesAction, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDataSelectorService, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailPopoverComponent, AXPEntityDetailPopoverService, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityDynamicDialogService, AXPEntityEventDispatcherService, AXPEntityListTableService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityListWidget, AXPEntityListWidgetViewComponent, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityReferenceWidget, AXPEntityReferenceWidgetColumnComponent, AXPEntityReferenceWidgetDesignerComponent, AXPEntityReferenceWidgetEditComponent, AXPEntityReferenceWidgetPrintComponent, AXPEntityReferenceWidgetViewComponent, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPEntityUpdateViewSectionViewModel, AXPGetEntityDetailsQuery, AXPLookupFilterWidget, AXPLookupFilterWidgetEditComponent, AXPLookupWidget, AXPLookupWidgetColumnComponent, AXPLookupWidgetEditComponent, AXPLookupWidgetViewComponent, AXPMiddlewareAbortError, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPOpenEntityDetailsCommand, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXPWidgetSelectorWidget, AXPWidgetSelectorWidgetEditComponent, AXPWidgetSelectorWidgetViewComponent, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, DEFAULT_COLUMN_WIDTHS, actionExists, columnWidthMiddlewareFactory, columnWidthMiddlewareProvider, createColumnWidthMiddlewareProvider, createModifierContext, detectEntityChanges, ensureListActions, entityDetailsCreateActions, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware, isAXPMiddlewareAbortError };
8299
7931
  //# sourceMappingURL=acorex-platform-layout-entity.mjs.map