@acorex/modules 20.3.0-next.7 → 20.3.0-next.8

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 (96) hide show
  1. package/common/index.d.ts +1 -0
  2. package/data-management/index.d.ts +22 -3
  3. package/fesm2022/acorex-modules-common.mjs +97 -6
  4. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  5. package/fesm2022/{acorex-modules-contact-management-emergency-contact.entity-D75qsDor.mjs → acorex-modules-contact-management-emergency-contact.entity-3vnkpSvv.mjs} +10 -9
  6. package/fesm2022/acorex-modules-contact-management-emergency-contact.entity-3vnkpSvv.mjs.map +1 -0
  7. package/fesm2022/acorex-modules-contact-management.mjs +1 -1
  8. package/fesm2022/acorex-modules-content-management.mjs +6 -0
  9. package/fesm2022/acorex-modules-content-management.mjs.map +1 -1
  10. package/fesm2022/acorex-modules-conversation.mjs +3 -3
  11. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  12. package/fesm2022/acorex-modules-dashboard-management.mjs +11 -11
  13. package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
  14. package/fesm2022/acorex-modules-data-management.mjs +924 -8
  15. package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
  16. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-DhEDQZru.mjs → acorex-modules-document-management-acorex-modules-document-management-DUkSbCDD.mjs} +91 -58
  17. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-DhEDQZru.mjs.map → acorex-modules-document-management-acorex-modules-document-management-DUkSbCDD.mjs.map} +1 -1
  18. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-Bx2Ps7uX.mjs → acorex-modules-document-management-attachment-widget.component-Ded4rmGD.mjs} +2 -2
  19. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-Bx2Ps7uX.mjs.map → acorex-modules-document-management-attachment-widget.component-Ded4rmGD.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-B26m8qWj.mjs → acorex-modules-document-management-create-folder-dialog.component-DdN8ilG4.mjs} +9 -9
  21. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-B26m8qWj.mjs.map → acorex-modules-document-management-create-folder-dialog.component-DdN8ilG4.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-document-management-details-view.component-3DmulyK_.mjs → acorex-modules-document-management-details-view.component-DkeoYFvx.mjs} +2 -2
  23. package/fesm2022/{acorex-modules-document-management-details-view.component-3DmulyK_.mjs.map → acorex-modules-document-management-details-view.component-DkeoYFvx.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-DmR6gFdD.mjs → acorex-modules-document-management-document-signature-popup.component-DuPMRUTY.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-DmR6gFdD.mjs.map → acorex-modules-document-management-document-signature-popup.component-DuPMRUTY.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-document-management-drive-choose.component-BNyPOrzl.mjs → acorex-modules-document-management-drive-choose.component-CKMMZHrc.mjs} +2 -2
  27. package/fesm2022/{acorex-modules-document-management-drive-choose.component-BNyPOrzl.mjs.map → acorex-modules-document-management-drive-choose.component-CKMMZHrc.mjs.map} +1 -1
  28. package/fesm2022/{acorex-modules-document-management-drive.component-D5X_bI5D.mjs → acorex-modules-document-management-drive.component-Dh2hcCpJ.mjs} +2 -2
  29. package/fesm2022/{acorex-modules-document-management-drive.component-D5X_bI5D.mjs.map → acorex-modules-document-management-drive.component-Dh2hcCpJ.mjs.map} +1 -1
  30. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-AzDtXQqt.mjs → acorex-modules-document-management-large-icons-view.component-DGUbA3xa.mjs} +2 -2
  31. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-AzDtXQqt.mjs.map → acorex-modules-document-management-large-icons-view.component-DGUbA3xa.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-DCG_v9JT.mjs → acorex-modules-document-management-large-tiles-view.component-Bt6Py82M.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-DCG_v9JT.mjs.map → acorex-modules-document-management-large-tiles-view.component-Bt6Py82M.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-document-management-list-view.component-Cb2OVElN.mjs → acorex-modules-document-management-list-view.component-DQllDW_Q.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-document-management-list-view.component-Cb2OVElN.mjs.map → acorex-modules-document-management-list-view.component-DQllDW_Q.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-document-management-meta-choose-popup.component-DsSo9G8S.mjs → acorex-modules-document-management-meta-choose-popup.component-BSYX7W79.mjs} +4 -4
  37. package/fesm2022/acorex-modules-document-management-meta-choose-popup.component-BSYX7W79.mjs.map +1 -0
  38. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-EN4ttbvx.mjs → acorex-modules-document-management-small-icons-view.component-Umh8Z9qn.mjs} +2 -2
  39. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-EN4ttbvx.mjs.map → acorex-modules-document-management-small-icons-view.component-Umh8Z9qn.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-C-HjbNwe.mjs → acorex-modules-document-management-small-tiles-view.component-CBgWWCdt.mjs} +2 -2
  41. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-C-HjbNwe.mjs.map → acorex-modules-document-management-small-tiles-view.component-CBgWWCdt.mjs.map} +1 -1
  42. package/fesm2022/acorex-modules-document-management.mjs +1 -1
  43. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-BQ_KNd7M.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-CdAtMLlz.mjs} +93 -213
  44. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-CdAtMLlz.mjs.map +1 -0
  45. package/fesm2022/{acorex-modules-human-capital-management-employee-skill.entity-3wofaUXu.mjs → acorex-modules-human-capital-management-employee-skill.entity-BllN9Giu.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-human-capital-management-employee-skill.entity-3wofaUXu.mjs.map → acorex-modules-human-capital-management-employee-skill.entity-BllN9Giu.mjs.map} +1 -1
  47. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-1fVathnk.mjs → acorex-modules-human-capital-management-employee.entity-CKofleq7.mjs} +2 -2
  48. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-1fVathnk.mjs.map → acorex-modules-human-capital-management-employee.entity-CKofleq7.mjs.map} +1 -1
  49. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-BWrwli0P.mjs → acorex-modules-human-capital-management-employment-type.entity-DfrErkOs.mjs} +2 -2
  50. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-BWrwli0P.mjs.map → acorex-modules-human-capital-management-employment-type.entity-DfrErkOs.mjs.map} +1 -1
  51. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-4ddc6R_K.mjs → acorex-modules-human-capital-management-leave-request.entity-Bz_4gE7D.mjs} +2 -2
  52. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-4ddc6R_K.mjs.map → acorex-modules-human-capital-management-leave-request.entity-Bz_4gE7D.mjs.map} +1 -1
  53. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-DYYJVRju.mjs → acorex-modules-human-capital-management-leave-type.entity-CFqmKzkn.mjs} +2 -2
  54. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-DYYJVRju.mjs.map → acorex-modules-human-capital-management-leave-type.entity-CFqmKzkn.mjs.map} +1 -1
  55. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-DIqdhqk4.mjs → acorex-modules-human-capital-management-position-assignment.entity-BYqhKD95.mjs} +36 -4
  56. package/fesm2022/acorex-modules-human-capital-management-position-assignment.entity-BYqhKD95.mjs.map +1 -0
  57. package/fesm2022/{acorex-modules-human-capital-management-skill-level.entity-BN67pBaa.mjs → acorex-modules-human-capital-management-skill-level.entity-D4WoE6MR.mjs} +2 -2
  58. package/fesm2022/{acorex-modules-human-capital-management-skill-level.entity-BN67pBaa.mjs.map → acorex-modules-human-capital-management-skill-level.entity-D4WoE6MR.mjs.map} +1 -1
  59. package/fesm2022/{acorex-modules-human-capital-management-skill.entity-D4CglCC7.mjs → acorex-modules-human-capital-management-skill.entity-DqUyAAgW.mjs} +2 -2
  60. package/fesm2022/{acorex-modules-human-capital-management-skill.entity-D4CglCC7.mjs.map → acorex-modules-human-capital-management-skill.entity-DqUyAAgW.mjs.map} +1 -1
  61. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  62. package/fesm2022/acorex-modules-notification-management.mjs +5 -5
  63. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  64. package/fesm2022/{acorex-modules-organization-management-org-chart.page-keZ4Gk7y.mjs → acorex-modules-organization-management-org-chart.page-Caboa2La.mjs} +75 -23
  65. package/fesm2022/acorex-modules-organization-management-org-chart.page-Caboa2La.mjs.map +1 -0
  66. package/fesm2022/acorex-modules-organization-management.mjs +5 -2
  67. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  68. package/fesm2022/acorex-modules-project-management-email-jsa.command-DS9XIlQ0.mjs +91 -0
  69. package/fesm2022/acorex-modules-project-management-email-jsa.command-DS9XIlQ0.mjs.map +1 -0
  70. package/fesm2022/acorex-modules-project-management-reassign-jsa.command-DbxxI3e3.mjs +88 -0
  71. package/fesm2022/acorex-modules-project-management-reassign-jsa.command-DbxxI3e3.mjs.map +1 -0
  72. package/fesm2022/acorex-modules-project-management-sign-jsa.command-cRf0DeTE.mjs +75 -0
  73. package/fesm2022/acorex-modules-project-management-sign-jsa.command-cRf0DeTE.mjs.map +1 -0
  74. package/fesm2022/acorex-modules-project-management.mjs +6 -6
  75. package/fesm2022/acorex-modules-report-management.mjs +4 -2
  76. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  77. package/fesm2022/acorex-modules-security-management.mjs +347 -3
  78. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  79. package/fesm2022/acorex-modules-task-management.mjs +18 -11
  80. package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
  81. package/human-capital-management/index.d.ts +1 -1
  82. package/package.json +1 -1
  83. package/security-management/index.d.ts +42 -3
  84. package/fesm2022/acorex-modules-contact-management-emergency-contact.entity-D75qsDor.mjs.map +0 -1
  85. package/fesm2022/acorex-modules-document-management-meta-choose-popup.component-DsSo9G8S.mjs.map +0 -1
  86. package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-B7gcoDDb.mjs +0 -101
  87. package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-B7gcoDDb.mjs.map +0 -1
  88. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-BQ_KNd7M.mjs.map +0 -1
  89. package/fesm2022/acorex-modules-human-capital-management-position-assignment.entity-DIqdhqk4.mjs.map +0 -1
  90. package/fesm2022/acorex-modules-organization-management-org-chart.page-keZ4Gk7y.mjs.map +0 -1
  91. package/fesm2022/acorex-modules-project-management-email-jsa.command-BuT5Vj4Y.mjs +0 -115
  92. package/fesm2022/acorex-modules-project-management-email-jsa.command-BuT5Vj4Y.mjs.map +0 -1
  93. package/fesm2022/acorex-modules-project-management-reassign-jsa.command-B3OsacOq.mjs +0 -113
  94. package/fesm2022/acorex-modules-project-management-reassign-jsa.command-B3OsacOq.mjs.map +0 -1
  95. package/fesm2022/acorex-modules-project-management-sign-jsa.command-CJWg6Ntg.mjs +0 -77
  96. package/fesm2022/acorex-modules-project-management-sign-jsa.command-CJWg6Ntg.mjs.map +0 -1
