@acorex/platform 21.0.0-next.3 → 21.0.0-next.34

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 (117) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +295 -45
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-common-common-settings.provider-zhqNP3xb.mjs → acorex-platform-common-common-settings.provider-G9XcXXOG.mjs} +60 -4
  4. package/fesm2022/acorex-platform-common-common-settings.provider-G9XcXXOG.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +960 -319
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1352 -832
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +554 -826
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +530 -154
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs +121 -0
  14. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-components.mjs +5969 -2347
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +169 -154
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity.mjs +15380 -9274
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +393 -110
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +511 -450
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs → acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs} +10 -10
  26. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
  27. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs → acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs} +39 -16
  28. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
  30. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
  32. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGQqY5Mw.mjs +111 -0
  34. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGQqY5Mw.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs} +6 -6
  36. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs} +5 -5
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs} +6 -6
  40. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-layout-widgets.mjs +7865 -4026
  42. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  43. package/fesm2022/acorex-platform-native.mjs +8 -7
  44. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-runtime.mjs +220 -169
  46. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cvvr4HnL.mjs +160 -0
  48. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cvvr4HnL.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-TYoLN1Jq.mjs +120 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-TYoLN1Jq.mjs.map +1 -0
  51. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-C2z5Lq9y.mjs} +18 -25
  52. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-C2z5Lq9y.mjs.map +1 -0
  53. package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
  54. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
  55. package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
  56. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  58. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default.mjs +1717 -66
  60. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  61. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
  62. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
  65. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +1 -1
  66. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-CHfrTtol.mjs} +11 -11
  67. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-CHfrTtol.mjs.map +1 -0
  68. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-BSmvnUVq.mjs} +9 -9
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BSmvnUVq.mjs.map +1 -0
  70. package/fesm2022/acorex-platform-themes-shared.mjs +563 -561
  71. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  72. package/fesm2022/acorex-platform-workflow.mjs +1735 -1750
  73. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  74. package/fesm2022/acorex-platform.mjs.map +1 -1
  75. package/package.json +31 -31
  76. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +247 -10
  77. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +492 -31
  78. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +606 -392
  79. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +719 -413
  80. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +128 -56
  81. package/types/acorex-platform-layout-components.d.ts +2927 -0
  82. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +9 -3
  83. package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +1133 -237
  84. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +90 -31
  85. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +206 -102
  86. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +942 -137
  87. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  88. package/{runtime/index.d.ts → types/acorex-platform-runtime.d.ts} +237 -74
  89. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +113 -5
  90. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +1 -1
  91. package/types/acorex-platform-workflow.d.ts +1806 -0
  92. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
  93. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
  94. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
  101. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs +0 -1542
  103. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
  105. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
  110. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
  115. package/layout/components/index.d.ts +0 -1669
  116. package/workflow/index.d.ts +0 -2443
  117. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -1,38 +1,20 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, EnvironmentProviders, Type } from '@angular/core';
2
+ import { InjectionToken, Type, EnvironmentProviders } from '@angular/core';
3
+ import { AXPExpression, AXPMetaData, AXPDataType, AXPOptionsData, AXPValidationRules } from '@acorex/platform/core';
3
4
  import * as i1 from '@acorex/platform/runtime';
4
- import { AXPExpression, AXPValidationRules, AXPOptionsData, AXPMetaData } from '@acorex/platform/core';
5
5
 
6
+ /**
7
+ * Token for entity CRUD setup. Consumed by AXPDomainModule.
8
+ * The actual provider is provideEntity() from @acorex/platform/layout/entity
9
+ * to avoid circular dependency (domain must not depend on layout/entity).
10
+ */
6
11
  declare const AXP_ENTITY_CRUD_SETUP: InjectionToken<void>;
7
- declare function provideEntity(entityKeys: string[]): EnvironmentProviders;
8
12
 