@@ -1,14 +1,16 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Injector, Injectable, computed, effect, HostBinding, ChangeDetectionStrategy, Component, NgModule, EventEmitter, signal, Output, Input } from '@angular/core';
2
+ import { inject, Injector, Injectable, computed, effect, HostBinding, ChangeDetectionStrategy, Component, NgModule, EventEmitter, signal, Output, Input, input, output, viewChild } from '@angular/core';
3
3
  import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
4
4
  import { AXPSearchCommandProvider, createAllQueryView, createQueryView, AXPEntityCommandScope, AXPEntityQueryType, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex/platform/common';
5
- import { AXPEntityService, AXMEntityCrudServiceImpl, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
5
+ import { AXPDataSourceDefinitionProviderService, AXPDataGenerator, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER } from '@acorex/platform/core';
6
+ import { AXPEntityService, AXMEntityCrudServiceImpl, ensureListActions, actionExists, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
6
7
  import * as i4 from '@acorex/platform/layout/builder';
7
- import { AXPWidgetRegistryService, AXPWidgetsCatalog, AXP_WIDGETS_EDITOR_CATEGORY, AXPValueWidgetComponent, AXPLayoutBuilderModule, AXPWidgetGroupEnum } from '@acorex/platform/layout/builder';
8
+ import { AXPWidgetRegistryService, AXPWidgetsCatalog, AXP_WIDGETS_EDITOR_CATEGORY, AXPValueWidgetComponent, AXPLayoutBuilderModule, AXPWidgetGroupEnum, AXPPageStatus } from '@acorex/platform/layout/builder';
9
+ import { AXPQueryService } from '@acorex/platform/runtime';
8
10
  import { AXDataSource } from '@acorex/cdk/common';
9
11
  import { AXPWidgetsList } from '@acorex/modules/common';
10
- import { AXTranslationService } from '@acorex/core/translation';
11
- import { AXPDataSourceDefinitionProviderService, AXP_DATASOURCE_DEFINITION_PROVIDER } from '@acorex/platform/core';
12
+ import * as i3$1 from '@acorex/core/translation';
13
+ import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
12
14
  import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_LABEL_PROPERTY, AXP_READONLY_PROPERTY } from '@acorex/platform/widgets';
13
15
  import * as i2 from '@acorex/components/select-box';
14
16
  import { AXSelectBoxModule } from '@acorex/components/select-box';
@@ -26,6 +28,9 @@ import { AXFormModule } from '@acorex/components/form';
26
28
  import * as i5 from '@acorex/components/dropdown';
27
29
  import { AXDropdownModule } from '@acorex/components/dropdown';
28
30
  import { moveItemInArray, AXDragDirective, AXDragHandleDirective, AXDropListDirective } from '@acorex/cdk/drag-drop';
31
+ import { moveItemInArray as moveItemInArray$1, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';
32
+ import { AXPDataSelectorService, AXPDynamicFormComponent } from '@acorex/platform/layout/components';
33
+ import { AXLabelModule } from '@acorex/components/label';
29
34
 
30
35
  const config = {
31
36
  i18n: 'data-management',
@@ -204,6 +209,32 @@ class AXMSearchCommandProvider extends AXPSearchCommandProvider {
204
209
  }
205
210
  }
206
211
 
212
+ /**
213
+ * Metadata Evaluator Scope Provider
214
+ *
215
+ * Provides expression evaluation capabilities for metadata operations:
216
+ * - Get category IDs from context/expressions
217
+ * - Retrieve metadata by category IDs
218
+ * - Access category metadata inheritance
219
+ */
220
+ class AXMMetadataEvaluatorScopeProvider {
221
+ constructor() {
222
+ this.queryService = inject(AXPQueryService);
223
+ }
224
+ async provide(context) {
225
+ context.addScope('metadata', {
226
+ getByCategoryIds: async (entityName, categoryIds) => {
227
+ const ids = Array.isArray(categoryIds) ? categoryIds : [categoryIds];
228
+ const result = await this.queryService.fetch('DataManagement:Metadata:GetCategoryInheritance', {
229
+ entityName,
230
+ categoryId: ids[0]
231
+ });
232
+ return result;
233
+ }
234
+ });
235
+ }
236
+ }
237
+
207
238
  //#region ---- Column Definition Widget ----
208
239
  const AXM_COLUMN_DEF_WIDGET = [
209
240
  {
@@ -3875,13 +3906,886 @@ class AXMDataSourceListDataSourceDefinition {
3875
3906
  }
3876
3907
  }
3877
3908
 
3909
+ const AXPMetaDataSelectorWidget = {
3910
+ name: 'meta-data-selector-editor',
3911
+ title: '@data-management:widgets.meta-data-selector.title',
3912
+ categories: AXP_WIDGETS_EDITOR_CATEGORY,
3913
+ groups: [AXPWidgetGroupEnum.EntityWidget],
3914
+ description: '@data-management:widgets.meta-data-selector.description',
3915
+ icon: 'fa-light fa-list-check',
3916
+ defaultFilterWidgetName: 'string-filter',
3917
+ type: 'editor',
3918
+ options: {
3919
+ needLabel: false,
3920
+ },
3921
+ properties: [
3922
+ AXP_NAME_PROPERTY,
3923
+ AXP_DATA_PATH_PROPERTY,
3924
+ ],
3925
+ components: {
3926
+ view: {
3927
+ component: () => Promise.resolve().then(function () { return metaDataSelectorView_component; }).then((c) => c.AXPMetaDataSelectorWidgetViewComponent),
3928
+ },
3929
+ edit: {
3930
+ component: () => Promise.resolve().then(function () { return metaDataSelectorEdit_component; }).then((c) => c.AXPMetaDataSelectorWidgetEditComponent),
3931
+ },
3932
+ print: {
3933
+ component: () => Promise.resolve().then(function () { return metaDataSelectorEdit_component; }).then((c) => c.AXPMetaDataSelectorWidgetEditComponent),
3934
+ },
3935
+ },
3936
+ };
3937
+
3938
+ //#endregion
3939
+ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
3940
+ constructor() {
3941
+ super(...arguments);
3942
+ //#region ---- Services & Dependencies ----
3943
+ this.dataSelectorService = inject(AXPDataSelectorService);
3944
+ this.metaDataService = inject(AXMMetaDataDefinitionService);
3945
+ //#endregion
3946
+ //#region ---- Computed Properties ----
3947
+ /**
3948
+ * Check if the widget is in readonly mode
3949
+ */
3950
+ this.readonly = computed(() => this.options()['readonly'], ...(ngDevMode ? [{ debugName: "readonly" }] : []));
3951
+ /**
3952
+ * Convert raw value to MetaDataSelectorItem format for display
3953
+ */
3954
+ this.metaItems = computed(() => {
3955
+ const value = this.getValue();
3956
+ if (!Array.isArray(value)) {
3957
+ return [];
3958
+ }
3959
+ return value.map((item, index) => ({
3960
+ id: AXPDataGenerator.uuid(),
3961
+ name: item.name,
3962
+ title: item.title,
3963
+ description: item.description,
3964
+ interface: item.interface,
3965
+ configuration: {
3966
+ isRequired: item.configuration?.isRequired ?? false,
3967
+ placeholder: item.configuration?.placeholder || '',
3968
+ },
3969
+ status: item.status || 'active',
3970
+ order: item.order ?? index,
3971
+ ...item
3972
+ }));
3973
+ }, ...(ngDevMode ? [{ debugName: "metaItems" }] : []));
3974
+ //#endregion
3975
+ //#region ---- Event Handlers ----
3976
+ /**
3977
+ * Effect to handle status changes
3978
+ */
3979
+ this.#statusChanged = effect(() => {
3980
+ if (this.layoutService.status() === AXPPageStatus.Submitting) {
3981
+ const currentValue = this.getValue();
3982
+ if (Array.isArray(currentValue)) {
3983
+ const cleanedValue = currentValue
3984
+ .filter(item => item.status !== 'deleted')
3985
+ .map(item => {
3986
+ const { isNewlyAdded, ...rest } = item;
3987
+ return rest;
3988
+ });
3989
+ this.setValue(cleanedValue);
3990
+ }
3991
+ }
3992
+ }, ...(ngDevMode ? [{ debugName: "#statusChanged" }] : []));
3993
+ }
3994
+ //#endregion
3995
+ //#region ---- Event Handlers ----
3996
+ /**
3997
+ * Effect to handle status changes
3998
+ */
3999
+ #statusChanged;
4000
+ /**
4001
+ * Handle adding a new metadata item
4002
+ */
4003
+ async handleAddClick() {
4004
+ try {
4005
+ const dataSource = new AXDataSource({
4006
+ key: 'id',
4007
+ pageSize: 20,
4008
+ load: async (e) => {
4009
+ const metaDataItems = await this.metaDataService.query(e);
4010
+ return {
4011
+ items: metaDataItems.items,
4012
+ total: metaDataItems.total
4013
+ };
4014
+ }
4015
+ });
4016
+ // Open data selector
4017
+ const result = await this.dataSelectorService.open({
4018
+ title: '@data-management:meta-data-selector.select-items',
4019
+ dataSource: dataSource,
4020
+ columns: [
4021
+ {
4022
+ name: 'title',
4023
+ title: '@general:terms.title',
4024
+ visible: true,
4025
+ widget: {
4026
+ type: 'text-editor',
4027
+ options: {}
4028
+ }
4029
+ },
4030
+ {
4031
+ name: 'description',
4032
+ title: '@general:terms.description',
4033
+ visible: true,
4034
+ widget: {
4035
+ type: 'text-editor',
4036
+ options: {}
4037
+ }
4038
+ },
4039
+ ],
4040
+ selectionMode: 'multiple',
4041
+ searchFields: ['title', 'description'],
4042
+ allowCreate: false
4043
+ });
4044
+ // Add selected items to the current value
4045
+ if (result?.items && result.items.length > 0) {
4046
+ const currentValue = this.getValue() || [];
4047
+ const newItems = result.items.map((item, index) => ({
4048
+ id: item.id,
4049
+ name: item.name,
4050
+ title: item.title,
4051
+ description: item.description,
4052
+ interface: item.interface,
4053
+ configuration: {},
4054
+ order: currentValue.length + index,
4055
+ isNewlyAdded: true, // Mark as newly added
4056
+ }));
4057
+ this.setValue([...currentValue, ...newItems]);
4058
+ }
4059
+ }
4060
+ catch (error) {
4061
+ console.error('Error loading meta-data:', error);
4062
+ }
4063
+ }
4064
+ /**
4065
+ * Handle removing a metadata item
4066
+ */
4067
+ handleItemRemove(item) {
4068
+ this.removeMetaItem(item);
4069
+ }
4070
+ /**
4071
+ * Handle reverting a deleted metadata item
4072
+ */
4073
+ handleItemRevert(item) {
4074
+ item.status = 'active';
4075
+ this.updateMetaItem(item);
4076
+ }
4077
+ /**
4078
+ * Handle editing a metadata item (Phase 2 - will use AXPDynamicDialogService)
4079
+ */
4080
+ async handleItemEdit(item) {
4081
+ // TODO: Phase 2 - Implement property editor popup
4082
+ console.log('Edit item:', item);
4083
+ }
4084
+ /**
4085
+ * Handle drag and drop reordering
4086
+ */
4087
+ handleDrop(event) {
4088
+ const currentValue = this.getValue() || [];
4089
+ moveItemInArray$1(currentValue, event.previousIndex, event.currentIndex);
4090
+ // Update order property
4091
+ const updatedItems = currentValue.map((item, index) => ({
4092
+ ...item,
4093
+ order: index
4094
+ }));
4095
+ this.setValue(updatedItems);
4096
+ }
4097
+ //#endregion
4098
+ //#region ---- Utility Methods ----
4099
+ /**
4100
+ * Remove a metadata item (mark as deleted if active, remove if already deleted)
4101
+ */
4102
+ removeMetaItem(item) {
4103
+ const currentValue = this.getValue() || [];
4104
+ // If item is newly added, always hard delete (remove completely)
4105
+ if (item.isNewlyAdded) {
4106
+ const updatedValue = currentValue.filter((meta) => meta.id !== item.id);
4107
+ this.setValue(updatedValue);
4108
+ return;
4109
+ }
4110
+ // For existing items (from database), use soft delete
4111
+ if (item.status === 'active') {
4112
+ // Mark as deleted instead of removing completely
4113
+ const updatedValue = currentValue.map((meta) => meta.id === item.id ? { ...meta, status: 'deleted' } : meta);
4114
+ this.setValue(updatedValue);
4115
+ }
4116
+ else {
4117
+ // Remove completely if already marked as deleted
4118
+ const updatedValue = currentValue.filter((meta) => meta.id !== item.id);
4119
+ this.setValue(updatedValue);
4120
+ }
4121
+ }
4122
+ /**
4123
+ * Update a specific metadata item
4124
+ */
4125
+ updateMetaItem(item) {
4126
+ const currentValue = this.getValue() || [];
4127
+ const updatedValue = currentValue.map((meta) => meta.id === item.id ? { ...meta, ...item } : meta);
4128
+ this.setValue(updatedValue);
4129
+ }
4130
+ //#endregion
4131
+ //#region ---- Host Binding ----
4132
+ get __class() {
4133
+ const cls = {};
4134
+ cls[`ax-block`] = true;
4135
+ cls[`ax-border`] = true;
4136
+ cls[`ax-rounded-md`] = true;
4137
+ cls[`ax-lightest-surface`] = true;
4138
+ cls[`ax-flex-1`] = true;
4139
+ return cls;
4140
+ }
4141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPMetaDataSelectorWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
4142
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.8", type: AXPMetaDataSelectorWidgetEditComponent, isStandalone: true, selector: "axp-meta-data-selector-widget-edit", host: { properties: { "class": "this.__class" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"axp-meta-data-selector-widget-edit\" *translate=\"let t\">\n @if (!readonly()) {\n <div class=\"__header\">\n <ax-button class=\"ax-sm\" [text]=\"t('@data-management:actions.add-meta-data') | async\" [color]=\"'primary'\"\n (onClick)=\"handleAddClick()\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n }\n <div class=\"__content\">\n @if (metaItems().length === 0) {\n <div class=\"__empty-state\">\n <ax-icon class=\"__icon\" icon=\"fa-light fa-list-check\"></ax-icon>\n <p class=\"__message\">{{ t('@data-management:meta-data-selector.no-items-selected') | async }}</p>\n </div>\n } @else {\n <div class=\"__items-list\" cdkDropList (cdkDropListDropped)=\"handleDrop($event)\">\n @for (item of metaItems(); track item.id) {\n <div class=\"__meta-data-selector-item\" [class.__deleted]=\"item.status === 'deleted'\" cdkDrag>\n <div class=\"__drag-handle\" cdkDragHandle>\n <ax-icon icon=\"fa-light fa-grip-vertical\"></ax-icon>\n </div>\n\n <div class=\"__item-content\">\n <div class=\"__item-header\">\n <h4 class=\"__item-title\">{{ item.title }}</h4>\n @if (item.configuration.isRequired) {\n <span class=\"__required-badge\">{{ t('@data-management:meta-data-selector.required') | async }}</span>\n }\n </div>\n @if (item.configuration.placeholder) {\n <p class=\"__placeholder-text\">\n {{ t('@data-management:meta-data-selector.placeholder') | async }}:\n {{ item.configuration.placeholder }}\n </p>\n }\n </div>\n\n @if (!readonly()) {\n <div class=\"__item-actions\">\n @if (item.status === 'deleted') {\n <ax-button class=\"ax-sm\" [look]=\"'blank'\" color=\"warning\" (onClick)=\"handleItemRevert(item)\">\n <ax-icon class=\"fa-light fa-rotate-left\"></ax-icon>\n </ax-button>\n } @else {\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"accent3\" (onClick)=\"handleItemEdit(item)\">\n <ax-icon class=\"fa-light fa-pencil\"></ax-icon>\n </ax-button>\n\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"danger\" (onClick)=\"handleItemRemove(item)\">\n <ax-icon class=\"fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</div>", styles: [".axp-meta-data-selector-widget-edit .__header{display:flex;justify-content:flex-end;border-bottom-width:1px;padding:.5rem}.axp-meta-data-selector-widget-edit .__content{padding:.5rem}.axp-meta-data-selector-widget-edit .__content .__empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:2rem;padding-bottom:2rem;text-align:center}.axp-meta-data-selector-widget-edit .__content .__empty-state .__icon{margin-bottom:.75rem;font-size:1.875rem;line-height:2.25rem;opacity:.65}.axp-meta-data-selector-widget-edit .__content .__empty-state .__message{font-size:.875rem;line-height:1.25rem;opacity:.65}.axp-meta-data-selector-widget-edit .__content .__items-list>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.__meta-data-selector-item{display:flex;align-items:center;gap:.75rem;border-radius:.375rem;border-width:1px;padding:.75rem;cursor:move;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__meta-data-selector-item:hover{background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}.__meta-data-selector-item.__deleted{background-color:rgb(var(--ax-sys-color-danger-lightest-surface));color:rgb(var(--ax-sys-color-on-danger-lightest-surface));border-color:rgb(var(--ax-sys-color-border-danger-lightest-surface))}.__meta-data-selector-item .__drag-handle{display:flex;height:1.5rem;width:1.5rem;cursor:grab;align-items:center;justify-content:center}.__meta-data-selector-item .__drag-handle:active{cursor:grabbing}.__meta-data-selector-item .__item-content{flex:1 1 0%}.__meta-data-selector-item .__item-content .__item-header{margin-bottom:.25rem;display:flex;align-items:center;gap:.5rem}.__meta-data-selector-item .__item-content .__item-header .__item-title{font-size:.875rem;line-height:1.25rem;font-weight:500}.__meta-data-selector-item .__item-content .__item-header .__required-badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(154 52 18 / var(--tw-text-opacity, 1))}.__meta-data-selector-item .__item-content .__placeholder-text{font-size:.75rem;line-height:1rem}.__meta-data-selector-item .__item-actions{display:flex;gap:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$2.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: AXDropdownModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i3$1.AXTranslatorDirective, selector: "[translate]" }, { kind: "directive", type:
4143
+ // CDK DragDrop modules
4144
+ CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4145
+ }
4146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPMetaDataSelectorWidgetEditComponent, decorators: [{
4147
+ type: Component,
4148
+ args: [{ selector: 'axp-meta-data-selector-widget-edit', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
4149
+ CommonModule,
4150
+ AXButtonModule,
4151
+ AXDecoratorModule,
4152
+ AXDropdownModule,
4153
+ AXTranslationModule,
4154
+ // CDK DragDrop modules
4155
+ CdkDropList,
4156
+ CdkDrag,
4157
+ CdkDragHandle,
4158
+ ], template: "<div class=\"axp-meta-data-selector-widget-edit\" *translate=\"let t\">\n @if (!readonly()) {\n <div class=\"__header\">\n <ax-button class=\"ax-sm\" [text]=\"t('@data-management:actions.add-meta-data') | async\" [color]=\"'primary'\"\n (onClick)=\"handleAddClick()\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n }\n <div class=\"__content\">\n @if (metaItems().length === 0) {\n <div class=\"__empty-state\">\n <ax-icon class=\"__icon\" icon=\"fa-light fa-list-check\"></ax-icon>\n <p class=\"__message\">{{ t('@data-management:meta-data-selector.no-items-selected') | async }}</p>\n </div>\n } @else {\n <div class=\"__items-list\" cdkDropList (cdkDropListDropped)=\"handleDrop($event)\">\n @for (item of metaItems(); track item.id) {\n <div class=\"__meta-data-selector-item\" [class.__deleted]=\"item.status === 'deleted'\" cdkDrag>\n <div class=\"__drag-handle\" cdkDragHandle>\n <ax-icon icon=\"fa-light fa-grip-vertical\"></ax-icon>\n </div>\n\n <div class=\"__item-content\">\n <div class=\"__item-header\">\n <h4 class=\"__item-title\">{{ item.title }}</h4>\n @if (item.configuration.isRequired) {\n <span class=\"__required-badge\">{{ t('@data-management:meta-data-selector.required') | async }}</span>\n }\n </div>\n @if (item.configuration.placeholder) {\n <p class=\"__placeholder-text\">\n {{ t('@data-management:meta-data-selector.placeholder') | async }}:\n {{ item.configuration.placeholder }}\n </p>\n }\n </div>\n\n @if (!readonly()) {\n <div class=\"__item-actions\">\n @if (item.status === 'deleted') {\n <ax-button class=\"ax-sm\" [look]=\"'blank'\" color=\"warning\" (onClick)=\"handleItemRevert(item)\">\n <ax-icon class=\"fa-light fa-rotate-left\"></ax-icon>\n </ax-button>\n } @else {\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"accent3\" (onClick)=\"handleItemEdit(item)\">\n <ax-icon class=\"fa-light fa-pencil\"></ax-icon>\n </ax-button>\n\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"danger\" (onClick)=\"handleItemRemove(item)\">\n <ax-icon class=\"fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</div>", styles: [".axp-meta-data-selector-widget-edit .__header{display:flex;justify-content:flex-end;border-bottom-width:1px;padding:.5rem}.axp-meta-data-selector-widget-edit .__content{padding:.5rem}.axp-meta-data-selector-widget-edit .__content .__empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:2rem;padding-bottom:2rem;text-align:center}.axp-meta-data-selector-widget-edit .__content .__empty-state .__icon{margin-bottom:.75rem;font-size:1.875rem;line-height:2.25rem;opacity:.65}.axp-meta-data-selector-widget-edit .__content .__empty-state .__message{font-size:.875rem;line-height:1.25rem;opacity:.65}.axp-meta-data-selector-widget-edit .__content .__items-list>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.__meta-data-selector-item{display:flex;align-items:center;gap:.75rem;border-radius:.375rem;border-width:1px;padding:.75rem;cursor:move;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__meta-data-selector-item:hover{background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}.__meta-data-selector-item.__deleted{background-color:rgb(var(--ax-sys-color-danger-lightest-surface));color:rgb(var(--ax-sys-color-on-danger-lightest-surface));border-color:rgb(var(--ax-sys-color-border-danger-lightest-surface))}.__meta-data-selector-item .__drag-handle{display:flex;height:1.5rem;width:1.5rem;cursor:grab;align-items:center;justify-content:center}.__meta-data-selector-item .__drag-handle:active{cursor:grabbing}.__meta-data-selector-item .__item-content{flex:1 1 0%}.__meta-data-selector-item .__item-content .__item-header{margin-bottom:.25rem;display:flex;align-items:center;gap:.5rem}.__meta-data-selector-item .__item-content .__item-header .__item-title{font-size:.875rem;line-height:1.25rem;font-weight:500}.__meta-data-selector-item .__item-content .__item-header .__required-badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(154 52 18 / var(--tw-text-opacity, 1))}.__meta-data-selector-item .__item-content .__placeholder-text{font-size:.75rem;line-height:1rem}.__meta-data-selector-item .__item-actions{display:flex;gap:.25rem}\n"] }]
4159
+ }], propDecorators: { __class: [{
4160
+ type: HostBinding,
4161
+ args: ['class']
4162
+ }] } });
4163
+
4164
+ var metaDataSelectorEdit_component = /*#__PURE__*/Object.freeze({
4165
+ __proto__: null,
4166
+ AXPMetaDataSelectorWidgetEditComponent: AXPMetaDataSelectorWidgetEditComponent
4167
+ });
4168
+
4169
+ class AXPMetaDataSelectorWidgetViewComponent extends AXPValueWidgetComponent {
4170
+ /**
4171
+ * Returns a comma-separated list of selected meta titles.
4172
+ * Extracting this logic into a getter keeps the template simple and
4173
+ * avoids using arrow functions, which are not allowed in Angular
4174
+ * interpolation expressions.
4175
+ */
4176
+ get display() {
4177
+ const val = this.getValue();
4178
+ return Array.isArray(val) ? val.map((v) => v.title || v.text).join(', ') : '';
4179
+ }
4180
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPMetaDataSelectorWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
4181
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.8", type: AXPMetaDataSelectorWidgetViewComponent, isStandalone: true, selector: "axp-meta-data-selector-widget-view", usesInheritance: true, ngImport: i0, template: `<span>{{ display }}</span>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXDecoratorModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4182
+ }
4183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPMetaDataSelectorWidgetViewComponent, decorators: [{
4184
+ type: Component,
4185
+ args: [{
4186
+ selector: 'axp-meta-data-selector-widget-view',
4187
+ template: `<span>{{ display }}</span>`,
4188
+ changeDetection: ChangeDetectionStrategy.OnPush,
4189
+ imports: [AXDecoratorModule],
4190
+ }]
4191
+ }] });
4192
+
4193
+ var metaDataSelectorView_component = /*#__PURE__*/Object.freeze({
4194
+ __proto__: null,
4195
+ AXPMetaDataSelectorWidgetViewComponent: AXPMetaDataSelectorWidgetViewComponent
4196
+ });
4197
+
4198
+ /**
4199
+ * meta-data-selector plugin
4200
+ * Notes:
4201
+ * - Always ensures a 'meta-data' group and single-view section
4202
+ * - Always ensures the property exists if missing
4203
+ * - Uses provided configuration options; others are fixed
4204
+ */
4205
+ const metaDataSelectorPlugin = {
4206
+ name: 'meta-data-selector',
4207
+ order: 60,
4208
+ apply: (ctx, options) => {
4209
+ const opts = options ?? {};
4210
+ const field = opts.field && opts.field.trim().length > 0 ? opts.field : 'metaData';
4211
+ const displayTitle = opts.title && opts.title.trim().length > 0 ? opts.title : 'Meta Data';
4212
+ // Ensure group and section ids (unique per field)
4213
+ const sectionId = `meta-data-${field}`;
4214
+ const groupIdForProperty = `meta-data-${field}`;
4215
+ const existingGroups = ctx.groups.list() ?? [];
4216
+ if (!existingGroups.some((g) => g.id === groupIdForProperty)) {
4217
+ ctx.groups.add({ id: groupIdForProperty, title: displayTitle });
4218
+ }
4219
+ // Ensure property exists (using meta-data-selector-editor interface)
4220
+ const props = ctx.properties.list();
4221
+ if (!props.some((p) => p.name === field)) {
4222
+ ctx.properties.add({
4223
+ name: field,
4224
+ title: displayTitle,
4225
+ groupId: groupIdForProperty,
4226
+ schema: {
4227
+ dataType: 'string',
4228
+ interface: {
4229
+ type: 'meta-data-selector-editor',
4230
+ options: {
4231
+ allowMultiple: opts.allowMultiple ?? true,
4232
+ showRequired: opts.showRequired ?? true,
4233
+ showPlaceholder: opts.showPlaceholder ?? true,
4234
+ defaultConfiguration: opts.defaultConfiguration ?? {
4235
+ isRequired: false,
4236
+ placeholder: ''
4237
+ },
4238
+ },
4239
+ },
4240
+ },
4241
+ validations: [
4242
+ {
4243
+ rule: 'required',
4244
+ },
4245
+ ],
4246
+ });
4247
+ }
4248
+ // Ensure column exists
4249
+ const cols = ctx.columns.list() ?? [];
4250
+ if (!cols?.some((c) => c.name === field)) {
4251
+ ctx.columns.add({ name: field });
4252
+ }
4253
+ // Ensure single view section and property layout exists
4254
+ const sectionOrder = 9;
4255
+ const colSpan = 12;
4256
+ ctx.interfaces.master.single.update((single) => {
4257
+ const next = single ?? { title: ctx.entity.title, sections: [], properties: [] };
4258
+ next.sections = next.sections ?? [];
4259
+ if (!next.sections.some((s) => s.id === sectionId)) {
4260
+ next.sections.push({ id: sectionId, title: displayTitle, order: 200 });
4261
+ }
4262
+ next.properties = next.properties ?? [];
4263
+ if (!next.properties.some((p) => p.name === field)) {
4264
+ next.properties.push({
4265
+ name: field,
4266
+ layout: {
4267
+ label: { visible: false },
4268
+ positions: { lg: { colSpan, order: sectionOrder } },
4269
+ },
4270
+ });
4271
+ }
4272
+ return next;
4273
+ });
4274
+ // Ensure create view includes the section and property layout
4275
+ ctx.interfaces.master.create.update((create) => {
4276
+ const next = create ?? { sections: [], properties: [] };
4277
+ next.sections = next.sections ?? [];
4278
+ if (!next.sections.some((s) => s.id === sectionId)) {
4279
+ next.sections.push({ id: sectionId, title: displayTitle });
4280
+ }
4281
+ next.properties = next.properties ?? [];
4282
+ if (!next.properties.some((p) => p.name === field)) {
4283
+ next.properties.push({
4284
+ name: field,
4285
+ layout: {
4286
+ label: { visible: false },
4287
+ positions: { lg: { colSpan, order: 7 } },
4288
+ },
4289
+ });
4290
+ }
4291
+ return next;
4292
+ });
4293
+ // Ensure update view includes the section and property layout
4294
+ ctx.interfaces.master.modify.update((modify) => {
4295
+ const next = modify ?? { sections: [], properties: [] };
4296
+ next.sections = next.sections ?? [];
4297
+ if (!next.sections.some((s) => s.id === sectionId)) {
4298
+ next.sections.push({ id: sectionId, title: displayTitle });
4299
+ }
4300
+ next.properties = next.properties ?? [];
4301
+ if (!next.properties.some((p) => p.name === field)) {
4302
+ next.properties.push({
4303
+ name: field,
4304
+ layout: {
4305
+ label: { visible: false },
4306
+ positions: { lg: { colSpan, order: 7 } },
4307
+ },
4308
+ });
4309
+ }
4310
+ return next;
4311
+ });
4312
+ // Ensure list action to open meta data selector popup exists
4313
+ ensureListActions(ctx);
4314
+ ctx.interfaces.update((i) => {
4315
+ const actions = i.master.list.actions;
4316
+ const cmdName = 'show-meta-data-selector-popup';
4317
+ const actionName = `meta-data-${field}`;
4318
+ if (!actionExists(actions, cmdName, actionName)) {
4319
+ actions.push({
4320
+ name: actionName,
4321
+ title: opts.titleKey ?? opts.label ?? '@data-management:actions.configure-meta-data',
4322
+ command: {
4323
+ name: cmdName,
4324
+ options: {
4325
+ id: '{{ context.eval("id") }}',
4326
+ metaData: `{{ context.eval("${field}") }}`,
4327
+ allowMultiple: opts.allowMultiple ?? true,
4328
+ showRequired: opts.showRequired ?? true,
4329
+ showPlaceholder: opts.showPlaceholder ?? true,
4330
+ key: field,
4331
+ defaultConfiguration: opts.defaultConfiguration ?? {
4332
+ isRequired: false,
4333
+ placeholder: ''
4334
+ },
4335
+ },
4336
+ },
4337
+ priority: 'secondary',
4338
+ type: 'configure',
4339
+ scope: AXPEntityCommandScope.Individual,
4340
+ });
4341
+ }
4342
+ return i;
4343
+ });
4344
+ // Stamp normalized config for middleware
4345
+ ctx.entity.extensions ??= {};
4346
+ ctx.entity.extensions.metaDataSelector ??= {};
4347
+ ctx.entity.extensions.metaDataSelector[field] = {
4348
+ title: displayTitle,
4349
+ allowMultiple: opts.allowMultiple ?? true,
4350
+ showRequired: opts.showRequired ?? true,
4351
+ showPlaceholder: opts.showPlaceholder ?? true,
4352
+ defaultConfiguration: opts.defaultConfiguration ?? {
4353
+ isRequired: false,
4354
+ placeholder: ''
4355
+ }
4356
+ };
4357
+ },
4358
+ };
4359
+
4360
+ const AXPMetaDataFormWidget = {
4361
+ name: 'meta-data-form-editor',
4362
+ title: '@data-management:widgets.meta-data-form.title',
4363
+ categories: AXP_WIDGETS_EDITOR_CATEGORY,
4364
+ groups: [AXPWidgetGroupEnum.EntityWidget],
4365
+ description: '@data-management:widgets.meta-data-form.description',
4366
+ icon: 'fa-light fa-list-check',
4367
+ defaultFilterWidgetName: 'string-filter',
4368
+ type: 'editor',
4369
+ options: {
4370
+ needLabel: false,
4371
+ },
4372
+ properties: [
4373
+ AXP_NAME_PROPERTY,
4374
+ AXP_DATA_PATH_PROPERTY,
4375
+ AXP_READONLY_PROPERTY,
4376
+ AXP_DISABLED_PROPERTY,
4377
+ ],
4378
+ components: {
4379
+ view: {
4380
+ component: () => Promise.resolve().then(function () { return metaDataFormEdit_component; }).then((c) => c.AXPMetaDataFormWidgetEditComponent),
4381
+ },
4382
+ edit: {
4383
+ component: () => Promise.resolve().then(function () { return metaDataFormEdit_component; }).then((c) => c.AXPMetaDataFormWidgetEditComponent),
4384
+ },
4385
+ print: {
4386
+ component: () => Promise.resolve().then(function () { return metaDataFormEdit_component; }).then((c) => c.AXPMetaDataFormWidgetEditComponent),
4387
+ },
4388
+ },
4389
+ };
4390
+
4391
+ class AXPMetaDataFormWidgetEditComponent extends AXPValueWidgetComponent {
4392
+ constructor() {
4393
+ super(...arguments);
4394
+ //#region ---- Inputs ----
4395
+ /**
4396
+ * Array of metadata definitions to render as form fields
4397
+ */
4398
+ this.definitions = computed(() => this.options()['definitions'] ?? [], ...(ngDevMode ? [{ debugName: "definitions" }] : []));
4399
+ /**
4400
+ * Form layout appearance (normal, compact, borderless)
4401
+ */
4402
+ this.layoutLook = input('borderless', ...(ngDevMode ? [{ debugName: "layoutLook" }] : []));
4403
+ /**
4404
+ * Form layout direction (vertical, horizontal, grid)
4405
+ */
4406
+ this.layoutDirection = input('vertical', ...(ngDevMode ? [{ debugName: "layoutDirection" }] : []));
4407
+ /**
4408
+ * Whether to group fields by category
4409
+ */
4410
+ this.groupByCategory = input(false, ...(ngDevMode ? [{ debugName: "groupByCategory" }] : []));
4411
+ /**
4412
+ * Whether to show category headers
4413
+ */
4414
+ this.showCategoryHeaders = input(false, ...(ngDevMode ? [{ debugName: "showCategoryHeaders" }] : []));
4415
+ //#endregion
4416
+ //#region ---- Outputs ----
4417
+ /**
4418
+ * Emitted when form context changes
4419
+ */
4420
+ this.contextChange = output();
4421
+ /**
4422
+ * Emitted when form validity changes
4423
+ */
4424
+ this.validityChange = output();
4425
+ //#endregion
4426
+ //#region ---- Properties ----
4427
+ this.dynamicForm = viewChild(AXPDynamicFormComponent, ...(ngDevMode ? [{ debugName: "dynamicForm" }] : []));
4428
+ //#endregion
4429
+ //#region ---- Properties ----
4430
+ /**
4431
+ * Form definition signal that only updates when structure actually changes
4432
+ */
4433
+ this.formDefinition = signal({ groups: [] }, ...(ngDevMode ? [{ debugName: "formDefinition" }] : []));
4434
+ }
4435
+ //#endregion
4436
+ //#endregion
4437
+ //#region ---- Lifecycle Methods ----
4438
+ ngOnInit() {
4439
+ super.ngOnInit();
4440
+ this.initializeFormDefinition();
4441
+ }
4442
+ //#endregion
4443
+ //#region ---- Event Handlers ----
4444
+ /**
4445
+ * Handle context change from dynamic form
4446
+ */
4447
+ onContextChange(context) {
4448
+ this.contextChange.emit(context);
4449
+ this.setValue(context);
4450
+ }
4451
+ /**
4452
+ * Handle validity change from dynamic form
4453
+ */
4454
+ onValidityChange(isValid) {
4455
+ this.validityChange.emit(isValid);
4456
+ }
4457
+ //#endregion
4458
+ //#region ---- Private Methods ----
4459
+ /**
4460
+ * Initialize form definition based on current inputs
4461
+ */
4462
+ initializeFormDefinition() {
4463
+ const metadataDefinitions = this.definitions();
4464
+ const groupByCategory = this.groupByCategory();
4465
+ const showCategoryHeaders = this.showCategoryHeaders();
4466
+ console.log('metadataDefinitions', metadataDefinitions);
4467
+ let newFormDefinition;
4468
+ if (groupByCategory) {
4469
+ newFormDefinition = this.convertMetadataToGroupedFormDefinition(metadataDefinitions, showCategoryHeaders);
4470
+ }
4471
+ else {
4472
+ newFormDefinition = this.convertMetadataToFlatFormDefinition(metadataDefinitions);
4473
+ }
4474
+ this.formDefinition.set(newFormDefinition);
4475
+ }
4476
+ /**
4477
+ * Convert metadata definitions to grouped form definition
4478
+ */
4479
+ convertMetadataToGroupedFormDefinition(metadataDefinitions, showCategoryHeaders) {
4480
+ const groups = [];
4481
+ const categoryGroups = this.groupMetadataByCategory(metadataDefinitions);
4482
+ for (const [categoryTitle, metadataItems] of categoryGroups) {
4483
+ const parameters = metadataItems.map(item => this.convertMetadataToFieldDefinition(item));
4484
+ groups.push({
4485
+ name: this.sanitizeGroupName(categoryTitle),
4486
+ title: showCategoryHeaders ? categoryTitle : undefined,
4487
+ parameters
4488
+ });
4489
+ }
4490
+ return { groups };
4491
+ }
4492
+ /**
4493
+ * Convert metadata definitions to flat form definition (single group)
4494
+ */
4495
+ convertMetadataToFlatFormDefinition(metadataDefinitions) {
4496
+ const parameters = metadataDefinitions.map(item => this.convertMetadataToFieldDefinition(item));
4497
+ return {
4498
+ groups: [{
4499
+ name: 'metadata-fields',
4500
+ title: undefined,
4501
+ parameters
4502
+ }]
4503
+ };
4504
+ }
4505
+ /**
4506
+ * Group metadata definitions by category
4507
+ */
4508
+ groupMetadataByCategory(metadataDefinitions) {
4509
+ const categoryGroups = new Map();
4510
+ for (const metadata of metadataDefinitions) {
4511
+ // For now, put all metadata in "General" group since categories might not be available
4512
+ const generalGroup = categoryGroups.get('General') || [];
4513
+ generalGroup.push(metadata);
4514
+ categoryGroups.set('General', generalGroup);
4515
+ }
4516
+ return categoryGroups;
4517
+ }
4518
+ /**
4519
+ * Convert single metadata definition to field definition
4520
+ */
4521
+ convertMetadataToFieldDefinition(metadata) {
4522
+ const interfaceConfig = this.parseInterfaceConfig(metadata.interface);
4523
+ return {
4524
+ path: metadata.name,
4525
+ title: metadata.title,
4526
+ description: undefined, // metadata.description not available in current interface
4527
+ widget: {
4528
+ type: interfaceConfig.type || 'text-editor',
4529
+ path: metadata.name,
4530
+ options: {
4531
+ ...interfaceConfig.options,
4532
+ defaultValue: metadata.defaultValue,
4533
+ validations: this.parseValidations(metadata.interface)
4534
+ }
4535
+ }
4536
+ };
4537
+ }
4538
+ /**
4539
+ * Parse interface configuration from metadata
4540
+ */
4541
+ parseInterfaceConfig(interfaceValue) {
4542
+ if (typeof interfaceValue === 'string') {
4543
+ try {
4544
+ return JSON.parse(interfaceValue || '{}');
4545
+ }
4546
+ catch (error) {
4547
+ console.warn('Failed to parse interface config:', interfaceValue, error);
4548
+ return {};
4549
+ }
4550
+ }
4551
+ return interfaceValue || {};
4552
+ }
4553
+ /**
4554
+ * Parse validations from interface configuration
4555
+ */
4556
+ parseValidations(interfaceValue) {
4557
+ const config = this.parseInterfaceConfig(interfaceValue);
4558
+ return config.options?.validations || [];
4559
+ }
4560
+ /**
4561
+ * Sanitize group name for use as identifier
4562
+ */
4563
+ sanitizeGroupName(name) {
4564
+ return name.toLowerCase().replace(/[^a-z0-9]/g, '-');
4565
+ }
4566
+ //#endregion
4567
+ //#region ---- Public Methods ----
4568
+ /**
4569
+ * Get the dynamic form component instance
4570
+ */
4571
+ getDynamicForm() {
4572
+ return this.dynamicForm();
4573
+ }
4574
+ /**
4575
+ * Validate the form
4576
+ */
4577
+ async validate() {
4578
+ const form = this.dynamicForm();
4579
+ if (form) {
4580
+ return await form.validate();
4581
+ }
4582
+ return false;
4583
+ }
4584
+ /**
4585
+ * Get current form context
4586
+ */
4587
+ getContext() {
4588
+ const form = this.dynamicForm();
4589
+ return form ? form.getContext() : {};
4590
+ }
4591
+ /**
4592
+ * Update form context programmatically
4593
+ */
4594
+ updateContext(context) {
4595
+ console.log('updateContext', context);
4596
+ const form = this.dynamicForm();
4597
+ if (form) {
4598
+ form.updateContext(context);
4599
+ }
4600
+ }
4601
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPMetaDataFormWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
4602
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.8", type: AXPMetaDataFormWidgetEditComponent, isStandalone: true, selector: "axp-meta-data-form-widget-edit", inputs: { layoutLook: { classPropertyName: "layoutLook", publicName: "layoutLook", isSignal: true, isRequired: false, transformFunction: null }, layoutDirection: { classPropertyName: "layoutDirection", publicName: "layoutDirection", isSignal: true, isRequired: false, transformFunction: null }, groupByCategory: { classPropertyName: "groupByCategory", publicName: "groupByCategory", isSignal: true, isRequired: false, transformFunction: null }, showCategoryHeaders: { classPropertyName: "showCategoryHeaders", publicName: "showCategoryHeaders", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contextChange: "contextChange", validityChange: "validityChange" }, viewQueries: [{ propertyName: "dynamicForm", first: true, predicate: AXPDynamicFormComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
4603
+ <axp-dynamic-form
4604
+ [formDefinition]="formDefinition()"
4605
+ [context]="getValue()"
4606
+ [layoutLook]="layoutLook()"
4607
+ [layoutDirection]="layoutDirection()"
4608
+ (contextChange)="onContextChange($event)"
4609
+ (validityChange)="onValidityChange($event)">
4610
+ </axp-dynamic-form>
4611
+ `, isInline: true, dependencies: [{ kind: "component", type: AXPDynamicFormComponent, selector: "axp-dynamic-form", inputs: ["formDefinition", "context", "layoutLook", "layoutDirection", "layoutConfig"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4612
+ }
4613
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXPMetaDataFormWidgetEditComponent, decorators: [{
4614
+ type: Component,
4615
+ args: [{
4616
+ selector: 'axp-meta-data-form-widget-edit',
4617
+ template: `
4618
+ <axp-dynamic-form
4619
+ [formDefinition]="formDefinition()"
4620
+ [context]="getValue()"
4621
+ [layoutLook]="layoutLook()"
4622
+ [layoutDirection]="layoutDirection()"
4623
+ (contextChange)="onContextChange($event)"
4624
+ (validityChange)="onValidityChange($event)">
4625
+ </axp-dynamic-form>
4626
+ `,
4627
+ changeDetection: ChangeDetectionStrategy.OnPush,
4628
+ imports: [AXPDynamicFormComponent, AXFormModule, AXLabelModule, AXPLayoutBuilderModule],
4629
+ }]
4630
+ }] });
4631
+
4632
+ var metaDataFormEdit_component = /*#__PURE__*/Object.freeze({
4633
+ __proto__: null,
4634
+ AXPMetaDataFormWidgetEditComponent: AXPMetaDataFormWidgetEditComponent
4635
+ });
4636
+
4637
+ /**
4638
+ * meta-data-form plugin
4639
+ * Notes:
4640
+ * - Always ensures a 'meta-data-form' group and single-view section
4641
+ * - Always ensures the property exists if missing
4642
+ * - Uses provided configuration options; others are fixed
4643
+ * - Requires path option to read meta-data form definition
4644
+ * - field defaults to 'metaDataForm', title defaults to 'Meta Data Form'
4645
+ */
4646
+ const metaDataFormPlugin = {
4647
+ name: 'meta-data-form',
4648
+ order: 60,
4649
+ apply: (ctx, options) => {
4650
+ if (!options?.path || options.path.trim().length === 0) {
4651
+ throw new Error('meta-data-form plugin requires a path option to read meta-data form definition');
4652
+ }
4653
+ const field = options.field ?? 'metaDataForm';
4654
+ const displayTitle = options.title ?? 'Meta Data Form';
4655
+ // Ensure group and section ids (unique per field)
4656
+ const sectionId = `meta-data-form-${field}`;
4657
+ const groupIdForProperty = `meta-data-form-${field}`;
4658
+ const existingGroups = ctx.groups.list() ?? [];
4659
+ if (!existingGroups.some((g) => g.id === groupIdForProperty)) {
4660
+ ctx.groups.add({ id: groupIdForProperty, title: displayTitle });
4661
+ }
4662
+ // Ensure property exists (using meta-data-form-editor interface)
4663
+ const props = ctx.properties.list();
4664
+ if (!props.some((p) => p.name === field)) {
4665
+ ctx.properties.add({
4666
+ name: field,
4667
+ title: displayTitle,
4668
+ groupId: groupIdForProperty,
4669
+ schema: {
4670
+ dataType: 'string',
4671
+ interface: {
4672
+ type: 'meta-data-form-editor',
4673
+ options: {
4674
+ definitions: `{{ metadata.getByCategoryIds("${ctx.entity.module}.${ctx.entity.name}",context.eval('${options.path}')) }}`,
4675
+ },
4676
+ },
4677
+ },
4678
+ });
4679
+ }
4680
+ // Ensure column exists
4681
+ // const cols = ctx.columns.list() ?? [];
4682
+ // if (!cols?.some((c: any) => c.name === field)) {
4683
+ // ctx.columns.add({ name: field } as any);
4684
+ // }
4685
+ // Ensure single view section and property layout exists
4686
+ const sectionOrder = 9;
4687
+ const colSpan = 12;
4688
+ ctx.interfaces.master.single.update((single) => {
4689
+ const next = single ?? { title: ctx.entity.title, sections: [], properties: [] };
4690
+ next.sections = next.sections ?? [];
4691
+ if (!next.sections.some((s) => s.id === sectionId)) {
4692
+ next.sections.push({ id: sectionId, title: displayTitle, order: 200 });
4693
+ }
4694
+ next.properties = next.properties ?? [];
4695
+ if (!next.properties.some((p) => p.name === field)) {
4696
+ next.properties.push({
4697
+ name: field,
4698
+ layout: {
4699
+ label: { visible: false },
4700
+ positions: { lg: { colSpan, order: sectionOrder } },
4701
+ },
4702
+ });
4703
+ }
4704
+ return next;
4705
+ });
4706
+ // Ensure create view includes the section and property layout
4707
+ ctx.interfaces.master.create.update((create) => {
4708
+ const next = create ?? { sections: [], properties: [] };
4709
+ next.sections = next.sections ?? [];
4710
+ if (!next.sections.some((s) => s.id === sectionId)) {
4711
+ next.sections.push({ id: sectionId, title: displayTitle });
4712
+ }
4713
+ next.properties = next.properties ?? [];
4714
+ if (!next.properties.some((p) => p.name === field)) {
4715
+ next.properties.push({
4716
+ name: field,
4717
+ layout: {
4718
+ label: { visible: false },
4719
+ positions: { lg: { colSpan, order: 7 } },
4720
+ },
4721
+ });
4722
+ }
4723
+ return next;
4724
+ });
4725
+ // Ensure update view includes the section and property layout
4726
+ ctx.interfaces.master.modify.update((modify) => {
4727
+ const next = modify ?? { sections: [], properties: [] };
4728
+ next.sections = next.sections ?? [];
4729
+ if (!next.sections.some((s) => s.id === sectionId)) {
4730
+ next.sections.push({ id: sectionId, title: displayTitle });
4731
+ }
4732
+ next.properties = next.properties ?? [];
4733
+ if (!next.properties.some((p) => p.name === field)) {
4734
+ next.properties.push({
4735
+ name: field,
4736
+ layout: {
4737
+ label: { visible: false },
4738
+ positions: { lg: { colSpan, order: 7 } },
4739
+ },
4740
+ });
4741
+ }
4742
+ return next;
4743
+ });
4744
+ // Stamp normalized config for middleware
4745
+ ctx.entity.extensions ??= {};
4746
+ ctx.entity.extensions.metaDataForm ??= {};
4747
+ ctx.entity.extensions.metaDataForm[field] = {
4748
+ title: displayTitle,
4749
+ path: options.path,
4750
+ };
4751
+ },
4752
+ };
4753
+
4754
+ class AXMMetaDataFeatureModule {
4755
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMMetaDataFeatureModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4756
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.8", ngImport: i0, type: AXMMetaDataFeatureModule, imports: [i4.AXPLayoutBuilderModule] }); }
4757
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMMetaDataFeatureModule, providers: [
4758
+ { provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: metaDataSelectorPlugin },
4759
+ { provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: metaDataFormPlugin },
4760
+ ], imports: [AXPLayoutBuilderModule.forChild({
4761
+ widgets: [AXPMetaDataSelectorWidget, AXPMetaDataFormWidget],
4762
+ })] }); }
4763
+ }
4764
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMMetaDataFeatureModule, decorators: [{
4765
+ type: NgModule,
4766
+ args: [{
4767
+ imports: [
4768
+ AXPLayoutBuilderModule.forChild({
4769
+ widgets: [AXPMetaDataSelectorWidget, AXPMetaDataFormWidget],
4770
+ }),
4771
+ ],
4772
+ exports: [],
4773
+ declarations: [],
4774
+ providers: [
4775
+ { provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: metaDataSelectorPlugin },
4776
+ { provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: metaDataFormPlugin },
4777
+ ],
4778
+ }]
4779
+ }] });
4780
+
3878
4781
  class AXMDataManagementModule {
3879
4782
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMDataManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3880
4783
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.8", ngImport: i0, type: AXMDataManagementModule, imports: [i4.AXPLayoutBuilderModule,
3881
4784
  // Entity Modules
3882
4785
  AXMQueryEntityModule,
3883
4786
  AXMDataSourceEntityModule,
3884
- AXMMetaDataDefinitionEntityModule] }); }
4787
+ AXMMetaDataDefinitionEntityModule,
4788
+ AXMMetaDataFeatureModule] }); }
3885
4789
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMDataManagementModule, providers: [
3886
4790
  {
3887
4791
  provide: AXP_MENU_PROVIDER,
@@ -3913,13 +4817,19 @@ class AXMDataManagementModule {
3913
4817
  useClass: AXMDataSourceListDataSourceDefinition,
3914
4818
  multi: true,
3915
4819
  },
4820
+ {
4821
+ provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,
4822
+ useClass: AXMMetadataEvaluatorScopeProvider,
4823
+ multi: true,
4824
+ },
3916
4825
  ], imports: [AXPLayoutBuilderModule.forChild({
3917
4826
  widgets: [AXPQueryBuilderWidget, AXMColumnFilterSelectorWidget],
3918
4827
  }),
3919
4828
  // Entity Modules
3920
4829
  AXMQueryEntityModule,
3921
4830
  AXMDataSourceEntityModule,
3922
- AXMMetaDataDefinitionEntityModule] }); }
4831
+ AXMMetaDataDefinitionEntityModule,
4832
+ AXMMetaDataFeatureModule] }); }
3923
4833
  }
3924
4834
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXMDataManagementModule, decorators: [{
3925
4835
  type: NgModule,
@@ -3932,6 +4842,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
3932
4842
  AXMQueryEntityModule,
3933
4843
  AXMDataSourceEntityModule,
3934
4844
  AXMMetaDataDefinitionEntityModule,
4845
+ AXMMetaDataFeatureModule
3935
4846
  ],
3936
4847
  exports: [],
3937
4848
  declarations: [],
@@ -3966,6 +4877,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
3966
4877
  useClass: AXMDataSourceListDataSourceDefinition,
3967
4878
  multi: true,
3968
4879
  },
4880
+ {
4881
+ provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,
4882
+ useClass: AXMMetadataEvaluatorScopeProvider,
4883
+ multi: true,
4884
+ },
3969
4885
  ]
3970
4886
  }]
3971
4887
  }] });
@@ -3974,5 +4890,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
3974
4890
  * Generated bundle index. Do not edit.
3975
4891
  */
3976
4892
 
3977
- export { AXMColumnFilterSelectorWidget, AXMColumnFilterSelectorWidgetColumnComponent, AXMColumnFilterSelectorWidgetEditComponent, AXMColumnFilterSelectorWidgetFilterComponent, AXMColumnFilterSelectorWidgetPrintComponent, AXMColumnFilterSelectorWidgetViewComponent, AXMDataManagementModule, AXMDataSourceEntityModule, AXMDataSourceOutputType, AXMDataSourceService, AXMDataSourceServiceImpl, AXMDataSourceType, AXMEntityProvider, AXMMenuProvider, AXMMetaDataDefinitionEntityModule, AXMMetaDataDefinitionService, AXMPMetaDataDefinitionServiceImpl, AXMQueryEntityModule, AXMQueryService, AXMQueryServiceImpl, AXMSearchCommandProvider, AXMSettingProvider, AXM_COLUMN_DEF_WIDGET, AXM_FILTER_DEF_WIDGET, AXPQueryBuilderWidget, AXPQueryBuilderWidgetColumnComponent, AXPQueryBuilderWidgetDesignerComponent, AXPQueryBuilderWidgetEditComponent, AXPQueryBuilderWidgetViewComponent, RootConfig, dataSourceEntityFactory, metaDataDefinitionFactory, queryFactory };
4893
+ export { AXMColumnFilterSelectorWidget, AXMColumnFilterSelectorWidgetColumnComponent, AXMColumnFilterSelectorWidgetEditComponent, AXMColumnFilterSelectorWidgetFilterComponent, AXMColumnFilterSelectorWidgetPrintComponent, AXMColumnFilterSelectorWidgetViewComponent, AXMDataManagementModule, AXMDataSourceEntityModule, AXMDataSourceOutputType, AXMDataSourceService, AXMDataSourceServiceImpl, AXMDataSourceType, AXMEntityProvider, AXMMenuProvider, AXMMetaDataDefinitionEntityModule, AXMMetaDataDefinitionService, AXMMetaDataFeatureModule, AXMMetadataEvaluatorScopeProvider, AXMPMetaDataDefinitionServiceImpl, AXMQueryEntityModule, AXMQueryService, AXMQueryServiceImpl, AXMSearchCommandProvider, AXMSettingProvider, AXM_COLUMN_DEF_WIDGET, AXM_FILTER_DEF_WIDGET, AXPQueryBuilderWidget, AXPQueryBuilderWidgetColumnComponent, AXPQueryBuilderWidgetDesignerComponent, AXPQueryBuilderWidgetEditComponent, AXPQueryBuilderWidgetViewComponent, RootConfig, dataSourceEntityFactory, metaDataDefinitionFactory, queryFactory };
3978
4894
  //# sourceMappingURL=acorex-modules-data-management.mjs.map