9
- declare class AXPDomainModule {
10
- private _commandSetup;
11
- /**
12
- * Injection token for schema setup initialization.
13
- *
14
- * Used during application bootstrap to register global middleware
15
- * that applies to all schema resolutions. This enables centralized
16
- * schema processing logic.
17
- */
18
- private _schemaSetup;
19
- private _schemaMiddlewareSetup;
20
- private _schemaLoaderSetup;
21
- /**
22
- * Injection token for domain loader setup initialization.
23
- *
24
- * Used during application bootstrap to register domain loaders
25
- * that can provide domain definitions on-demand when they're not found in
26
- * the registry.
27
- */
28
- private _domainLoaderSetup;
29
- private _domainMiddlewareSetup;
30
- private _domainSetup;
31
- static ɵfac: i0.ɵɵFactoryDeclaration<AXPDomainModule, never>;
32
- static ɵmod: i0.ɵɵNgModuleDeclaration<AXPDomainModule, never, [typeof i1.AXPRuntimeModule], never>;
33
- static ɵinj: i0.ɵɵInjectorDeclaration<AXPDomainModule>;
13
+ declare enum AXPDomainActionSide {
14
+ Client = "client",
15
+ Server = "server",
16
+ Both = "both"
34
17
  }
35
-
36
18
  /**
37
19
  * Interface for defining actions
38
20
  */
@@ -48,31 +30,124 @@ declare enum AXPEntityCommandScope {
48
30
  Individual = "individual",
49
31
  Section = "section"
50
32
  }
33
+ interface AXPDomainRealtedModuleEntity {
34
+ moduleId?: string;
35
+ module?: {
36
+ id?: string;
37
+ name?: string;
38
+ title?: string;
39
+ };
40
+ entityId?: string;
41
+ entity?: {
42
+ id?: string;
43
+ name?: string;
44
+ title?: string;
45
+ };
46
+ }
51
47
 
52
- declare enum AXPEntityType {
53
- Entity = 0,
54
- AggregateRoot = 1,
55
- ValueObject = 2
48
+ /**
49
+ * Where the validation rule runs: client-side only, server-side only, or both.
50
+ */
51
+ type AXPValidationRunAt = 'client' | 'server' | 'both';
52
+ /**
53
+ * Validation rule definition (catalog model): metadata for available validation rules.
54
+ * Used in UI to list validation rules: name (rule key), title, description, and runAt.
55
+ * The actual rule usage on properties uses AXPValidationRule from @acorex/platform/core.
56
+ */
57
+ interface AXPValidationRuleDefinition extends AXPDomainRealtedModuleEntity {
58
+ rule: string;
59
+ title: string;
60
+ description?: string;
61
+ icon?: string;
62
+ /** Where the validation runs: client-side, server-side, or both. Default: 'client' */
63
+ runAt?: AXPValidationRunAt;
64
+ message?: string;
65
+ options?: AXPPropertyDefinition[];
56
66
  }
57
- interface AXPEntityDefinition {
67
+ interface AXPValidationRuleValue {
68
+ rule: string;
69
+ title?: string;
70
+ message?: string;
71
+ options?: AXPMetaData;
72
+ }
73
+
74
+ interface AXPPropertyFeatures {
75
+ searchable?: {
76
+ enabled: boolean;
77
+ fullText: boolean;
78
+ };
79
+ filterable?: {
80
+ enabled: boolean;
81
+ inline: boolean;
82
+ };
83
+ sortable?: {
84
+ enabled: boolean;
85
+ };
86
+ auditable?: {
87
+ enabled: boolean;
88
+ };
89
+ }
90
+ interface AXPPropertyDefinition {
58
91
  name: string;
59
92
  title: string;
60
- fields: AXPEntityFieldDefinition[];
61
- type: AXPEntityType;
93
+ description?: string;
94
+ icon?: string;
95
+ defaultValue?: unknown;
96
+ disabled?: boolean;
97
+ dataType?: AXPDataType;
98
+ interface: AXPInterfaceDefinitionValue;
99
+ validations?: AXPValidationRuleValue[];
100
+ features?: AXPPropertyFeatures;
101
+ metadata?: AXPMetaData;
62
102
  }
63
- interface AXPEntityFieldFeatures {
64
- nullable: boolean;
65
- readOnly: boolean;
103
+
104
+ /** Widget category for interface grouping (e.g. Editors, Layout, Action). */
105
+ interface AXPInterfaceCategory {
106
+ name: string;
107
+ title: string;
108
+ order?: number;
109
+ }
110
+ /** Widget interface definition stored in DB (display metadata + option definitions). Values are stored in schema. */
111
+ interface AXPInterfaceDefinition {
112
+ name: string;
113
+ title?: string;
114
+ description?: string;
115
+ icon?: string;
116
+ dataType?: AXPDataType;
117
+ /** Widget categories (e.g. Editors, Layout). */
118
+ categories?: AXPInterfaceCategory | AXPInterfaceCategory[];
119
+ /** Widget groups (e.g. form-element, entity-widget). */
120
+ groups?: string[];
121
+ /** Widget type: editor, view, filter, container, action, etc. */
122
+ type?: string;
123
+ /** Default filter widget name when used as filter (e.g. string-filter, number-filter). */
124
+ defaultFilterWidgetName?: string;
125
+ optionDefinitions?: AXPPropertyDefinition[];
66
126
  }
67
- interface AXPEntityFieldDefinition {
127
+ interface AXPInterfaceDefinitionValue {
128
+ name: string;
129
+ title: string;
130
+ options?: AXPOptionsData;
131
+ }
132
+
133
+ /**
134
+ * Plugin definition (catalog model): metadata for available plugins.
135
+ * Used in UI to list plugins: name, title, optional icon, description, and options schema.
136
+ */
137
+ interface AXPPluginDefinition extends AXPDomainRealtedModuleEntity {
68
138
  name: string;
69
139
  title: string;
70
140
  description?: string;
71
- validations?: AXPValidationRules;
72
- actions?: AXPDomainAction[];
73
- features?: AXPEntityFieldFeatures;
74
- defaultValue?: any;
75
- schema: string;
141
+ icon?: string;
142
+ options?: AXPPropertyDefinition[];
143
+ }
144
+ /**
145
+ * Plugin value in entity: name + optional options (key-value).
146
+ * Fills the definition when used on an entity.
147
+ */
148
+ interface AXPPluginDefinitionValue {
149
+ name: string;
150
+ options?: AXPMetaData;
76
151
  }
77
152
 
78
153
  declare enum AXPRelationshipKind {
@@ -86,188 +161,383 @@ declare enum AXPRelationshipCardinality {
86
161
  ManyToMany = 2
87
162
  }
88
163
  /**
89
- * Interface for defining relationships between aggregates
164
+ * Standalone relation definition with full source and target.
165
+ * Relations live in their own collection, independent of aggregates.
90
166
  */
91
- interface AXPAggregateRelationDefinition {
167
+ interface AXPRelationDefinition {
168
+ id?: string;
92
169
  type: AXPRelationshipCardinality;
93
170
  kind: AXPRelationshipKind;
94
- target: {
171
+ source: {
95
172
  aggregate: string;
96
173
  entity: string;
97
174
  key: string;
98
175
  };
99
- source: {
176
+ target: {
177
+ aggregate: string;
100
178
  entity: string;
101
179
  key: string;
102
180
  };
103
181
  isRequired: boolean;
104
182
  }
105
183
 
106
- type AXPAggregateEntityList = {
107
- [key: string]: () => Promise<AXPEntityDefinition>;
184
+ /**
185
+ * Discriminated JSON for `AXPMenuDefinitionRecord.command`.
186
+ * Modal navigation is omitted (Angular `Type` is not JSON-serializable).
187
+ */
188
+ type AXPMenuDefinitionStoredCommand = {
189
+ kind: 'navigate';
190
+ navigateType: 'router';
191
+ path: string;
192
+ extras?: Record<string, unknown>;
193
+ } | {
194
+ kind: 'execute';
195
+ name: string;
196
+ options?: Record<string, unknown>;
108
197
  };
109
- interface AXPAggregateDefinition {
198
+ /**
199
+ * Optional reference to an entity list route: resolved at runtime via `AXPEntityService.createPath`.
200
+ */
201
+ interface AXPMenuDefinitionEntityListRef {
202
+ module: string;
203
+ entity: string;
204
+ }
205
+ /**
206
+ * Serializable menu definition for definition stores (Dexie/Firestore in mock today).
207
+ * Mirrors persisted shape for `AXPEntityDefinitionCrudService` menu APIs — not identical to shell `AXPMenuItem`.
208
+ */
209
+ interface AXPMenuDefinitionRecord {
210
+ /** Same as `AXPMenuItem.name` (unique key). */
110
211
  name: string;
111
- title: string;
112
- entities: AXPEntityDefinition[] | AXPAggregateEntityList | Record<string, string>;
113
- relations: AXPAggregateRelationDefinition[];
114
- validations: AXPValidationRules;
115
- actions: AXPDomainAction[];
212
+ text: string;
213
+ description?: string;
214
+ icon?: string;
215
+ priority?: number;
216
+ type?: 'menu' | 'group' | 'break';
217
+ /**
218
+ * Parent menu `name` for `context.find(attachParentName).addItems(...)`.
219
+ * Empty omits attachment (provider may add to root — see implementation).
220
+ */
221
+ attachParentName?: string;
222
+ /** Literal router path; if both this and `entityListRef` are set, implementations may prefer this. */
223
+ path?: string;
224
+ entityListRef?: AXPMenuDefinitionEntityListRef;
225
+ policyFeatures?: string[];
226
+ policyPermissions?: string[];
227
+ badgeKey?: string;
228
+ command?: AXPMenuDefinitionStoredCommand;
229
+ /**
230
+ * Optional module classification (references `PlatformManagement.ModuleDefinitions` when using the category plugin).
231
+ */
232
+ categoryIds?: string[];
233
+ /** Denormalized labels for list/display (mirrors product category pattern). */
234
+ categories?: Array<{
235
+ id: string;
236
+ title?: string;
237
+ }>;
238
+ meta?: Record<string, unknown>;
116
239
  }
117
240
 
118
- interface AXPModuleDefinition {
241
+ /**
242
+ * One level of child permissions under a root permission (fluent `addChild` only).
243
+ * Nested `children` under leaves are not part of the storage contract.
244
+ */
245
+ interface AXPPermissionLeafRecord {
119
246
  name: string;
120
247
  title: string;
121
- aggregates: AXPAggregateDefinition[];
248
+ description?: string;
249
+ requiredFeatures?: string[];
122
250
  }
123
-
124
- type AXPSchemaDataType = 'string' | 'number' | 'boolean' | 'date' | 'object' | 'array' | 'blob';
125
- interface AXPSchemaInterface {
126
- widget: string;
127
- options?: AXPOptionsData;
128
- disabled?: boolean;
251
+ /**
252
+ * Root permission row: one `addPermission` `endPermission` chain, with optional sibling `addChild` entries.
253
+ */
254
+ interface AXPPermissionDefinitionRecord {
255
+ name: string;
256
+ title: string;
257
+ description?: string;
258
+ requiredFeatures?: string[];
259
+ /** At most one level — matches `AXPPermissionDefinitionProviderContext` fluent API. */
260
+ children?: AXPPermissionLeafRecord[];
129
261
  }
130
- interface AXPSchemaFeatures {
131
- searchable?: {
132
- enabled: boolean;
133
- fullText: boolean;
134
- };
135
- filterable?: {
136
- enabled: boolean;
137
- inline: boolean;
138
- };
139
- sortable?: {
140
- enabled: boolean;
141
- };
142
- auditable?: {
143
- enabled: boolean;
144
- };
262
+ /**
263
+ * Serializable permission group for definition stores (Dexie/Firestore).
264
+ * Aligns with `AXPPermissionGroupDefinition` / fluent providers; one row per group.
265
+ */
266
+ interface AXPPermissionGroupDefinitionRecord {
267
+ name: string;
268
+ title: string;
269
+ description?: string;
270
+ permissions: AXPPermissionDefinitionRecord[];
271
+ /**
272
+ * Optional module classification (references `PlatformManagement.ModuleDefinitions` when using the category plugin).
273
+ */
274
+ categoryIds?: string[];
275
+ /** Denormalized labels for list/display (mirrors product category pattern). */
276
+ categories?: Array<{
277
+ id: string;
278
+ title?: string;
279
+ }>;
145
280
  }
146
- interface AXPSchemaDefinition {
281
+
282
+ /** Surfaces where a command may be exposed (tooling / automation). Build-time: optional on `defineCommand`. */
283
+ type AXPCommandCapability = 'ai' | 'workflow';
284
+ /**
285
+ * Persisted command registry row (e.g. Dexie/Firestore via AXPEntityDefinitionCrudService).
286
+ * `name` is the runtime command key; `active` is the toggle stored for mock/admin UIs.
287
+ */
288
+ interface AXPCommandRegistryRecord {
147
289
  name: string;
148
- dataType: AXPSchemaDataType;
149
- interface: AXPSchemaInterface;
150
- validations?: AXPValidationRules;
151
- features?: AXPSchemaFeatures;
152
- metadata?: AXPMetaData;
290
+ active: boolean;
291
+ /** Human / AI-oriented description of what the command does. */
292
+ description?: string;
293
+ /** Input parameters as schema rows (same shape as interface `optionDefinitions`). */
294
+ inputOptionDefinitions?: AXPPropertyDefinition[];
295
+ /** Output shape as schema rows (same shape as interface `optionDefinitions`). */
296
+ outputOptionDefinitions?: AXPPropertyDefinition[];
297
+ /** Display title from build-time command metadata (`*.definition.ts`). */
298
+ catalogTitle?: string;
299
+ /** Where the command runs (metadata). */
300
+ executionMode?: 'frontend' | 'backend' | 'both';
301
+ /** Pretty-printed JSON of the outcomes definition from metadata (readonly display). */
302
+ outcomesDefinitionJson?: string;
303
+ /** Pretty-printed JSON of AI hints from metadata (readonly display). */
304
+ aiMetadataJson?: string;
305
+ /**
306
+ * Optional capability flags (from build-time `capabilities` on command metadata).
307
+ * Omitted or empty means no declared surface; consumers may still apply legacy rules (e.g. AI `ai-tool` tag).
308
+ */
309
+ capabilities?: AXPCommandCapability[];
153
310
  }
154
311
 
155
312
  /**
156
- * Runtime model for relation definitions with parent references and helper methods
313
+ * Persisted query registry row (e.g. Dexie/Firestore via AXPEntityDefinitionCrudService).
314
+ * `name` is the runtime query key; `active` is the toggle stored for mock/admin UIs.
315
+ * Queries expose `fetch(input)` only — no command outcomes.
157
316
  */
158
- declare class AXPRelationModel {
159
- readonly type: AXPRelationshipCardinality;
160
- readonly kind: AXPRelationshipKind;
161
- readonly target: {
162
- aggregate: string;
163
- entity: string;
164
- key: string;
165
- };
166
- readonly source: {
167
- entity: string;
168
- key: string;
169
- };
170
- readonly isRequired: boolean;
171
- readonly parent: any;
172
- constructor(definition: AXPAggregateRelationDefinition, parent: any);
173
- /**
174
- * Check if relation is one-to-one
175
- */
176
- isOneToOne(): boolean;
177
- /**
178
- * Check if relation is one-to-many
179
- */
180
- isOneToMany(): boolean;
181
- /**
182
- * Check if relation is many-to-many
183
- */
184
- isManyToMany(): boolean;
185
- /**
186
- * Check if relation is association
187
- */
188
- isAssociation(): boolean;
189
- /**
190
- * Check if relation is composition
191
- */
192
- isComposition(): boolean;
193
- /**
194
- * Check if relation is aggregation
195
- */
196
- isAggregation(): boolean;
197
- /**
198
- * Get parent aggregate
199
- */
200
- getAggregate(): any;
201
- /**
202
- * Get parent module
203
- */
204
- getModule(): any;
205
- /**
206
- * Get full path (module.aggregate.relation)
207
- */
208
- getPath(): string;
209
- /**
210
- * Get relation description
211
- */
212
- getDescription(): string;
213
- /**
214
- * Get cardinality description
215
- */
216
- getCardinalityDescription(): string;
217
- /**
218
- * Get kind description
219
- */
220
- getKindDescription(): string;
221
- /**
222
- * Get relation summary
223
- */
224
- getSummary(): string;
317
+ interface AXPQueryRegistryRecord {
318
+ name: string;
319
+ active: boolean;
320
+ /** Human / AI-oriented description of what the query returns. */
321
+ description?: string;
322
+ /** Input parameters (filter / criteria) as property definition rows. */
323
+ inputOptionDefinitions?: AXPPropertyDefinition[];
324
+ /** Result shape as property definition rows (documentation / tooling). */
325
+ outputOptionDefinitions?: AXPPropertyDefinition[];
326
+ /** Display title from build-time query metadata (`*.query.definition.ts`). */
327
+ catalogTitle?: string;
328
+ /** Where the query runs (metadata). */
329
+ executionMode?: 'frontend' | 'backend' | 'both';
330
+ /** Pretty-printed JSON of AI hints from metadata (readonly display). */
331
+ aiMetadataJson?: string;
332
+ /**
333
+ * Optional capability flags (from build-time `capabilities` on query metadata).
334
+ * Omitted or empty means no declared surface; consumers may still apply legacy rules (e.g. AI `ai-tool` tag).
335
+ */
336
+ capabilities?: AXPCommandCapability[];
337
+ }
338
+
339
+ /**
340
+ * Service interface for CRUD operations on entity and related definition records stored in Dexie/Firestore.
341
+ * Provided by connectivity mock when using Dexie or Firestore as entity definition source.
342
+ * Use this service from anywhere in the app (not just mock).
343
+ */
344
+ interface AXPEntityDefinitionCrudService {
345
+ list(): Promise<{
346
+ name: string;
347
+ module: string;
348
+ entityName?: string;
349
+ }[]>;
350
+ getRaw(moduleName: string, entityName: string): Promise<Record<string, unknown> | null>;
351
+ create(entityName: string, definition: Record<string, unknown>): Promise<void>;
352
+ update(entityName: string, definition: Record<string, unknown>): Promise<void>;
353
+ delete(entityName: string): Promise<void>;
354
+ listInterfaces(): Promise<AXPInterfaceDefinition[]>;
355
+ listInterfacesByCategory(categoryName: string): Promise<AXPInterfaceDefinition[]>;
356
+ getInterface(name: string): Promise<AXPInterfaceDefinition | null>;
357
+ createInterface(name: string, definition: AXPInterfaceDefinition): Promise<void>;
358
+ updateInterface(name: string, definition: AXPInterfaceDefinition): Promise<void>;
359
+ deleteInterface(name: string): Promise<void>;
360
+ listPlugins(): Promise<AXPPluginDefinition[]>;
361
+ getPlugin(name: string): Promise<AXPPluginDefinition | null>;
362
+ createPlugin(name: string, definition: AXPPluginDefinition): Promise<void>;
363
+ updatePlugin(name: string, definition: AXPPluginDefinition): Promise<void>;
364
+ deletePlugin(name: string): Promise<void>;
365
+ listValidations(): Promise<AXPValidationRuleDefinition[]>;
366
+ getValidation(name: string): Promise<AXPValidationRuleDefinition | null>;
367
+ createValidation(name: string, definition: AXPValidationRuleDefinition): Promise<void>;
368
+ updateValidation(name: string, definition: AXPValidationRuleDefinition): Promise<void>;
369
+ deleteValidation(name: string): Promise<void>;
370
+ listRelations(): Promise<Array<AXPRelationDefinition & {
371
+ id: string;
372
+ }>>;
373
+ getRelation(id: string): Promise<AXPRelationDefinition | null>;
374
+ createRelation(id: string, definition: AXPRelationDefinition): Promise<void>;
375
+ updateRelation(id: string, definition: AXPRelationDefinition): Promise<void>;
376
+ deleteRelation(id: string): Promise<void>;
377
+ listModules(): Promise<Array<{
378
+ name: string;
379
+ title?: string;
380
+ icon?: string;
381
+ }>>;
382
+ getModule(name: string): Promise<{
383
+ name: string;
384
+ title?: string;
385
+ icon?: string;
386
+ } | null>;
387
+ createModule(name: string, definition: {
388
+ name: string;
389
+ title?: string;
390
+ icon?: string;
391
+ }): Promise<void>;
392
+ updateModule(name: string, definition: {
393
+ name: string;
394
+ title?: string;
395
+ icon?: string;
396
+ }): Promise<void>;
397
+ deleteModule(name: string): Promise<void>;
398
+ listAggregates(filter?: {
399
+ module?: string;
400
+ }): Promise<Array<{
401
+ id: string;
402
+ definition: Record<string, unknown>;
403
+ }>>;
404
+ getAggregate(id: string): Promise<Record<string, unknown> | null>;
405
+ createAggregate(id: string, definition: Record<string, unknown>): Promise<void>;
406
+ updateAggregate(id: string, definition: Record<string, unknown>): Promise<void>;
407
+ deleteAggregate(id: string): Promise<void>;
408
+ listMenus(): Promise<Array<{
409
+ id: string;
410
+ definition: AXPMenuDefinitionRecord;
411
+ }>>;
412
+ getMenu(id: string): Promise<AXPMenuDefinitionRecord | null>;
413
+ createMenu(id: string, definition: AXPMenuDefinitionRecord): Promise<void>;
414
+ updateMenu(id: string, definition: AXPMenuDefinitionRecord): Promise<void>;
415
+ deleteMenu(id: string): Promise<void>;
416
+ listPermissionGroups(): Promise<Array<{
417
+ id: string;
418
+ definition: AXPPermissionGroupDefinitionRecord;
419
+ }>>;
420
+ getPermissionGroup(id: string): Promise<AXPPermissionGroupDefinitionRecord | null>;
421
+ createPermissionGroup(id: string, definition: AXPPermissionGroupDefinitionRecord): Promise<void>;
422
+ updatePermissionGroup(id: string, definition: AXPPermissionGroupDefinitionRecord): Promise<void>;
423
+ deletePermissionGroup(id: string): Promise<void>;
424
+ listCommands(): Promise<Array<{
425
+ id: string;
426
+ definition: AXPCommandRegistryRecord;
427
+ }>>;
428
+ getCommand(id: string): Promise<AXPCommandRegistryRecord | null>;
429
+ createCommand(id: string, definition: AXPCommandRegistryRecord): Promise<void>;
430
+ updateCommand(id: string, definition: AXPCommandRegistryRecord): Promise<void>;
431
+ deleteCommand(id: string): Promise<void>;
432
+ listQueries(): Promise<Array<{
433
+ id: string;
434
+ definition: AXPQueryRegistryRecord;
435
+ }>>;
436
+ getQuery(id: string): Promise<AXPQueryRegistryRecord | null>;
437
+ createQuery(id: string, definition: AXPQueryRegistryRecord): Promise<void>;
438
+ updateQuery(id: string, definition: AXPQueryRegistryRecord): Promise<void>;
439
+ deleteQuery(id: string): Promise<void>;
440
+ }
441
+ declare const AXP_ENTITY_DEFINITION_CRUD_SERVICE: InjectionToken<AXPEntityDefinitionCrudService | null>;
442
+
443
+ declare class AXPDomainModule {
444
+ private _commandSetup;
225
445
  /**
226
- * Validate the relation structure
446
+ * Optional bootstrap hooks for registered property definitions (see {@link AXP_PROPERTY_SETUP} and related tokens).
227
447
  */
228
- validate(): string[];
448
+ private _propertySetup;
449
+ private _propertyMiddlewareSetup;
450
+ private _propertyLoaderSetup;
229
451
  /**
230
- * Get relation characteristics
452
+ * Injection token for domain loader setup initialization.
453
+ *
454
+ * Used during application bootstrap to register domain loaders
455
+ * that can provide domain definitions on-demand when they're not found in
456
+ * the registry.
231
457
  */
232
- getCharacteristics(): {
233
- type: string;
234
- kind: string;
235
- required: boolean;
236
- isOwning: boolean;
237
- isNavigable: boolean;
458
+ private _domainLoaderSetup;
459
+ private _domainMiddlewareSetup;
460
+ private _domainSetup;
461
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPDomainModule, never>;
462
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AXPDomainModule, never, [typeof i1.AXPRuntimeModule], never>;
463
+ static ɵinj: i0.ɵɵInjectorDeclaration<AXPDomainModule>;
464
+ }
465
+
466
+ declare enum AXPEntityType {
467
+ Entity = 0,
468
+ AggregateRoot = 1,
469
+ ValueObject = 2
470
+ }
471
+ interface AXPEntityDefinition {
472
+ name: string;
473
+ title: string;
474
+ fields: AXPEntityPropertyDefinition[];
475
+ type: AXPEntityType;
476
+ /** Entity plugins (e.g. common.history, common.lock). Name + optional options only. */
477
+ plugins?: AXPPluginDefinitionValue[];
478
+ /** Property groups for layout */
479
+ groups?: Array<{
480
+ id: string;
481
+ title: string;
482
+ }>;
483
+ /** List/table columns */
484
+ columns?: Array<{
485
+ name: string;
486
+ }>;
487
+ /** Display formats */
488
+ formats?: {
489
+ individual?: string;
490
+ plural?: string;
238
491
  };
239
- /**
240
- * Check if relation involves entity
241
- */
242
- involvesEntity(entityName: string): boolean;
243
- /**
244
- * Check if relation targets aggregate
245
- */
246
- targetsAggregate(aggregateName: string): boolean;
247
- /**
248
- * Get the other entity in the relation
249
- */
250
- getOtherEntity(entityName: string): string | null;
251
- /**
252
- * Convert back to interface definition
253
- */
254
- toDefinition(): AXPAggregateRelationDefinition;
492
+ /** Layout interfaces (master create/update/single/list). Pass-through for converter. */
493
+ interfaces?: Record<string, unknown>;
494
+ /** Module name (e.g. ContentManagement). Derived from path or explicit. */
495
+ module?: string;
496
+ /** Entity icon. */
497
+ icon?: string;
498
+ }
499
+ interface AXPEntityPropertyFeatures {
500
+ nullable: boolean;
501
+ readOnly: boolean;
502
+ }
503
+ /**
504
+ * Entity field: flattened embedded property definition (interface, validations, features) plus entity-only metadata.
505
+ * Top-level name/title are the entity property name/title.
506
+ */
507
+ interface AXPEntityPropertyDefinition extends AXPPropertyDefinition {
508
+ actions?: AXPDomainAction[];
509
+ /** Nullable/readOnly for entity binding; distinct from property.features (searchable, filterable, etc.). */
510
+ fieldFeatures?: AXPEntityPropertyFeatures;
511
+ }
512
+
513
+ type AXPAggregateEntityList = {
514
+ [key: string]: () => Promise<AXPEntityDefinition>;
515
+ };
516
+ /**
517
+ * Aggregate definition. Relations are stored in a separate collection (like MySQL join table).
518
+ * Join when needed via relations collection.
519
+ */
520
+ interface AXPAggregateDefinition {
521
+ name: string;
522
+ title: string;
523
+ entities: AXPEntityDefinition[] | AXPAggregateEntityList | Record<string, string>;
524
+ validations: AXPValidationRules;
525
+ actions: AXPDomainAction[];
526
+ }
527
+
528
+ interface AXPModuleDefinition {
529
+ name: string;
530
+ title: string;
531
+ aggregates: AXPAggregateDefinition[];
255
532
  }
256
533
 
257
534
  /**
258
535
  * Simple runtime model for aggregate definitions with parent references and navigation helpers.
259
- *
260
- * This model is a pure data structure that provides:
261
- * - Access to aggregate properties and metadata
262
- * - Navigation helpers for finding relations and entity references
263
- * - Parent module reference for hierarchy navigation
264
- *
265
- * All loading and resolution logic has been moved to AXPDomainRegistry.
536
+ * Relations are stored in a separate collection; join when needed.
266
537
  */
267
538
  declare class AXPAggregateModel {
268
539
  readonly name: string;
269
540
  readonly title: string;
270
- readonly relations: AXPRelationModel[];
271
541
  readonly validations: AXPValidationRules;
272
542
  readonly actions: AXPDomainAction[];
273
543
  readonly parent: any;
@@ -305,21 +575,6 @@ declare class AXPAggregateModel {
305
575
  * @returns True if entity exists
306
576
  */
307
577
  hasEntity(entityName: string): boolean;
308
- /**
309
- * Find relation by source and target entities
310
- *
311
- * @param sourceEntity Source entity name
312
- * @param targetEntity Target entity name
313
- * @returns Relation model or undefined if not found
314
- */
315
- findRelation(sourceEntity: string, targetEntity: string): AXPRelationModel | undefined;
316
- /**
317
- * Get all relations for a specific entity
318
- *
319
- * @param entityName Entity name
320
- * @returns Array of relations involving the entity
321
- */
322
- getEntityRelations(entityName: string): AXPRelationModel[];
323
578
  /**
324
579
  * Get parent module
325
580
  *
@@ -339,7 +594,6 @@ declare class AXPAggregateModel {
339
594
  */
340
595
  getStatistics(): {
341
596
  entityCount: number;
342
- relationCount: number;
343
597
  actionCount: number;
344
598
  validationCount: number;
345
599
  };
@@ -430,9 +684,8 @@ declare class AXPModuleModel {
430
684
  */
431
685
  getAllEntityReferences(): Record<string, string>;
432
686
  /**
433
- * Get all relations across all aggregates
434
- *
435
- * @returns Array of all relation models
687
+ * Relations are stored in a separate collection. Use relation queries for join when needed.
688
+ * @deprecated Relations are no longer nested in aggregates.
436
689
  */
437
690
  getAllRelations(): Array<{
438
691
  aggregate: AXPAggregateModel;
@@ -452,7 +705,6 @@ declare class AXPModuleModel {
452
705
  getStatistics(): {
453
706
  aggregateCount: number;
454
707
  entityCount: number;
455
- relationCount: number;
456
708
  actionCount: number;
457
709
  validationCount: number;
458
710
  };
@@ -465,54 +717,27 @@ declare class AXPModuleModel {
465
717
  }
466
718
 
467
719
  /**
468
- * Runtime model for schema definitions with helper methods
720
+ * Runtime model for a {@link AXPPropertyDefinition} with helper methods.
469
721
  */
470
- declare class AXPSchemaModel {
722
+ declare class AXPPropertyModel {
471
723
  readonly name: string;
472
- readonly dataType: AXPSchemaDataType;
473
- readonly interface: AXPSchemaInterface;
724
+ readonly title: string;
725
+ readonly interface: AXPInterfaceDefinitionValue;
474
726
  readonly validations: AXPValidationRules;
475
- readonly features: AXPSchemaFeatures;
727
+ readonly features: AXPPropertyFeatures;
476
728
  readonly metadata?: AXPMetaData;
477
- constructor(definition: AXPSchemaDefinition);
478
- /**
479
- * Check if schema is for string data
480
- */
481
- isString(): boolean;
482
- /**
483
- * Check if schema is for number data
484
- */
485
- isNumber(): boolean;
486
- /**
487
- * Check if schema is for boolean data
488
- */
489
- isBoolean(): boolean;
490
- /**
491
- * Check if schema is for date data
492
- */
493
- isDate(): boolean;
494
- /**
495
- * Check if schema is for object data
496
- */
497
- isObject(): boolean;
498
- /**
499
- * Check if schema is for array data
500
- */
501
- isArray(): boolean;
502
- /**
503
- * Check if schema is for blob data
504
- */
505
- isBlob(): boolean;
506
- /**
507
- * Get widget type
508
- */
509
- getWidgetType(): string;
729
+ readonly description?: string;
730
+ readonly icon?: string;
731
+ readonly defaultValue?: unknown;
732
+ readonly disabled?: boolean;
733
+ readonly dataType: AXPDataType;
734
+ constructor(definition: AXPPropertyDefinition);
510
735
  /**
511
736
  * Get widget options
512
737
  */
513
738
  getWidgetOptions(): AXPOptionsData | undefined;
514
739
  /**
515
- * Check if interface is disabled
740
+ * Check if the property is disabled
516
741
  */
517
742
  isDisabled(): boolean;
518
743
  /**
@@ -540,11 +765,11 @@ declare class AXPSchemaModel {
540
765
  */
541
766
  isAuditable(): boolean;
542
767
  /**
543
- * Validate the schema structure
768
+ * Validate the property definition structure
544
769
  */
545
770
  validate(): Promise<string[]>;
546
771
  /**
547
- * Get schema capabilities
772
+ * Get property capabilities
548
773
  */
549
774
  getCapabilities(): {
550
775
  searchable: boolean;
@@ -556,10 +781,9 @@ declare class AXPSchemaModel {
556
781
  disabled: boolean;
557
782
  };
558
783
  /**
559
- * Get schema summary
784
+ * Get property summary
560
785
  */
561
786
  getSummary(): {
562
- dataType: AXPSchemaDataType;
563
787
  widget: string;
564
788
  hasOptions: boolean;
565
789
  hasMetadata: boolean;
@@ -569,30 +793,26 @@ declare class AXPSchemaModel {
569
793
  /**
570
794
  * Convert back to interface definition
571
795
  */
572
- toDefinition(): AXPSchemaDefinition;
796
+ toDefinition(): AXPPropertyDefinition;
573
797
  }
574
798
 
575
799
  /**
576
- * Interface for schema loaders that can provide schemas on-demand
800
+ * Loads {@link AXPPropertyDefinition} instances on demand when not registered in {@link AXPPropertyRegistry}.
577
801
  */
578
- interface AXPSchemaLoader {
802
+ interface AXPPropertyLoader {
579
803
  /**
580
804
  * Optional priority for loader ordering. Higher numbers = higher priority.
581
805
  * If not specified, uses registration order.
582
806
  */
583
807
  readonly priority?: number;
584
808
  /**
585
- * Determines if this loader can handle the given schema name
586
- * @param schemaName The name of the schema to load
587
- * @returns true if this loader can load the schema
809
+ * Determines if this loader can handle the given registered property name.
588
810
  */
589
- canLoad(schemaName: string): boolean;
811
+ canLoad(propertyName: string): boolean;
590
812
  /**
591
- * Loads the schema definition for the given name
592
- * @param schemaName The name of the schema to load
593
- * @returns Promise that resolves to the schema definition or null if not found
813
+ * Loads the property definition for the given name, or null if not found.
594
814
  */
595
- load(schemaName: string): Promise<AXPSchemaDefinition | null>;
815
+ load(propertyName: string): Promise<AXPPropertyDefinition | null>;
596
816
  }
597
817
 
598
818
  /**
@@ -620,13 +840,13 @@ interface AXPSchemaLoader {
620
840
  * }
621
841
  * ```
622
842
  */
623
- declare class AXPSchemaMiddlewareContext {
624
- private _schema;
625
- constructor(schema: AXPSchemaDefinition);
843
+ declare class AXPPropertyMiddlewareContext {
844
+ private _definition;
845
+ constructor(definition: AXPPropertyDefinition);
626
846
  /**
627
847
  * Get the current schema definition (readonly access)
628
848
  */
629
- get schema(): Readonly<AXPSchemaDefinition>;
849
+ get definition(): Readonly<AXPPropertyDefinition>;
630
850
  /**
631
851
  * Get the schema name for conditional logic
632
852
  */
@@ -635,7 +855,7 @@ declare class AXPSchemaMiddlewareContext {
635
855
  * Set a default value for the widget
636
856
  * @param defaultValue The default value to set
637
857
  */
638
- withDefaultValue(defaultValue: any): this;
858
+ withDefaultValue(defaultValue: unknown): this;
639
859
  /**
640
860
  * Remove the default value from the widget
641
861
  */
@@ -668,7 +888,7 @@ declare class AXPSchemaMiddlewareContext {
668
888
  * Set or merge widget options
669
889
  * @param options Object containing widget-specific options to merge
670
890
  */
671
- withWidgetOptions(options: any): this;
891
+ withWidgetOptions(options: Record<string, unknown>): this;
672
892
  /**
673
893
  * Remove a specific widget option by key
674
894
  * @param optionKey The key of the option to remove
@@ -711,11 +931,6 @@ declare class AXPSchemaMiddlewareContext {
711
931
  * @param key The metadata key to remove
712
932
  */
713
933
  removeMetadata(key: string): this;
714
- /**
715
- * Set the data type for this schema
716
- * @param dataType The new data type (string, number, boolean, etc.)
717
- */
718
- withDataType(dataType: AXPSchemaDataType): this;
719
934
  /**
720
935
  * Set the disabled state of the widget
721
936
  * @param isDisabled Whether the widget should be disabled
@@ -734,15 +949,16 @@ declare class AXPSchemaMiddlewareContext {
734
949
  }
735
950
 
736
951
  /**
737
- * Middleware function that can transform schema definitions
738
- * @param context - Schema middleware context providing schema info and configuration methods
952
+ * Middleware that can transform a property definition during resolution.
953
+ *
954
+ * @param context - Mutable {@link AXPPropertyMiddlewareContext} wrapping a cloned {@link AXPPropertyDefinition}.
739
955
  */
740
- type AXPSchemaMiddleware = (context: AXPSchemaMiddlewareContext) => void | Promise<void>;
956
+ type AXPPropertyMiddleware = (context: AXPPropertyMiddlewareContext) => void | Promise<void>;
741
957
 
742
958
  /**
743
959
  * Options for registering a schema with additional metadata and middleware
744
960
  */
745
- interface AXPSchemaRegistrationOptions {
961
+ interface AXPPropertyRegistrationOptions {
746
962
  /** Optional description for documentation purposes */
747
963
  description?: string;
748
964
  /** Tags for categorizing and finding schemas */
@@ -750,18 +966,18 @@ interface AXPSchemaRegistrationOptions {
750
966
  /** Version information for schema evolution */
751
967
  version?: string;
752
968
  /** Schema-specific middleware that applies only to this schema */
753
- middleware?: AXPSchemaMiddleware[];
969
+ middleware?: AXPPropertyMiddleware[];
754
970
  }
755
971
  /**
756
972
  * Internal representation of a registered schema with metadata
757
973
  */
758
- interface AXPRegisteredSchema {
974
+ interface AXPRegisteredProperty {
759
975
  /** Unique identifier for the schema */
760
976
  name: string;
761
977
  /** The actual schema definition */
762
- definition: AXPSchemaDefinition;
978
+ definition: AXPPropertyDefinition;
763
979
  /** Registration options and metadata */
764
- options: AXPSchemaRegistrationOptions;
980
+ options: AXPPropertyRegistrationOptions;
765
981
  /** Timestamp when the schema was registered */
766
982
  registeredAt: Date;
767
983
  }
@@ -774,8 +990,8 @@ interface AXPRegisteredSchema {
774
990
  * - On-demand schema loading
775
991
  * - Caching and performance optimization
776
992
  */
777
- declare class AXPSchemaRegistry {
778
- private readonly _schemas;
993
+ declare class AXPPropertyRegistry {
994
+ private readonly _registrations;
779
995
  private readonly _globalMiddleware;
780
996
  private readonly _modelCache;
781
997
  private _loaders;
@@ -783,14 +999,14 @@ declare class AXPSchemaRegistry {
783
999
  /**
784
1000
  * Register a schema definition with optional metadata and middleware
785
1001
  */
786
- register(definition: AXPSchemaDefinition, options?: AXPSchemaRegistrationOptions): void;
1002
+ register(definition: AXPPropertyDefinition, options?: AXPPropertyRegistrationOptions): void;
787
1003
  /**
788
1004
  * Register multiple schemas at once for batch operations
789
1005
  */
790
- registerBatch(schemas: {
1006
+ registerBatch(entries: {
791
1007
  name: string;
792
- definition: AXPSchemaDefinition;
793
- options?: AXPSchemaRegistrationOptions;
1008
+ definition: AXPPropertyDefinition;
1009
+ options?: AXPPropertyRegistrationOptions;
794
1010
  }[]): void;
795
1011
  /**
796
1012
  * Remove a schema from the registry
@@ -804,20 +1020,20 @@ declare class AXPSchemaRegistry {
804
1020
  * Resolve a schema by name with full middleware processing and caching.
805
1021
  * Supports on-demand loading if schema is not registered.
806
1022
  */
807
- resolve(name: string): Promise<AXPSchemaModel>;
1023
+ resolve(name: string): Promise<AXPPropertyModel>;
808
1024
  /**
809
1025
  * Synchronous resolution without middleware processing.
810
1026
  * Use only when middleware is not needed for performance.
811
1027
  */
812
- resolveSync(name: string): AXPSchemaModel;
1028
+ resolveSync(name: string): AXPPropertyModel;
813
1029
  /**
814
1030
  * Add global middleware that applies to all schema resolutions
815
1031
  */
816
- addGlobalMiddleware(middleware: AXPSchemaMiddleware): void;
1032
+ addGlobalMiddleware(middleware: AXPPropertyMiddleware): void;
817
1033
  /**
818
1034
  * Remove specific global middleware
819
1035
  */
820
- removeGlobalMiddleware(middleware: AXPSchemaMiddleware): boolean;
1036
+ removeGlobalMiddleware(middleware: AXPPropertyMiddleware): boolean;
821
1037
  /**
822
1038
  * Clear all global middleware
823
1039
  */
@@ -825,7 +1041,7 @@ declare class AXPSchemaRegistry {
825
1041
  /**
826
1042
  * Add a schema loader for on-demand loading
827
1043
  */
828
- addLoader(loader: Type<AXPSchemaLoader>): void;
1044
+ addLoader(loader: Type<AXPPropertyLoader>): void;
829
1045
  /**
830
1046
  * Get all registered schema names
831
1047
  */
@@ -833,29 +1049,29 @@ declare class AXPSchemaRegistry {
833
1049
  /**
834
1050
  * Get detailed registration information for a schema
835
1051
  */
836
- getSchemaInfo(name: string): AXPRegisteredSchema | undefined;
1052
+ getRegisteredProperty(name: string): AXPRegisteredProperty | undefined;
837
1053
  /**
838
- * Get all registered schemas with their metadata
1054
+ * Get all registered properties with their metadata
839
1055
  */
840
- getAllSchemas(): AXPRegisteredSchema[];
1056
+ getAllRegisteredProperties(): AXPRegisteredProperty[];
841
1057
  /**
842
- * Find schemas by tag for categorization
1058
+ * Find registered properties by tag for categorization
843
1059
  */
844
- findByTag(tag: string): AXPRegisteredSchema[];
1060
+ findByTag(tag: string): AXPRegisteredProperty[];
845
1061
  /**
846
- * Find schemas by widget type for widget-specific operations
1062
+ * Find registered properties by widget type for widget-specific operations
847
1063
  */
848
- findByWidget(widgetType: string): AXPRegisteredSchema[];
1064
+ findByWidget(widgetType: string): AXPRegisteredProperty[];
849
1065
  /**
850
1066
  * Get comprehensive registry statistics
851
1067
  */
852
1068
  getStatistics(): {
853
- schemaCount: number;
1069
+ propertyCount: number;
854
1070
  globalMiddlewareCount: number;
855
- schemasByWidget: {
1071
+ propertiesByWidget: {
856
1072
  [widget: string]: number;
857
1073
  };
858
- schemasByTag: {
1074
+ propertiesByTag: {
859
1075
  [tag: string]: number;
860
1076
  };
861
1077
  };
@@ -883,124 +1099,123 @@ declare class AXPSchemaRegistry {
883
1099
  * Create a deep clone of a schema definition to prevent mutations
884
1100
  */
885
1101
  private cloneDefinition;
886
- static ɵfac: i0.ɵɵFactoryDeclaration<AXPSchemaRegistry, never>;
887
- static ɵprov: i0.ɵɵInjectableDeclaration<AXPSchemaRegistry>;
1102
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPPropertyRegistry, never>;
1103
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXPPropertyRegistry>;
888
1104
  }
889
1105
 
890
1106
  /**
891
- * High-level facade service for schema operations.
1107
+ * High-level facade for registered property definitions ({@link AXPPropertyDefinition}).
892
1108
  *
893
- * Provides a simplified interface to the schema registry with additional
894
- * business logic and convenience methods for common operations.
1109
+ * Wraps {@link AXPPropertyRegistry} with convenience methods for resolution and discovery.
895
1110
  */
896
- declare class AXPSchemaService {
1111
+ declare class AXPPropertyService {
897
1112
  private readonly registry;
898
1113
  /**
899
- * Register a schema with optional configuration
1114
+ * Register a property definition with optional configuration
900
1115
  */
901
- register(definition: AXPSchemaDefinition, options?: AXPSchemaRegistrationOptions): void;
1116
+ register(definition: AXPPropertyDefinition, options?: AXPPropertyRegistrationOptions): void;
902
1117
  /**
903
- * Register multiple schemas at once
1118
+ * Register multiple property definitions at once
904
1119
  */
905
- registerBatch(schemas: {
1120
+ registerBatch(entries: {
906
1121
  name: string;
907
- definition: AXPSchemaDefinition;
908
- options?: AXPSchemaRegistrationOptions;
1122
+ definition: AXPPropertyDefinition;
1123
+ options?: AXPPropertyRegistrationOptions;
909
1124
  }[]): void;
910
1125
  /**
911
- * Remove a schema from the registry
1126
+ * Remove a property definition from the registry
912
1127
  */
913
1128
  unregister(name: string): boolean;
914
1129
  /**
915
- * Check if a schema is registered
1130
+ * Check if a property definition is registered by name
916
1131
  */
917
1132
  isRegistered(name: string): boolean;
918
1133
  /**
919
- * Get all registered schema names
1134
+ * Get all registered property names
920
1135
  */
921
1136
  getRegisteredNames(): string[];
922
1137
  /**
923
- * Clear all schemas and reset the registry
1138
+ * Clear all registrations and reset the registry
924
1139
  */
925
1140
  clear(): void;
926
1141
  /**
927
- * Resolve a schema with full middleware processing
1142
+ * Resolve a registered property by name with full middleware processing
928
1143
  */
929
- resolve(name: string): Promise<AXPSchemaModel>;
1144
+ resolve(name: string): Promise<AXPPropertyModel>;
930
1145
  /**
931
- * Resolve schema synchronously without middleware (for performance)
1146
+ * Resolve synchronously without middleware (for performance)
932
1147
  */
933
- resolveSync(name: string): AXPSchemaModel;
1148
+ resolveSync(name: string): AXPPropertyModel;
934
1149
  /**
935
- * Resolve multiple schemas for form building and batch operations
1150
+ * Resolve multiple registered properties for form building and batch operations
936
1151
  */
937
1152
  resolveMultiple(fieldConfigs: {
938
1153
  name: string;
939
- schemaName: string;
1154
+ propertyName: string;
940
1155
  }[]): Promise<{
941
1156
  name: string;
942
- schema: AXPSchemaModel;
1157
+ property: AXPPropertyModel;
943
1158
  }[]>;
944
1159
  /**
945
- * Add global middleware that applies to all schema resolutions
1160
+ * Add global middleware that applies to all property resolutions
946
1161
  */
947
- addGlobalMiddleware(middleware: AXPSchemaMiddleware): void;
1162
+ addGlobalMiddleware(middleware: AXPPropertyMiddleware): void;
948
1163
  /**
949
1164
  * Remove specific global middleware
950
1165
  */
951
- removeGlobalMiddleware(middleware: AXPSchemaMiddleware): boolean;
1166
+ removeGlobalMiddleware(middleware: AXPPropertyMiddleware): boolean;
952
1167
  /**
953
1168
  * Clear all global middleware
954
1169
  */
955
1170
  clearGlobalMiddleware(): void;
956
1171
  /**
957
- * Get detailed information about a registered schema
1172
+ * Get detailed information about a registered property definition
958
1173
  */
959
- getSchemaInfo(name: string): AXPRegisteredSchema | undefined;
1174
+ getRegisteredProperty(name: string): AXPRegisteredProperty | undefined;
960
1175
  /**
961
- * Get all registered schemas with their metadata
1176
+ * Get all registered property definitions with their metadata
962
1177
  */
963
- getAllSchemas(): AXPRegisteredSchema[];
1178
+ getAllRegisteredProperties(): AXPRegisteredProperty[];
964
1179
  /**
965
- * Find schemas by tag for categorization and grouping
1180
+ * Find registered properties by tag for categorization and grouping
966
1181
  */
967
- findByTag(tag: string): AXPRegisteredSchema[];
1182
+ findByTag(tag: string): AXPRegisteredProperty[];
968
1183
  /**
969
- * Find schemas by widget type for widget-specific operations
1184
+ * Find registered properties by widget type for widget-specific operations
970
1185
  */
971
- findByWidget(widgetType: string): AXPRegisteredSchema[];
1186
+ findByWidget(widgetType: string): AXPRegisteredProperty[];
972
1187
  /**
973
1188
  * Get comprehensive registry statistics and analytics
974
1189
  */
975
1190
  getStatistics(): {
976
1191
  mostUsedWidgets: string[];
977
1192
  mostUsedTags: string[];
978
- schemaCount: number;
1193
+ propertyCount: number;
979
1194
  globalMiddlewareCount: number;
980
- schemasByWidget: {
1195
+ propertiesByWidget: {
981
1196
  [widget: string]: number;
982
1197
  };
983
- schemasByTag: {
1198
+ propertiesByTag: {
984
1199
  [tag: string]: number;
985
1200
  };
986
1201
  };
987
1202
  /**
988
- * Validate that all referenced schemas exist in the registry
1203
+ * Validate that all referenced property names exist in the registry
989
1204
  */
990
- validateSchemaReferences(schemaNames: string[]): {
1205
+ validatePropertyReferences(propertyNames: string[]): {
991
1206
  valid: boolean;
992
- missingSchemas: string[];
1207
+ missingPropertyNames: string[];
993
1208
  };
994
- static ɵfac: i0.ɵɵFactoryDeclaration<AXPSchemaService, never>;
995
- static ɵprov: i0.ɵɵInjectableDeclaration<AXPSchemaService>;
1209
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPPropertyService, never>;
1210
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXPPropertyService>;
996
1211
  }
997
1212
 
998
1213
  /**
999
1214
  * Configuration for a schema loader with optional priority setting
1000
1215
  */
1001
- interface AXPSchemaLoaderConfig {
1216
+ interface AXPPropertyLoaderConfig {
1002
1217
  /** The loader class to instantiate */
1003
- loader: Type<AXPSchemaLoader>;
1218
+ loader: Type<AXPPropertyLoader>;
1004
1219
  /** Optional priority for loader ordering (higher = higher priority) */
1005
1220
  priority?: number;
1006
1221
  }
@@ -1020,28 +1235,28 @@ interface AXPSchemaLoaderConfig {
1020
1235
  * @example
1021
1236
  * ```typescript
1022
1237
  * // Simple loader registration
1023
- * provideSchemaLoaders([
1238
+ * providePropertyLoaders([
1024
1239
  * HttpSchemaLoader,
1025
1240
  * FileSystemSchemaLoader
1026
1241
  * ])
1027
1242
  *
1028
1243
  * // With priority configuration
1029
- * provideSchemaLoaders([
1244
+ * providePropertyLoaders([
1030
1245
  * { loader: HttpSchemaLoader, priority: 10 },
1031
1246
  * { loader: FileSystemSchemaLoader, priority: 5 }
1032
1247
  * ])
1033
1248
  * ```
1034
1249
  */
1035
- declare function provideSchemaLoaders(loaders: Array<Type<AXPSchemaLoader> | AXPSchemaLoaderConfig>): EnvironmentProviders;
1250
+ declare function providePropertyLoaders(loaders: Array<Type<AXPPropertyLoader> | AXPPropertyLoaderConfig>): EnvironmentProviders;
1036
1251
 
1037
1252
  /**
1038
1253
  * Schema entry for registration containing definition and optional metadata
1039
1254
  */
1040
- interface AXPSchemaEntry {
1255
+ interface AXPPropertyEntry {
1041
1256
  /** The schema definition to register */
1042
- definition: AXPSchemaDefinition;
1257
+ definition: AXPPropertyDefinition;
1043
1258
  /** Optional registration options and metadata */
1044
- options?: AXPSchemaRegistrationOptions;
1259
+ options?: AXPPropertyRegistrationOptions;
1045
1260
  }
1046
1261
  /**
1047
1262
  * Provide schema setups for registration during application bootstrap.
@@ -1054,7 +1269,7 @@ interface AXPSchemaEntry {
1054
1269
  *
1055
1270
  * @example
1056
1271
  * ```typescript
1057
- * provideSchemaSetups([
1272
+ * providePropertySetups([
1058
1273
  * {
1059
1274
  * definition: emailSchema,
1060
1275
  * options: {
@@ -1069,7 +1284,7 @@ interface AXPSchemaEntry {
1069
1284
  * ])
1070
1285
  * ```
1071
1286
  */
1072
- declare function provideSchemaSetups(schemas: AXPSchemaEntry[]): EnvironmentProviders;
1287
+ declare function providePropertySetups(entries: AXPPropertyEntry[]): EnvironmentProviders;
1073
1288
  /**
1074
1289
  * Convenience function to provide a single schema setup.
1075
1290
  *
@@ -1082,13 +1297,13 @@ declare function provideSchemaSetups(schemas: AXPSchemaEntry[]): EnvironmentProv
1082
1297
  *
1083
1298
  * @example
1084
1299
  * ```typescript
1085
- * provideSchema(emailSchema, {
1300
+ * provideProperty(emailSchema, {
1086
1301
  * tags: ['user', 'contact'],
1087
1302
  * description: 'User email field'
1088
1303
  * })
1089
1304
  * ```
1090
1305
  */
1091
- declare function provideSchema(definition: AXPSchemaDefinition, options?: AXPSchemaRegistrationOptions): EnvironmentProviders;
1306
+ declare function provideProperty(definition: AXPPropertyDefinition, options?: AXPPropertyRegistrationOptions): EnvironmentProviders;
1092
1307
  /**
1093
1308
  * Provide schema setups from a factory function for dynamic registration.
1094
1309
  *
@@ -1100,7 +1315,7 @@ declare function provideSchema(definition: AXPSchemaDefinition, options?: AXPSch
1100
1315
  *
1101
1316
  * @example
1102
1317
  * ```typescript
1103
- * provideSchemasFromFactory(async () => {
1318
+ * providePropertiesFromFactory(async () => {
1104
1319
  * const config = await loadConfiguration();
1105
1320
  * return config.schemas.map(schema => ({
1106
1321
  * definition: schema,
@@ -1109,14 +1324,14 @@ declare function provideSchema(definition: AXPSchemaDefinition, options?: AXPSch
1109
1324
  * })
1110
1325
  * ```
1111
1326
  */
1112
- declare function provideSchemasFromFactory(schemaFactory: () => AXPSchemaEntry[] | Promise<AXPSchemaEntry[]>): EnvironmentProviders;
1327
+ declare function providePropertiesFromFactory(factory: () => AXPPropertyEntry[] | Promise<AXPPropertyEntry[]>): EnvironmentProviders;
1113
1328
 
1114
1329
  /**
1115
1330
  * Middleware entry for registration - can be either a simple function or targeted middleware
1116
1331
  */
1117
- type AXPSchemaMiddlewareEntry = AXPSchemaMiddleware | {
1332
+ type AXPPropertyMiddlewareEntry = AXPPropertyMiddleware | {
1118
1333
  target: string | RegExp;
1119
- middleware: AXPSchemaMiddleware;
1334
+ middleware: AXPPropertyMiddleware;
1120
1335
  };
1121
1336
  /**
1122
1337
  * Provide schema middleware for registration in the application.
@@ -1130,16 +1345,16 @@ type AXPSchemaMiddlewareEntry = AXPSchemaMiddleware | {
1130
1345
  * @example
1131
1346
  * ```typescript
1132
1347
  * // Global middleware
1133
- * provideSchemaMiddleware([
1348
+ * providePropertyMiddleware([
1134
1349
  * (context) => {
1135
- * if (context.schema.dataType === 'string') {
1350
+ * if (context.definition.dataType === 'string') {
1136
1351
  * context.searchable(true);
1137
1352
  * }
1138
1353
  * }
1139
1354
  * ])
1140
1355
  *
1141
1356
  * // Targeted middleware
1142
- * provideSchemaMiddleware([
1357
+ * providePropertyMiddleware([
1143
1358
  * {
1144
1359
  * target: /^user_/,
1145
1360
  * middleware: (context) => context.withMetadata({ category: 'user' })
@@ -1147,44 +1362,32 @@ type AXPSchemaMiddlewareEntry = AXPSchemaMiddleware | {
1147
1362
  * ])
1148
1363
  * ```
1149
1364
  */
1150
- declare function provideSchemaMiddleware(middleware: AXPSchemaMiddlewareEntry[]): EnvironmentProviders;
1365
+ declare function providePropertyMiddleware(middleware: AXPPropertyMiddlewareEntry[]): EnvironmentProviders;
1151
1366
 
1152
1367
  /**
1153
- * Injection token for schema-specific middleware extensions.
1154
- *
1155
- * Used for targeted middleware that applies only to schemas matching
1156
- * specific patterns (name or regex). This enables fine-grained control
1157
- * over which schemas receive which middleware.
1368
+ * Targeted middleware extension (name or regex) for property resolution.
1158
1369
  */
1159
- declare const AXP_SCHEMA_EXTENSION: InjectionToken<{
1370
+ declare const AXP_PROPERTY_EXTENSION: InjectionToken<{
1160
1371
  target: string | RegExp;
1161
- middleware: AXPSchemaMiddleware;
1372
+ middleware: AXPPropertyMiddleware;
1162
1373
  }>;
1163
1374
  /**
1164
- * Injection token for schema setup initialization.
1165
- *
1166
- * Used during application bootstrap to register schemas that are
1167
- * known at build time. Multiple providers can use this token to
1168
- * contribute schemas to the registry.
1375
+ * Bootstrap hook: register property definitions known at build time.
1169
1376
  */
1170
- declare const AXP_SCHEMA_SETUP: InjectionToken<void>;
1377
+ declare const AXP_PROPERTY_SETUP: InjectionToken<void>;
1171
1378
  /**
1172
- * Injection token for schema middleware setup initialization.
1173
- *
1174
- * Used during application bootstrap to register global middleware
1175
- * that applies to all schema resolutions. This enables centralized
1176
- * schema processing logic.
1379
+ * Bootstrap hook: register global middleware for every property resolution.
1177
1380
  */
1178
- declare const AXP_SCHEMA_MIDDLEWARE_SETUP: InjectionToken<void>;
1381
+ declare const AXP_PROPERTY_MIDDLEWARE_SETUP: InjectionToken<void>;
1179
1382
  /**
1180
- * Injection token for schema loader setup initialization.
1181
- *
1182
- * Used during application bootstrap to register schema loaders
1183
- * that can provide schemas on-demand when they're not found in
1184
- * the registry.
1383
+ * Bootstrap hook: register on-demand property loaders.
1185
1384
  */
1186
- declare const AXP_SCHEMA_LOADER_SETUP: InjectionToken<void>;
1385
+ declare const AXP_PROPERTY_LOADER_SETUP: InjectionToken<void>;
1187
1386
 
1387
+ /**
1388
+ * Strips entity-only fields so the payload matches {@link AXPPropertyDefinition}.
1389
+ */
1390
+ declare function toPropertyDefinition(def: AXPEntityPropertyDefinition): AXPPropertyDefinition;
1188
1391
  /**
1189
1392
  * Runtime model for entity field definitions with parent references and helper methods
1190
1393
  */
@@ -1194,13 +1397,16 @@ declare class AXPEntityFieldModel {
1194
1397
  readonly description?: string;
1195
1398
  readonly validations?: AXPValidationRules;
1196
1399
  readonly actions?: AXPDomainAction[];
1197
- readonly features?: AXPEntityFieldFeatures;
1198
- readonly defaultValue?: any;
1199
- readonly schema: AXPSchemaModel;
1200
- readonly schemaName: string;
1400
+ readonly fieldFeatures?: AXPEntityPropertyFeatures;
1401
+ readonly defaultValue?: unknown;
1402
+ /** Resolved property definition model (interface, validations, features). */
1403
+ readonly property: AXPPropertyModel;
1404
+ /** Same as entity field name; aligns with registered property definition name when applicable. */
1405
+ readonly propertyName: string;
1201
1406
  readonly parent: any;
1202
- readonly schemaService: AXPSchemaService;
1203
- constructor(definition: AXPEntityFieldDefinition, parent: any, schemaService: AXPSchemaService);
1407
+ readonly propertyService: AXPPropertyService;
1408
+ private readonly entityPropertyDefinition;
1409
+ constructor(definition: AXPEntityPropertyDefinition, parent: any, propertyService: AXPPropertyService);
1204
1410
  /**
1205
1411
  * Check if field is nullable
1206
1412
  */
@@ -1238,17 +1444,17 @@ declare class AXPEntityFieldModel {
1238
1444
  */
1239
1445
  isAuditable(): boolean;
1240
1446
  /**
1241
- * Get the schema name
1447
+ * Registered property name (same as entity field name in the embedded model).
1242
1448
  */
1243
- getSchemaName(): string;
1449
+ getPropertyName(): string;
1244
1450
  /**
1245
- * Get schema info from registry
1451
+ * Registration metadata when this field's definition name is registered; otherwise embedded summary.
1246
1452
  */
1247
- getSchemaInfo(): any;
1453
+ getPropertyInfo(): unknown;
1248
1454
  /**
1249
- * Re-resolve schema from registry (useful after schema updates)
1455
+ * Rebuild the property model from embedded definition (e.g. after definition updates).
1250
1456
  */
1251
- refreshSchema(): void;
1457
+ refreshProperty(): void;
1252
1458
  /**
1253
1459
  * Get parent entity
1254
1460
  */
@@ -1275,7 +1481,7 @@ declare class AXPEntityFieldModel {
1275
1481
  getStatistics(): {
1276
1482
  hasValidations: boolean;
1277
1483
  hasActions: boolean;
1278
- hasFeatures: boolean;
1484
+ hasFieldFeatures: boolean;
1279
1485
  hasDefaultValue: boolean;
1280
1486
  validationCount: number;
1281
1487
  actionCount: number;
@@ -1295,7 +1501,7 @@ declare class AXPEntityFieldModel {
1295
1501
  /**
1296
1502
  * Convert back to interface definition
1297
1503
  */
1298
- toDefinition(): AXPEntityFieldDefinition;
1504
+ toDefinition(): AXPEntityPropertyDefinition;
1299
1505
  }
1300
1506
 
1301
1507
  /**
@@ -1307,8 +1513,8 @@ declare class AXPEntityModel {
1307
1513
  readonly fields: AXPEntityFieldModel[];
1308
1514
  readonly type: AXPEntityType;
1309
1515
  readonly parent: any;
1310
- readonly schemaService: AXPSchemaService;
1311
- constructor(definition: AXPEntityDefinition, parent: any, schemaService: AXPSchemaService);
1516
+ readonly propertyService: AXPPropertyService;
1517
+ constructor(definition: AXPEntityDefinition, parent: any, propertyService: AXPPropertyService);
1312
1518
  /**
1313
1519
  * Find field by name
1314
1520
  */
@@ -1317,10 +1523,6 @@ declare class AXPEntityModel {
1317
1523
  * Get all fields
1318
1524
  */
1319
1525
  getAllFields(): AXPEntityFieldModel[];
1320
- /**
1321
- * Get fields by data type
1322
- */
1323
- getFieldsByType(dataType: string): AXPEntityFieldModel[];
1324
1526
  /**
1325
1527
  * Get required fields
1326
1528
  */
@@ -1386,6 +1588,110 @@ declare class AXPEntityModel {
1386
1588
  toDefinition(): AXPEntityDefinition;
1387
1589
  }
1388
1590
 
1591
+ /**
1592
+ * Runtime model for standalone relation definitions.
1593
+ * Relations live in their own collection; join when needed.
1594
+ */
1595
+ declare class AXPRelationModel {
1596
+ readonly type: AXPRelationshipCardinality;
1597
+ readonly kind: AXPRelationshipKind;
1598
+ readonly target: {
1599
+ aggregate: string;
1600
+ entity: string;
1601
+ key: string;
1602
+ };
1603
+ readonly source: {
1604
+ aggregate: string;
1605
+ entity: string;
1606
+ key: string;
1607
+ };
1608
+ readonly isRequired: boolean;
1609
+ readonly parent: any;
1610
+ constructor(definition: AXPRelationDefinition, parent: any);
1611
+ /**
1612
+ * Check if relation is one-to-one
1613
+ */
1614
+ isOneToOne(): boolean;
1615
+ /**
1616
+ * Check if relation is one-to-many
1617
+ */
1618
+ isOneToMany(): boolean;
1619
+ /**
1620
+ * Check if relation is many-to-many
1621
+ */
1622
+ isManyToMany(): boolean;
1623
+ /**
1624
+ * Check if relation is association
1625
+ */
1626
+ isAssociation(): boolean;
1627
+ /**
1628
+ * Check if relation is composition
1629
+ */
1630
+ isComposition(): boolean;
1631
+ /**
1632
+ * Check if relation is aggregation
1633
+ */
1634
+ isAggregation(): boolean;
1635
+ /**
1636
+ * Get parent aggregate
1637
+ */
1638
+ getAggregate(): any;
1639
+ /**
1640
+ * Get parent module
1641
+ */
1642
+ getModule(): any;
1643
+ /**
1644
+ * Get full path (module.aggregate.relation)
1645
+ */
1646
+ getPath(): string;
1647
+ /**
1648
+ * Get relation description
1649
+ */
1650
+ getDescription(): string;
1651
+ /**
1652
+ * Get cardinality description
1653
+ */
1654
+ getCardinalityDescription(): string;
1655
+ /**
1656
+ * Get kind description
1657
+ */
1658
+ getKindDescription(): string;
1659
+ /**
1660
+ * Get relation summary
1661
+ */
1662
+ getSummary(): string;
1663
+ /**
1664
+ * Validate the relation structure
1665
+ */
1666
+ validate(): string[];
1667
+ /**
1668
+ * Get relation characteristics
1669
+ */
1670
+ getCharacteristics(): {
1671
+ type: string;
1672
+ kind: string;
1673
+ required: boolean;
1674
+ isOwning: boolean;
1675
+ isNavigable: boolean;
1676
+ };
1677
+ /**
1678
+ * Check if relation involves entity
1679
+ */
1680
+ involvesEntity(entityName: string): boolean;
1681
+ /**
1682
+ * Check if relation targets aggregate
1683
+ */
1684
+ targetsAggregate(aggregateName: string): boolean;
1685
+ /**
1686
+ * Get the other entity in the relation
1687
+ */
1688
+ getOtherEntity(entityName: string): string | null;
1689
+ /**
1690
+ * Convert back to interface definition (AXPRelationDefinition with full source/target)
1691
+ */
1692
+ toDefinition(): AXPRelationDefinition;
1693
+ }
1694
+
1389
1695
  /**
1390
1696
  * Helper utility class for working with module models
1391
1697
  *
@@ -1428,9 +1734,9 @@ declare class AXPModuleHelper {
1428
1734
  */
1429
1735
  static findFieldsWithDefaultValues(module: AXPModuleModel): AXPEntityFieldModel[];
1430
1736
  /**
1431
- * @deprecated Use AXPDomainService with field schema queries instead
1737
+ * @deprecated Use AXPDomainService with registered property name queries instead
1432
1738
  */
1433
- static findFieldsBySchema(module: AXPModuleModel, schemaName: string): AXPEntityFieldModel[];
1739
+ static findFieldsByRegisteredPropertyName(module: AXPModuleModel, propertyName: string): AXPEntityFieldModel[];
1434
1740
  /**
1435
1741
  * @deprecated Use module.validate() method instead
1436
1742
  */
@@ -1575,7 +1881,7 @@ declare class AXPDomainRegistry {
1575
1881
  private readonly _aggregateMiddleware;
1576
1882
  private readonly _entityMiddleware;
1577
1883
  private _loaders;
1578
- private readonly schemaService;
1884
+ private readonly propertyService;
1579
1885
  /**
1580
1886
  * Resolve a domain object by path with full middleware processing.
1581
1887
  * Supports definition-level caching with fresh model creation.
@@ -2043,5 +2349,5 @@ declare function provideDomainMiddleware(config: {
2043
2349
  entities?: AXPDomainMiddleware[];
2044
2350
  }): EnvironmentProviders;
2045
2351
 
2046
- export { AXPAggregateModel, AXPDomainMiddlewareContext, AXPDomainModule, AXPDomainRegistry, AXPDomainService, AXPEntityCommandScope, AXPEntityFieldModel, AXPEntityModel, AXPEntityType, AXPModuleHelper, AXPModuleModel, AXPRelationModel, AXPRelationshipCardinality, AXPRelationshipKind, AXPSchemaMiddlewareContext, AXPSchemaModel, AXPSchemaRegistry, AXPSchemaService, AXP_AGGREGATE_MIDDLEWARE_SETUP, AXP_ENTITY_CRUD_SETUP, AXP_ENTITY_MIDDLEWARE_SETUP, AXP_MODULE_MIDDLEWARE_SETUP, AXP_SCHEMA_EXTENSION, AXP_SCHEMA_LOADER_SETUP, AXP_SCHEMA_MIDDLEWARE_SETUP, AXP_SCHEMA_SETUP, provideAggregateMiddleware, provideDomainLoader, provideDomainLoaders, provideDomainMiddleware, provideEntity, provideEntityMiddleware, provideModuleMiddleware, provideSchema, provideSchemaLoaders, provideSchemaMiddleware, provideSchemaSetups, provideSchemasFromFactory };
2047
- export type { AXPAggregateDefinition, AXPAggregateEntityList, AXPAggregateRelationDefinition, AXPDomainAction, AXPDomainDefinition, AXPDomainLoader, AXPDomainLoaderConfig, AXPDomainMiddleware, AXPDomainPathInfo, AXPEntityDefinition, AXPEntityFieldDefinition, AXPEntityFieldFeatures, AXPModuleDefinition, AXPRegisteredSchema, AXPSchemaDataType, AXPSchemaDefinition, AXPSchemaEntry, AXPSchemaFeatures, AXPSchemaInterface, AXPSchemaLoader, AXPSchemaLoaderConfig, AXPSchemaMiddleware, AXPSchemaMiddlewareEntry, AXPSchemaRegistrationOptions };
2352
+ export { AXPAggregateModel, AXPDomainActionSide, AXPDomainMiddlewareContext, AXPDomainModule, AXPDomainRegistry, AXPDomainService, AXPEntityCommandScope, AXPEntityFieldModel, AXPEntityModel, AXPEntityType, AXPModuleHelper, AXPModuleModel, AXPPropertyMiddlewareContext, AXPPropertyModel, AXPPropertyRegistry, AXPPropertyService, AXPRelationModel, AXPRelationshipCardinality, AXPRelationshipKind, AXP_AGGREGATE_MIDDLEWARE_SETUP, AXP_ENTITY_CRUD_SETUP, AXP_ENTITY_DEFINITION_CRUD_SERVICE, AXP_ENTITY_MIDDLEWARE_SETUP, AXP_MODULE_MIDDLEWARE_SETUP, AXP_PROPERTY_EXTENSION, AXP_PROPERTY_LOADER_SETUP, AXP_PROPERTY_MIDDLEWARE_SETUP, AXP_PROPERTY_SETUP, provideAggregateMiddleware, provideDomainLoader, provideDomainLoaders, provideDomainMiddleware, provideEntityMiddleware, provideModuleMiddleware, providePropertiesFromFactory, provideProperty, providePropertyLoaders, providePropertyMiddleware, providePropertySetups, toPropertyDefinition };
2353
+ export type { AXPAggregateDefinition, AXPAggregateEntityList, AXPCommandCapability, AXPCommandRegistryRecord, AXPDomainAction, AXPDomainDefinition, AXPDomainLoader, AXPDomainLoaderConfig, AXPDomainMiddleware, AXPDomainPathInfo, AXPDomainRealtedModuleEntity, AXPEntityDefinition, AXPEntityDefinitionCrudService, AXPEntityPropertyDefinition, AXPEntityPropertyFeatures, AXPInterfaceCategory, AXPInterfaceDefinition, AXPInterfaceDefinitionValue, AXPMenuDefinitionEntityListRef, AXPMenuDefinitionRecord, AXPMenuDefinitionStoredCommand, AXPModuleDefinition, AXPPermissionDefinitionRecord, AXPPermissionGroupDefinitionRecord, AXPPermissionLeafRecord, AXPPluginDefinition, AXPPluginDefinitionValue, AXPPropertyDefinition, AXPPropertyEntry, AXPPropertyFeatures, AXPPropertyLoader, AXPPropertyLoaderConfig, AXPPropertyMiddleware, AXPPropertyMiddlewareEntry, AXPPropertyRegistrationOptions, AXPQueryRegistryRecord, AXPRegisteredProperty, AXPRelationDefinition, AXPValidationRuleDefinition, AXPValidationRuleValue, AXPValidationRunAt };