@praxisui/metadata-editor 9.0.0-beta.9 → 9.0.0-beta.90
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/ai/component-registry.json +2067 -0
- package/fesm2022/praxisui-metadata-editor.mjs +1887 -186
- package/package.json +10 -6
- package/types/praxisui-metadata-editor.d.ts +22 -4
|
@@ -0,0 +1,2067 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"generatedAt": "2026-07-24T12:32:39.440Z",
|
|
4
|
+
"packageName": "@praxisui/metadata-editor",
|
|
5
|
+
"packageVersion": "9.0.0-beta.90",
|
|
6
|
+
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
|
+
"sourceRegistryVersion": "1.0.0",
|
|
8
|
+
"componentCount": 1,
|
|
9
|
+
"components": {
|
|
10
|
+
"praxis-metadata-editor": {
|
|
11
|
+
"id": "praxis-metadata-editor",
|
|
12
|
+
"description": "Editor for field metadata and schema helpers.",
|
|
13
|
+
"inputs": [
|
|
14
|
+
{
|
|
15
|
+
"name": "controlType",
|
|
16
|
+
"type": "FieldControlType",
|
|
17
|
+
"required": false,
|
|
18
|
+
"description": "Tipo de controle do campo alvo.",
|
|
19
|
+
"label": "Tipo de controle"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "seed",
|
|
23
|
+
"type": "Partial<FieldDefinition>",
|
|
24
|
+
"required": false,
|
|
25
|
+
"description": "Valores iniciais do FieldDefinition para hidratar o editor.",
|
|
26
|
+
"label": "Seed"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"outputs": [
|
|
30
|
+
{
|
|
31
|
+
"name": "applied",
|
|
32
|
+
"type": "Partial<FieldDefinition>",
|
|
33
|
+
"required": false,
|
|
34
|
+
"description": "Disparado quando o patch de metadata e aplicado.",
|
|
35
|
+
"label": "Aplicado"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "cancel",
|
|
39
|
+
"type": "void",
|
|
40
|
+
"required": false,
|
|
41
|
+
"description": "Disparado quando o usuario cancela a edicao.",
|
|
42
|
+
"label": "Cancelar"
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"configSchemaId": null,
|
|
46
|
+
"selector": "praxis-field-metadata-editor",
|
|
47
|
+
"friendlyName": "Praxis Metadata Editor",
|
|
48
|
+
"tags": [
|
|
49
|
+
"widget",
|
|
50
|
+
"metadata",
|
|
51
|
+
"configurable"
|
|
52
|
+
],
|
|
53
|
+
"lib": "@praxisui/metadata-editor",
|
|
54
|
+
"source": "projects/praxis-metadata-editor/src/lib/praxis-metadata-editor.metadata.ts",
|
|
55
|
+
"exportName": "PRAXIS_METADATA_EDITOR_COMPONENT_METADATA",
|
|
56
|
+
"authoringManifest": {
|
|
57
|
+
"schemaVersion": "1.0.0",
|
|
58
|
+
"componentId": "praxis-metadata-editor",
|
|
59
|
+
"ownerPackage": "@praxisui/metadata-editor",
|
|
60
|
+
"configSchemaId": "FieldMetadata",
|
|
61
|
+
"manifestVersion": "1.0.0",
|
|
62
|
+
"runtimeInputs": [
|
|
63
|
+
{
|
|
64
|
+
"name": "controlType",
|
|
65
|
+
"type": "FieldControlType",
|
|
66
|
+
"description": "Canonical control type used to resolve editor property coverage."
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "seed",
|
|
70
|
+
"type": "Partial<FieldMetadata | FieldDefinition>",
|
|
71
|
+
"description": "Initial canonical field metadata used to hydrate the editor."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "fields",
|
|
75
|
+
"type": "Array<FieldMetadata | FieldDefinition>",
|
|
76
|
+
"description": "Available fields used by cascade authoring and context validation."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "properties",
|
|
80
|
+
"type": "EditorProperty[]",
|
|
81
|
+
"description": "Renderer property catalog resolved from ConfigRegistryService."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "form",
|
|
85
|
+
"type": "FormGroup",
|
|
86
|
+
"description": "Dynamic form generated from canonical editor properties by DynamicFormFactoryService."
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"editableTargets": [
|
|
90
|
+
{
|
|
91
|
+
"kind": "fieldMetadata",
|
|
92
|
+
"resolver": "field-metadata-json-path",
|
|
93
|
+
"description": "Canonical FieldMetadata root and property paths."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"kind": "controlType",
|
|
97
|
+
"resolver": "dynamic-fields-control-type-discovery",
|
|
98
|
+
"description": "Control type selected from dynamic-fields discovery and editor config registry."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"kind": "optionSource",
|
|
102
|
+
"resolver": "field-metadata-option-source",
|
|
103
|
+
"description": "Canonical option source including backend x-ui option source fields where applicable."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"kind": "cascade",
|
|
107
|
+
"resolver": "metadata-editor-cascade-rules",
|
|
108
|
+
"description": "Cascade dependencies and dependency filter mappings edited through CascadeManagerTab."
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"kind": "renderer",
|
|
112
|
+
"resolver": "metadata-editor-renderer-property",
|
|
113
|
+
"description": "Dynamic editor renderer property coverage and editor component mapping."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"kind": "validation",
|
|
117
|
+
"resolver": "field-metadata-validation-rules",
|
|
118
|
+
"description": "Field validation rules and contextual validators."
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"kind": "dateRangeShortcuts",
|
|
122
|
+
"resolver": "metadata-editor-date-range-shortcut-catalog",
|
|
123
|
+
"description": "Governed static date range shortcut catalog for dateRange and inlineDateRange metadata."
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"kind": "contextHint",
|
|
127
|
+
"resolver": "metadata-editor-context-hints",
|
|
128
|
+
"description": "Authoring hints, help text and contextual guidance for metadata editors."
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"kind": "normalization",
|
|
132
|
+
"resolver": "metadata-editor-schema-normalizer",
|
|
133
|
+
"description": "Schema normalization and seed hydration rules."
|
|
134
|
+
}
|
|
135
|
+
],
|
|
136
|
+
"operations": [
|
|
137
|
+
{
|
|
138
|
+
"operationId": "fieldMetadata.property.set",
|
|
139
|
+
"title": "Set FieldMetadata property",
|
|
140
|
+
"scope": "fieldMetadataPath",
|
|
141
|
+
"targetKind": "fieldMetadata",
|
|
142
|
+
"target": {
|
|
143
|
+
"kind": "fieldMetadata",
|
|
144
|
+
"resolver": "field-metadata-json-path",
|
|
145
|
+
"ambiguityPolicy": "fail",
|
|
146
|
+
"required": true
|
|
147
|
+
},
|
|
148
|
+
"inputSchema": {
|
|
149
|
+
"type": "object",
|
|
150
|
+
"required": [
|
|
151
|
+
"path",
|
|
152
|
+
"value"
|
|
153
|
+
],
|
|
154
|
+
"properties": {
|
|
155
|
+
"path": {
|
|
156
|
+
"enum": [
|
|
157
|
+
"name",
|
|
158
|
+
"label",
|
|
159
|
+
"description",
|
|
160
|
+
"controlType",
|
|
161
|
+
"placeholder",
|
|
162
|
+
"defaultValue",
|
|
163
|
+
"group",
|
|
164
|
+
"order",
|
|
165
|
+
"required",
|
|
166
|
+
"disabled",
|
|
167
|
+
"readOnly",
|
|
168
|
+
"hidden",
|
|
169
|
+
"source",
|
|
170
|
+
"transient",
|
|
171
|
+
"submitPolicy",
|
|
172
|
+
"hint",
|
|
173
|
+
"helpText",
|
|
174
|
+
"tooltip",
|
|
175
|
+
"valuePresentation",
|
|
176
|
+
"presentation",
|
|
177
|
+
"presentation.presenter",
|
|
178
|
+
"presentation.tone",
|
|
179
|
+
"presentation.appearance",
|
|
180
|
+
"presentation.icon",
|
|
181
|
+
"presentation.label",
|
|
182
|
+
"presentation.badge",
|
|
183
|
+
"presentation.tooltip",
|
|
184
|
+
"presentationRules",
|
|
185
|
+
"options",
|
|
186
|
+
"optionSource",
|
|
187
|
+
"validators",
|
|
188
|
+
"conditionalRequired",
|
|
189
|
+
"conditionalDisplay",
|
|
190
|
+
"visibleIn",
|
|
191
|
+
"ariaLabel",
|
|
192
|
+
"ariaDescribedBy"
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
"value": {},
|
|
196
|
+
"merge": {
|
|
197
|
+
"type": "boolean"
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
"effects": [
|
|
202
|
+
{
|
|
203
|
+
"kind": "compile-domain-patch",
|
|
204
|
+
"handler": "metadata-field-property-set",
|
|
205
|
+
"handlerContract": {
|
|
206
|
+
"reads": [
|
|
207
|
+
"fieldMetadata",
|
|
208
|
+
"fieldMetadataPath",
|
|
209
|
+
"SchemaNormalizerService"
|
|
210
|
+
],
|
|
211
|
+
"writes": [
|
|
212
|
+
"fieldMetadata"
|
|
213
|
+
],
|
|
214
|
+
"identityKeys": [
|
|
215
|
+
"field.name",
|
|
216
|
+
"path"
|
|
217
|
+
],
|
|
218
|
+
"inputSchema": {
|
|
219
|
+
"type": "object",
|
|
220
|
+
"required": [
|
|
221
|
+
"path",
|
|
222
|
+
"value"
|
|
223
|
+
],
|
|
224
|
+
"properties": {
|
|
225
|
+
"path": {
|
|
226
|
+
"enum": [
|
|
227
|
+
"name",
|
|
228
|
+
"label",
|
|
229
|
+
"description",
|
|
230
|
+
"controlType",
|
|
231
|
+
"placeholder",
|
|
232
|
+
"defaultValue",
|
|
233
|
+
"group",
|
|
234
|
+
"order",
|
|
235
|
+
"required",
|
|
236
|
+
"disabled",
|
|
237
|
+
"readOnly",
|
|
238
|
+
"hidden",
|
|
239
|
+
"source",
|
|
240
|
+
"transient",
|
|
241
|
+
"submitPolicy",
|
|
242
|
+
"hint",
|
|
243
|
+
"helpText",
|
|
244
|
+
"tooltip",
|
|
245
|
+
"valuePresentation",
|
|
246
|
+
"presentation",
|
|
247
|
+
"presentation.presenter",
|
|
248
|
+
"presentation.tone",
|
|
249
|
+
"presentation.appearance",
|
|
250
|
+
"presentation.icon",
|
|
251
|
+
"presentation.label",
|
|
252
|
+
"presentation.badge",
|
|
253
|
+
"presentation.tooltip",
|
|
254
|
+
"presentationRules",
|
|
255
|
+
"options",
|
|
256
|
+
"optionSource",
|
|
257
|
+
"validators",
|
|
258
|
+
"conditionalRequired",
|
|
259
|
+
"conditionalDisplay",
|
|
260
|
+
"visibleIn",
|
|
261
|
+
"ariaLabel",
|
|
262
|
+
"ariaDescribedBy"
|
|
263
|
+
]
|
|
264
|
+
},
|
|
265
|
+
"value": {},
|
|
266
|
+
"merge": {
|
|
267
|
+
"type": "boolean"
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
"failureModes": [
|
|
272
|
+
"unknown-field-metadata-path",
|
|
273
|
+
"non-canonical-shape",
|
|
274
|
+
"readonly-field",
|
|
275
|
+
"normalization-failed"
|
|
276
|
+
],
|
|
277
|
+
"description": "Sets a canonical FieldMetadata property through a governed metadata path and re-runs schema normalization."
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
],
|
|
281
|
+
"destructive": false,
|
|
282
|
+
"requiresConfirmation": false,
|
|
283
|
+
"validators": [
|
|
284
|
+
"field-metadata-shape-canonical",
|
|
285
|
+
"field-path-supported-by-editor",
|
|
286
|
+
"metadata-round-trip"
|
|
287
|
+
],
|
|
288
|
+
"affectedPaths": [
|
|
289
|
+
"fieldMetadata"
|
|
290
|
+
],
|
|
291
|
+
"submissionImpact": "affects-schema-backed-data",
|
|
292
|
+
"preconditions": [
|
|
293
|
+
"field-metadata-loaded"
|
|
294
|
+
]
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"operationId": "controlType.set",
|
|
298
|
+
"title": "Set control type",
|
|
299
|
+
"scope": "controlType",
|
|
300
|
+
"targetKind": "controlType",
|
|
301
|
+
"target": {
|
|
302
|
+
"kind": "controlType",
|
|
303
|
+
"resolver": "dynamic-fields-control-type-discovery",
|
|
304
|
+
"ambiguityPolicy": "fail",
|
|
305
|
+
"required": true
|
|
306
|
+
},
|
|
307
|
+
"inputSchema": {
|
|
308
|
+
"type": "object",
|
|
309
|
+
"required": [
|
|
310
|
+
"controlType"
|
|
311
|
+
],
|
|
312
|
+
"properties": {
|
|
313
|
+
"controlType": {
|
|
314
|
+
"type": "string"
|
|
315
|
+
},
|
|
316
|
+
"preserveCompatibleProperties": {
|
|
317
|
+
"type": "boolean"
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
"effects": [
|
|
322
|
+
{
|
|
323
|
+
"kind": "compile-domain-patch",
|
|
324
|
+
"handler": "metadata-control-type-set",
|
|
325
|
+
"handlerContract": {
|
|
326
|
+
"reads": [
|
|
327
|
+
"FieldControlType",
|
|
328
|
+
"ConfigRegistryService",
|
|
329
|
+
"dynamic-fields-discovery",
|
|
330
|
+
"fieldMetadata"
|
|
331
|
+
],
|
|
332
|
+
"writes": [
|
|
333
|
+
"fieldMetadata.controlType",
|
|
334
|
+
"properties",
|
|
335
|
+
"normalizedSeed"
|
|
336
|
+
],
|
|
337
|
+
"identityKeys": [
|
|
338
|
+
"field.name",
|
|
339
|
+
"controlType"
|
|
340
|
+
],
|
|
341
|
+
"inputSchema": {
|
|
342
|
+
"type": "object",
|
|
343
|
+
"required": [
|
|
344
|
+
"controlType"
|
|
345
|
+
],
|
|
346
|
+
"properties": {
|
|
347
|
+
"controlType": {
|
|
348
|
+
"type": "string"
|
|
349
|
+
},
|
|
350
|
+
"preserveCompatibleProperties": {
|
|
351
|
+
"type": "boolean"
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
"failureModes": [
|
|
356
|
+
"control-type-not-discovered",
|
|
357
|
+
"editor-coverage-missing",
|
|
358
|
+
"incompatible-metadata-preservation"
|
|
359
|
+
],
|
|
360
|
+
"description": "Changes control type only when dynamic-fields discovery and metadata-editor config registry both expose renderer/editor coverage."
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
],
|
|
364
|
+
"destructive": false,
|
|
365
|
+
"requiresConfirmation": false,
|
|
366
|
+
"validators": [
|
|
367
|
+
"control-type-exists-in-discovery",
|
|
368
|
+
"editor-coverage-exists",
|
|
369
|
+
"metadata-round-trip"
|
|
370
|
+
],
|
|
371
|
+
"affectedPaths": [
|
|
372
|
+
"fieldMetadata.controlType",
|
|
373
|
+
"properties",
|
|
374
|
+
"normalizedSeed"
|
|
375
|
+
],
|
|
376
|
+
"submissionImpact": "affects-schema-backed-data",
|
|
377
|
+
"preconditions": [
|
|
378
|
+
"dynamic-fields-discovery-loaded"
|
|
379
|
+
]
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"operationId": "optionSource.configure",
|
|
383
|
+
"title": "Configure option source",
|
|
384
|
+
"scope": "dataBinding",
|
|
385
|
+
"targetKind": "optionSource",
|
|
386
|
+
"target": {
|
|
387
|
+
"kind": "optionSource",
|
|
388
|
+
"resolver": "field-metadata-option-source",
|
|
389
|
+
"ambiguityPolicy": "fail",
|
|
390
|
+
"required": false
|
|
391
|
+
},
|
|
392
|
+
"inputSchema": {
|
|
393
|
+
"type": "object",
|
|
394
|
+
"minProperties": 1,
|
|
395
|
+
"properties": {
|
|
396
|
+
"kind": {
|
|
397
|
+
"enum": [
|
|
398
|
+
"static",
|
|
399
|
+
"remote",
|
|
400
|
+
"resource",
|
|
401
|
+
"lookup"
|
|
402
|
+
]
|
|
403
|
+
},
|
|
404
|
+
"resource": {
|
|
405
|
+
"type": "string"
|
|
406
|
+
},
|
|
407
|
+
"endpoint": {
|
|
408
|
+
"type": "string"
|
|
409
|
+
},
|
|
410
|
+
"valueField": {
|
|
411
|
+
"type": "string"
|
|
412
|
+
},
|
|
413
|
+
"labelField": {
|
|
414
|
+
"type": "string"
|
|
415
|
+
},
|
|
416
|
+
"dependsOn": {
|
|
417
|
+
"type": "string"
|
|
418
|
+
},
|
|
419
|
+
"dependencyFilterMap": {
|
|
420
|
+
"type": "object"
|
|
421
|
+
},
|
|
422
|
+
"display": {
|
|
423
|
+
"type": "object",
|
|
424
|
+
"properties": {
|
|
425
|
+
"preset": {
|
|
426
|
+
"enum": [
|
|
427
|
+
"compact",
|
|
428
|
+
"rich",
|
|
429
|
+
"directory",
|
|
430
|
+
"status",
|
|
431
|
+
"reference",
|
|
432
|
+
"hierarchical"
|
|
433
|
+
]
|
|
434
|
+
},
|
|
435
|
+
"usage": {
|
|
436
|
+
"enum": [
|
|
437
|
+
"form",
|
|
438
|
+
"filter",
|
|
439
|
+
"table-cell",
|
|
440
|
+
"dashboard",
|
|
441
|
+
"wizard",
|
|
442
|
+
"review"
|
|
443
|
+
]
|
|
444
|
+
},
|
|
445
|
+
"density": {
|
|
446
|
+
"enum": [
|
|
447
|
+
"compact",
|
|
448
|
+
"comfortable",
|
|
449
|
+
"rich"
|
|
450
|
+
]
|
|
451
|
+
},
|
|
452
|
+
"selectedLayout": {
|
|
453
|
+
"enum": [
|
|
454
|
+
"card",
|
|
455
|
+
"inline",
|
|
456
|
+
"compact",
|
|
457
|
+
"token"
|
|
458
|
+
]
|
|
459
|
+
},
|
|
460
|
+
"resultLayout": {
|
|
461
|
+
"enum": [
|
|
462
|
+
"list",
|
|
463
|
+
"denseList",
|
|
464
|
+
"table",
|
|
465
|
+
"card"
|
|
466
|
+
]
|
|
467
|
+
},
|
|
468
|
+
"primaryPropertyPath": {
|
|
469
|
+
"type": "string"
|
|
470
|
+
},
|
|
471
|
+
"fields": {
|
|
472
|
+
"type": "array"
|
|
473
|
+
},
|
|
474
|
+
"secondaryPropertyPaths": {
|
|
475
|
+
"type": "array"
|
|
476
|
+
},
|
|
477
|
+
"badgePropertyPaths": {
|
|
478
|
+
"type": "array"
|
|
479
|
+
},
|
|
480
|
+
"statusToneMap": {
|
|
481
|
+
"type": "object"
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
"detail": {
|
|
486
|
+
"type": "object",
|
|
487
|
+
"properties": {
|
|
488
|
+
"kind": {
|
|
489
|
+
"enum": [
|
|
490
|
+
"surface",
|
|
491
|
+
"route",
|
|
492
|
+
"href"
|
|
493
|
+
]
|
|
494
|
+
},
|
|
495
|
+
"surfaceId": {
|
|
496
|
+
"type": "string"
|
|
497
|
+
},
|
|
498
|
+
"presentation": {
|
|
499
|
+
"enum": [
|
|
500
|
+
"drawer",
|
|
501
|
+
"modal"
|
|
502
|
+
]
|
|
503
|
+
},
|
|
504
|
+
"preferredWidget": {
|
|
505
|
+
"type": "string"
|
|
506
|
+
},
|
|
507
|
+
"mode": {
|
|
508
|
+
"enum": [
|
|
509
|
+
"view",
|
|
510
|
+
"edit",
|
|
511
|
+
"create"
|
|
512
|
+
]
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
},
|
|
516
|
+
"options": {
|
|
517
|
+
"type": "array"
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
},
|
|
521
|
+
"effects": [
|
|
522
|
+
{
|
|
523
|
+
"kind": "compile-domain-patch",
|
|
524
|
+
"handler": "metadata-option-source-configure",
|
|
525
|
+
"handlerContract": {
|
|
526
|
+
"reads": [
|
|
527
|
+
"fieldMetadata.optionSource",
|
|
528
|
+
"backend.x-ui.optionSource",
|
|
529
|
+
"SchemaNormalizerService"
|
|
530
|
+
],
|
|
531
|
+
"writes": [
|
|
532
|
+
"fieldMetadata.optionSource"
|
|
533
|
+
],
|
|
534
|
+
"identityKeys": [
|
|
535
|
+
"field.name",
|
|
536
|
+
"optionSource.kind",
|
|
537
|
+
"optionSource.resource"
|
|
538
|
+
],
|
|
539
|
+
"inputSchema": {
|
|
540
|
+
"type": "object",
|
|
541
|
+
"minProperties": 1,
|
|
542
|
+
"properties": {
|
|
543
|
+
"kind": {
|
|
544
|
+
"enum": [
|
|
545
|
+
"static",
|
|
546
|
+
"remote",
|
|
547
|
+
"resource",
|
|
548
|
+
"lookup"
|
|
549
|
+
]
|
|
550
|
+
},
|
|
551
|
+
"resource": {
|
|
552
|
+
"type": "string"
|
|
553
|
+
},
|
|
554
|
+
"endpoint": {
|
|
555
|
+
"type": "string"
|
|
556
|
+
},
|
|
557
|
+
"valueField": {
|
|
558
|
+
"type": "string"
|
|
559
|
+
},
|
|
560
|
+
"labelField": {
|
|
561
|
+
"type": "string"
|
|
562
|
+
},
|
|
563
|
+
"dependsOn": {
|
|
564
|
+
"type": "string"
|
|
565
|
+
},
|
|
566
|
+
"dependencyFilterMap": {
|
|
567
|
+
"type": "object"
|
|
568
|
+
},
|
|
569
|
+
"display": {
|
|
570
|
+
"type": "object",
|
|
571
|
+
"properties": {
|
|
572
|
+
"preset": {
|
|
573
|
+
"enum": [
|
|
574
|
+
"compact",
|
|
575
|
+
"rich",
|
|
576
|
+
"directory",
|
|
577
|
+
"status",
|
|
578
|
+
"reference",
|
|
579
|
+
"hierarchical"
|
|
580
|
+
]
|
|
581
|
+
},
|
|
582
|
+
"usage": {
|
|
583
|
+
"enum": [
|
|
584
|
+
"form",
|
|
585
|
+
"filter",
|
|
586
|
+
"table-cell",
|
|
587
|
+
"dashboard",
|
|
588
|
+
"wizard",
|
|
589
|
+
"review"
|
|
590
|
+
]
|
|
591
|
+
},
|
|
592
|
+
"density": {
|
|
593
|
+
"enum": [
|
|
594
|
+
"compact",
|
|
595
|
+
"comfortable",
|
|
596
|
+
"rich"
|
|
597
|
+
]
|
|
598
|
+
},
|
|
599
|
+
"selectedLayout": {
|
|
600
|
+
"enum": [
|
|
601
|
+
"card",
|
|
602
|
+
"inline",
|
|
603
|
+
"compact",
|
|
604
|
+
"token"
|
|
605
|
+
]
|
|
606
|
+
},
|
|
607
|
+
"resultLayout": {
|
|
608
|
+
"enum": [
|
|
609
|
+
"list",
|
|
610
|
+
"denseList",
|
|
611
|
+
"table",
|
|
612
|
+
"card"
|
|
613
|
+
]
|
|
614
|
+
},
|
|
615
|
+
"primaryPropertyPath": {
|
|
616
|
+
"type": "string"
|
|
617
|
+
},
|
|
618
|
+
"fields": {
|
|
619
|
+
"type": "array"
|
|
620
|
+
},
|
|
621
|
+
"secondaryPropertyPaths": {
|
|
622
|
+
"type": "array"
|
|
623
|
+
},
|
|
624
|
+
"badgePropertyPaths": {
|
|
625
|
+
"type": "array"
|
|
626
|
+
},
|
|
627
|
+
"statusToneMap": {
|
|
628
|
+
"type": "object"
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
},
|
|
632
|
+
"detail": {
|
|
633
|
+
"type": "object",
|
|
634
|
+
"properties": {
|
|
635
|
+
"kind": {
|
|
636
|
+
"enum": [
|
|
637
|
+
"surface",
|
|
638
|
+
"route",
|
|
639
|
+
"href"
|
|
640
|
+
]
|
|
641
|
+
},
|
|
642
|
+
"surfaceId": {
|
|
643
|
+
"type": "string"
|
|
644
|
+
},
|
|
645
|
+
"presentation": {
|
|
646
|
+
"enum": [
|
|
647
|
+
"drawer",
|
|
648
|
+
"modal"
|
|
649
|
+
]
|
|
650
|
+
},
|
|
651
|
+
"preferredWidget": {
|
|
652
|
+
"type": "string"
|
|
653
|
+
},
|
|
654
|
+
"mode": {
|
|
655
|
+
"enum": [
|
|
656
|
+
"view",
|
|
657
|
+
"edit",
|
|
658
|
+
"create"
|
|
659
|
+
]
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
},
|
|
663
|
+
"options": {
|
|
664
|
+
"type": "array"
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
},
|
|
668
|
+
"failureModes": [
|
|
669
|
+
"invalid-option-source-kind",
|
|
670
|
+
"remote-source-missing-governed-resource",
|
|
671
|
+
"dependency-filter-map-invalid"
|
|
672
|
+
],
|
|
673
|
+
"description": "Configures canonical optionSource fields while preserving backend x-ui dependsOn and dependencyFilterMap semantics."
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
],
|
|
677
|
+
"destructive": false,
|
|
678
|
+
"requiresConfirmation": false,
|
|
679
|
+
"validators": [
|
|
680
|
+
"option-source-shape-canonical",
|
|
681
|
+
"remote-option-source-governed",
|
|
682
|
+
"cascade-backend-shape-preserved",
|
|
683
|
+
"metadata-round-trip"
|
|
684
|
+
],
|
|
685
|
+
"affectedPaths": [
|
|
686
|
+
"fieldMetadata.optionSource"
|
|
687
|
+
],
|
|
688
|
+
"submissionImpact": "affects-remote-binding",
|
|
689
|
+
"preconditions": [
|
|
690
|
+
"field-metadata-loaded"
|
|
691
|
+
]
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
"operationId": "cascade.configure",
|
|
695
|
+
"title": "Configure cascade rule",
|
|
696
|
+
"scope": "interaction",
|
|
697
|
+
"targetKind": "cascade",
|
|
698
|
+
"target": {
|
|
699
|
+
"kind": "cascade",
|
|
700
|
+
"resolver": "metadata-editor-cascade-rules",
|
|
701
|
+
"ambiguityPolicy": "fail",
|
|
702
|
+
"required": false
|
|
703
|
+
},
|
|
704
|
+
"inputSchema": {
|
|
705
|
+
"type": "object",
|
|
706
|
+
"required": [
|
|
707
|
+
"dependentField"
|
|
708
|
+
],
|
|
709
|
+
"properties": {
|
|
710
|
+
"dependentField": {
|
|
711
|
+
"type": "string"
|
|
712
|
+
},
|
|
713
|
+
"sourceField": {
|
|
714
|
+
"type": "string"
|
|
715
|
+
},
|
|
716
|
+
"strategy": {
|
|
717
|
+
"enum": [
|
|
718
|
+
"replace",
|
|
719
|
+
"merge"
|
|
720
|
+
]
|
|
721
|
+
},
|
|
722
|
+
"debounceMs": {
|
|
723
|
+
"type": "number"
|
|
724
|
+
},
|
|
725
|
+
"loadMode": {
|
|
726
|
+
"enum": [
|
|
727
|
+
"immediate",
|
|
728
|
+
"manual",
|
|
729
|
+
"respectLoadOn"
|
|
730
|
+
]
|
|
731
|
+
},
|
|
732
|
+
"dependencyFilterMap": {
|
|
733
|
+
"type": "object"
|
|
734
|
+
},
|
|
735
|
+
"optionSource": {
|
|
736
|
+
"type": "object",
|
|
737
|
+
"properties": {
|
|
738
|
+
"kind": {
|
|
739
|
+
"enum": [
|
|
740
|
+
"static",
|
|
741
|
+
"remote",
|
|
742
|
+
"resource",
|
|
743
|
+
"lookup"
|
|
744
|
+
]
|
|
745
|
+
},
|
|
746
|
+
"resource": {
|
|
747
|
+
"type": "string"
|
|
748
|
+
},
|
|
749
|
+
"endpoint": {
|
|
750
|
+
"type": "string"
|
|
751
|
+
},
|
|
752
|
+
"dependsOn": {
|
|
753
|
+
"type": "string"
|
|
754
|
+
},
|
|
755
|
+
"dependencyFilterMap": {
|
|
756
|
+
"type": "object"
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
},
|
|
762
|
+
"effects": [
|
|
763
|
+
{
|
|
764
|
+
"kind": "compile-domain-patch",
|
|
765
|
+
"handler": "metadata-cascade-configure",
|
|
766
|
+
"handlerContract": {
|
|
767
|
+
"reads": [
|
|
768
|
+
"CascadeManagerTabComponent",
|
|
769
|
+
"CascadeRulesService",
|
|
770
|
+
"fields",
|
|
771
|
+
"fieldMetadata.optionSource",
|
|
772
|
+
"fieldMetadata.dependencyFields",
|
|
773
|
+
"fieldMetadata.dependencyFilterMap"
|
|
774
|
+
],
|
|
775
|
+
"writes": [
|
|
776
|
+
"fieldMetadata.dependencyFields",
|
|
777
|
+
"fieldMetadata.enableDependencyCascade",
|
|
778
|
+
"fieldMetadata.resetOnDependentChange",
|
|
779
|
+
"fieldMetadata.dependencyFilterMap",
|
|
780
|
+
"fieldMetadata.dependencyValuePath",
|
|
781
|
+
"fieldMetadata.dependencyMergeStrategy",
|
|
782
|
+
"fieldMetadata.dependencyDebounceMs",
|
|
783
|
+
"fieldMetadata.dependencyLoadOnChange",
|
|
784
|
+
"fieldMetadata.optionSource.dependsOn",
|
|
785
|
+
"fieldMetadata.optionSource.dependencyFilterMap"
|
|
786
|
+
],
|
|
787
|
+
"identityKeys": [
|
|
788
|
+
"dependentField",
|
|
789
|
+
"sourceField"
|
|
790
|
+
],
|
|
791
|
+
"inputSchema": {
|
|
792
|
+
"type": "object",
|
|
793
|
+
"required": [
|
|
794
|
+
"dependentField"
|
|
795
|
+
],
|
|
796
|
+
"properties": {
|
|
797
|
+
"dependentField": {
|
|
798
|
+
"type": "string"
|
|
799
|
+
},
|
|
800
|
+
"sourceField": {
|
|
801
|
+
"type": "string"
|
|
802
|
+
},
|
|
803
|
+
"strategy": {
|
|
804
|
+
"enum": [
|
|
805
|
+
"replace",
|
|
806
|
+
"merge"
|
|
807
|
+
]
|
|
808
|
+
},
|
|
809
|
+
"debounceMs": {
|
|
810
|
+
"type": "number"
|
|
811
|
+
},
|
|
812
|
+
"loadMode": {
|
|
813
|
+
"enum": [
|
|
814
|
+
"immediate",
|
|
815
|
+
"manual",
|
|
816
|
+
"respectLoadOn"
|
|
817
|
+
]
|
|
818
|
+
},
|
|
819
|
+
"dependencyFilterMap": {
|
|
820
|
+
"type": "object"
|
|
821
|
+
},
|
|
822
|
+
"optionSource": {
|
|
823
|
+
"type": "object",
|
|
824
|
+
"properties": {
|
|
825
|
+
"kind": {
|
|
826
|
+
"enum": [
|
|
827
|
+
"static",
|
|
828
|
+
"remote",
|
|
829
|
+
"resource",
|
|
830
|
+
"lookup"
|
|
831
|
+
]
|
|
832
|
+
},
|
|
833
|
+
"resource": {
|
|
834
|
+
"type": "string"
|
|
835
|
+
},
|
|
836
|
+
"endpoint": {
|
|
837
|
+
"type": "string"
|
|
838
|
+
},
|
|
839
|
+
"dependsOn": {
|
|
840
|
+
"type": "string"
|
|
841
|
+
},
|
|
842
|
+
"dependencyFilterMap": {
|
|
843
|
+
"type": "object"
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
},
|
|
849
|
+
"failureModes": [
|
|
850
|
+
"dependent-field-not-found",
|
|
851
|
+
"source-field-not-found",
|
|
852
|
+
"cascade-cycle-detected",
|
|
853
|
+
"dependency-filter-map-invalid"
|
|
854
|
+
],
|
|
855
|
+
"description": "Applies cascade dependencies through CascadeRulesService using the metadata-editor save contract while preserving backend x-ui optionSource dependency semantics during hydration."
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
],
|
|
859
|
+
"destructive": false,
|
|
860
|
+
"requiresConfirmation": false,
|
|
861
|
+
"validators": [
|
|
862
|
+
"cascade-fields-exist",
|
|
863
|
+
"cascade-cycle-free",
|
|
864
|
+
"cascade-backend-shape-preserved",
|
|
865
|
+
"option-source-shape-canonical",
|
|
866
|
+
"remote-option-source-governed",
|
|
867
|
+
"metadata-round-trip"
|
|
868
|
+
],
|
|
869
|
+
"affectedPaths": [
|
|
870
|
+
"fieldMetadata.dependencyFields",
|
|
871
|
+
"fieldMetadata.enableDependencyCascade",
|
|
872
|
+
"fieldMetadata.resetOnDependentChange",
|
|
873
|
+
"fieldMetadata.dependencyFilterMap",
|
|
874
|
+
"fieldMetadata.dependencyValuePath",
|
|
875
|
+
"fieldMetadata.dependencyMergeStrategy",
|
|
876
|
+
"fieldMetadata.dependencyDebounceMs",
|
|
877
|
+
"fieldMetadata.dependencyLoadOnChange",
|
|
878
|
+
"fieldMetadata.optionSource.dependsOn",
|
|
879
|
+
"fieldMetadata.optionSource.dependencyFilterMap"
|
|
880
|
+
],
|
|
881
|
+
"submissionImpact": "affects-remote-binding",
|
|
882
|
+
"preconditions": [
|
|
883
|
+
"field-list-loaded"
|
|
884
|
+
]
|
|
885
|
+
},
|
|
886
|
+
{
|
|
887
|
+
"operationId": "renderer.configure",
|
|
888
|
+
"title": "Configure renderer coverage",
|
|
889
|
+
"scope": "editorCoverage",
|
|
890
|
+
"targetKind": "renderer",
|
|
891
|
+
"target": {
|
|
892
|
+
"kind": "renderer",
|
|
893
|
+
"resolver": "metadata-editor-renderer-property",
|
|
894
|
+
"ambiguityPolicy": "fail",
|
|
895
|
+
"required": true
|
|
896
|
+
},
|
|
897
|
+
"inputSchema": {
|
|
898
|
+
"type": "object",
|
|
899
|
+
"required": [
|
|
900
|
+
"propertyName",
|
|
901
|
+
"editorType"
|
|
902
|
+
],
|
|
903
|
+
"properties": {
|
|
904
|
+
"propertyName": {
|
|
905
|
+
"type": "string"
|
|
906
|
+
},
|
|
907
|
+
"editorType": {
|
|
908
|
+
"type": "string"
|
|
909
|
+
},
|
|
910
|
+
"group": {
|
|
911
|
+
"type": "string"
|
|
912
|
+
},
|
|
913
|
+
"required": {
|
|
914
|
+
"type": "boolean"
|
|
915
|
+
},
|
|
916
|
+
"options": {
|
|
917
|
+
"type": "array"
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
},
|
|
921
|
+
"effects": [
|
|
922
|
+
{
|
|
923
|
+
"kind": "compile-domain-patch",
|
|
924
|
+
"handler": "metadata-renderer-configure",
|
|
925
|
+
"handlerContract": {
|
|
926
|
+
"reads": [
|
|
927
|
+
"DynamicEditorRendererComponent",
|
|
928
|
+
"EditorComponentRegistryService",
|
|
929
|
+
"ConfigRegistryService",
|
|
930
|
+
"EditorProperty"
|
|
931
|
+
],
|
|
932
|
+
"writes": [
|
|
933
|
+
"properties",
|
|
934
|
+
"editorCoverage"
|
|
935
|
+
],
|
|
936
|
+
"identityKeys": [
|
|
937
|
+
"controlType",
|
|
938
|
+
"propertyName"
|
|
939
|
+
],
|
|
940
|
+
"inputSchema": {
|
|
941
|
+
"type": "object",
|
|
942
|
+
"required": [
|
|
943
|
+
"propertyName",
|
|
944
|
+
"editorType"
|
|
945
|
+
],
|
|
946
|
+
"properties": {
|
|
947
|
+
"propertyName": {
|
|
948
|
+
"type": "string"
|
|
949
|
+
},
|
|
950
|
+
"editorType": {
|
|
951
|
+
"type": "string"
|
|
952
|
+
},
|
|
953
|
+
"group": {
|
|
954
|
+
"type": "string"
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
},
|
|
958
|
+
"failureModes": [
|
|
959
|
+
"editor-type-not-registered",
|
|
960
|
+
"property-not-covered",
|
|
961
|
+
"json-only-coverage-not-accepted"
|
|
962
|
+
],
|
|
963
|
+
"description": "Configures visual renderer coverage for a metadata property and rejects JSON-only support for required visual authoring."
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
],
|
|
967
|
+
"destructive": false,
|
|
968
|
+
"requiresConfirmation": false,
|
|
969
|
+
"validators": [
|
|
970
|
+
"renderer-editor-type-registered",
|
|
971
|
+
"visual-editor-coverage-required",
|
|
972
|
+
"editor-coverage-exists",
|
|
973
|
+
"metadata-round-trip"
|
|
974
|
+
],
|
|
975
|
+
"affectedPaths": [
|
|
976
|
+
"properties",
|
|
977
|
+
"editorCoverage"
|
|
978
|
+
],
|
|
979
|
+
"submissionImpact": "config-only",
|
|
980
|
+
"preconditions": [
|
|
981
|
+
"config-registry-loaded"
|
|
982
|
+
]
|
|
983
|
+
},
|
|
984
|
+
{
|
|
985
|
+
"operationId": "validationRule.add",
|
|
986
|
+
"title": "Add validation rule",
|
|
987
|
+
"scope": "fieldMetadataPath",
|
|
988
|
+
"targetKind": "validation",
|
|
989
|
+
"target": {
|
|
990
|
+
"kind": "validation",
|
|
991
|
+
"resolver": "field-metadata-validation-rules",
|
|
992
|
+
"ambiguityPolicy": "fail",
|
|
993
|
+
"required": false
|
|
994
|
+
},
|
|
995
|
+
"inputSchema": {
|
|
996
|
+
"type": "object",
|
|
997
|
+
"required": [
|
|
998
|
+
"rule"
|
|
999
|
+
],
|
|
1000
|
+
"properties": {
|
|
1001
|
+
"rule": {
|
|
1002
|
+
"type": "object"
|
|
1003
|
+
},
|
|
1004
|
+
"message": {
|
|
1005
|
+
"type": "string"
|
|
1006
|
+
},
|
|
1007
|
+
"contextValidatorId": {
|
|
1008
|
+
"type": "string"
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
},
|
|
1012
|
+
"effects": [
|
|
1013
|
+
{
|
|
1014
|
+
"kind": "compile-domain-patch",
|
|
1015
|
+
"handler": "metadata-validation-rule-add",
|
|
1016
|
+
"handlerContract": {
|
|
1017
|
+
"reads": [
|
|
1018
|
+
"fieldMetadata.validators",
|
|
1019
|
+
"ContextValidatorRegistryService",
|
|
1020
|
+
"DynamicFormFactoryService"
|
|
1021
|
+
],
|
|
1022
|
+
"writes": [
|
|
1023
|
+
"fieldMetadata.validators"
|
|
1024
|
+
],
|
|
1025
|
+
"identityKeys": [
|
|
1026
|
+
"field.name",
|
|
1027
|
+
"rule.type",
|
|
1028
|
+
"contextValidatorId"
|
|
1029
|
+
],
|
|
1030
|
+
"inputSchema": {
|
|
1031
|
+
"type": "object",
|
|
1032
|
+
"required": [
|
|
1033
|
+
"rule"
|
|
1034
|
+
],
|
|
1035
|
+
"properties": {
|
|
1036
|
+
"rule": {
|
|
1037
|
+
"type": "object"
|
|
1038
|
+
},
|
|
1039
|
+
"message": {
|
|
1040
|
+
"type": "string"
|
|
1041
|
+
},
|
|
1042
|
+
"contextValidatorId": {
|
|
1043
|
+
"type": "string"
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
},
|
|
1047
|
+
"failureModes": [
|
|
1048
|
+
"validation-rule-invalid",
|
|
1049
|
+
"context-validator-not-registered",
|
|
1050
|
+
"duplicate-validation-rule"
|
|
1051
|
+
],
|
|
1052
|
+
"description": "Adds a canonical validation rule and verifies contextual validator availability before persistence."
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
],
|
|
1056
|
+
"destructive": false,
|
|
1057
|
+
"requiresConfirmation": false,
|
|
1058
|
+
"validators": [
|
|
1059
|
+
"validation-rule-canonical",
|
|
1060
|
+
"context-validator-registered",
|
|
1061
|
+
"metadata-round-trip"
|
|
1062
|
+
],
|
|
1063
|
+
"affectedPaths": [
|
|
1064
|
+
"fieldMetadata.validators"
|
|
1065
|
+
],
|
|
1066
|
+
"submissionImpact": "affects-submission",
|
|
1067
|
+
"preconditions": [
|
|
1068
|
+
"field-metadata-loaded"
|
|
1069
|
+
]
|
|
1070
|
+
},
|
|
1071
|
+
{
|
|
1072
|
+
"operationId": "contextHint.set",
|
|
1073
|
+
"title": "Set metadata context hint",
|
|
1074
|
+
"scope": "meta",
|
|
1075
|
+
"targetKind": "contextHint",
|
|
1076
|
+
"target": {
|
|
1077
|
+
"kind": "contextHint",
|
|
1078
|
+
"resolver": "metadata-editor-context-hints",
|
|
1079
|
+
"ambiguityPolicy": "fail",
|
|
1080
|
+
"required": false
|
|
1081
|
+
},
|
|
1082
|
+
"inputSchema": {
|
|
1083
|
+
"type": "object",
|
|
1084
|
+
"required": [
|
|
1085
|
+
"hintPath",
|
|
1086
|
+
"value"
|
|
1087
|
+
],
|
|
1088
|
+
"properties": {
|
|
1089
|
+
"hintPath": {
|
|
1090
|
+
"enum": [
|
|
1091
|
+
"hint",
|
|
1092
|
+
"helpText",
|
|
1093
|
+
"description",
|
|
1094
|
+
"tooltip",
|
|
1095
|
+
"ariaLabel",
|
|
1096
|
+
"ariaDescribedBy"
|
|
1097
|
+
]
|
|
1098
|
+
},
|
|
1099
|
+
"value": {},
|
|
1100
|
+
"localeKey": {
|
|
1101
|
+
"type": "string"
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
},
|
|
1105
|
+
"effects": [
|
|
1106
|
+
{
|
|
1107
|
+
"kind": "compile-domain-patch",
|
|
1108
|
+
"handler": "metadata-context-hint-set",
|
|
1109
|
+
"handlerContract": {
|
|
1110
|
+
"reads": [
|
|
1111
|
+
"fieldMetadata.hint",
|
|
1112
|
+
"fieldMetadata.helpText",
|
|
1113
|
+
"fieldMetadata.description",
|
|
1114
|
+
"fieldMetadata.tooltip",
|
|
1115
|
+
"fieldMetadata.ariaLabel",
|
|
1116
|
+
"fieldMetadata.ariaDescribedBy",
|
|
1117
|
+
"metadata-editor-i18n"
|
|
1118
|
+
],
|
|
1119
|
+
"writes": [
|
|
1120
|
+
"fieldMetadata.hint",
|
|
1121
|
+
"fieldMetadata.helpText",
|
|
1122
|
+
"fieldMetadata.description",
|
|
1123
|
+
"fieldMetadata.tooltip",
|
|
1124
|
+
"fieldMetadata.ariaLabel",
|
|
1125
|
+
"fieldMetadata.ariaDescribedBy"
|
|
1126
|
+
],
|
|
1127
|
+
"identityKeys": [
|
|
1128
|
+
"field.name",
|
|
1129
|
+
"hintPath"
|
|
1130
|
+
],
|
|
1131
|
+
"inputSchema": {
|
|
1132
|
+
"type": "object",
|
|
1133
|
+
"required": [
|
|
1134
|
+
"hintPath",
|
|
1135
|
+
"value"
|
|
1136
|
+
],
|
|
1137
|
+
"properties": {
|
|
1138
|
+
"hintPath": {
|
|
1139
|
+
"enum": [
|
|
1140
|
+
"hint",
|
|
1141
|
+
"helpText",
|
|
1142
|
+
"description",
|
|
1143
|
+
"tooltip",
|
|
1144
|
+
"ariaLabel",
|
|
1145
|
+
"ariaDescribedBy"
|
|
1146
|
+
]
|
|
1147
|
+
},
|
|
1148
|
+
"value": {},
|
|
1149
|
+
"localeKey": {
|
|
1150
|
+
"type": "string"
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
},
|
|
1154
|
+
"failureModes": [
|
|
1155
|
+
"hint-path-not-canonical",
|
|
1156
|
+
"hint-value-not-serializable",
|
|
1157
|
+
"i18n-key-missing"
|
|
1158
|
+
],
|
|
1159
|
+
"description": "Sets structured FieldMetadata hint/help/accessibility text through canonical metadata paths and metadata-editor i18n constraints."
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
],
|
|
1163
|
+
"destructive": false,
|
|
1164
|
+
"requiresConfirmation": false,
|
|
1165
|
+
"validators": [
|
|
1166
|
+
"context-hint-shape-canonical",
|
|
1167
|
+
"context-hint-i18n-compatible",
|
|
1168
|
+
"metadata-round-trip"
|
|
1169
|
+
],
|
|
1170
|
+
"affectedPaths": [
|
|
1171
|
+
"fieldMetadata.hint",
|
|
1172
|
+
"fieldMetadata.helpText",
|
|
1173
|
+
"fieldMetadata.description",
|
|
1174
|
+
"fieldMetadata.tooltip",
|
|
1175
|
+
"fieldMetadata.ariaLabel",
|
|
1176
|
+
"fieldMetadata.ariaDescribedBy"
|
|
1177
|
+
],
|
|
1178
|
+
"submissionImpact": "visual-only",
|
|
1179
|
+
"preconditions": [
|
|
1180
|
+
"field-metadata-loaded"
|
|
1181
|
+
]
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
"operationId": "dateRangeShortcuts.configure",
|
|
1185
|
+
"title": "Configure governed date range shortcuts",
|
|
1186
|
+
"scope": "fieldMetadataPath",
|
|
1187
|
+
"targetKind": "dateRangeShortcuts",
|
|
1188
|
+
"target": {
|
|
1189
|
+
"kind": "dateRangeShortcuts",
|
|
1190
|
+
"resolver": "metadata-editor-date-range-shortcut-catalog",
|
|
1191
|
+
"ambiguityPolicy": "fail",
|
|
1192
|
+
"required": false
|
|
1193
|
+
},
|
|
1194
|
+
"inputSchema": {
|
|
1195
|
+
"type": "object",
|
|
1196
|
+
"required": [
|
|
1197
|
+
"shortcuts"
|
|
1198
|
+
],
|
|
1199
|
+
"properties": {
|
|
1200
|
+
"shortcuts": {
|
|
1201
|
+
"type": "array",
|
|
1202
|
+
"items": {
|
|
1203
|
+
"anyOf": [
|
|
1204
|
+
{
|
|
1205
|
+
"enum": [
|
|
1206
|
+
"today",
|
|
1207
|
+
"yesterday",
|
|
1208
|
+
"thisWeek",
|
|
1209
|
+
"lastWeek",
|
|
1210
|
+
"thisMonth",
|
|
1211
|
+
"lastMonth",
|
|
1212
|
+
"thisYear",
|
|
1213
|
+
"lastYear"
|
|
1214
|
+
]
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
"type": "object",
|
|
1218
|
+
"required": [
|
|
1219
|
+
"id",
|
|
1220
|
+
"label",
|
|
1221
|
+
"startDate",
|
|
1222
|
+
"endDate"
|
|
1223
|
+
],
|
|
1224
|
+
"additionalProperties": false,
|
|
1225
|
+
"properties": {
|
|
1226
|
+
"id": {
|
|
1227
|
+
"type": "string",
|
|
1228
|
+
"minLength": 1
|
|
1229
|
+
},
|
|
1230
|
+
"label": {
|
|
1231
|
+
"type": "string",
|
|
1232
|
+
"minLength": 1
|
|
1233
|
+
},
|
|
1234
|
+
"startDate": {
|
|
1235
|
+
"type": "string",
|
|
1236
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
1237
|
+
},
|
|
1238
|
+
"endDate": {
|
|
1239
|
+
"type": "string",
|
|
1240
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
1241
|
+
},
|
|
1242
|
+
"timeZone": {
|
|
1243
|
+
"type": "string"
|
|
1244
|
+
},
|
|
1245
|
+
"icon": {
|
|
1246
|
+
"type": "string"
|
|
1247
|
+
},
|
|
1248
|
+
"description": {
|
|
1249
|
+
"type": "string"
|
|
1250
|
+
},
|
|
1251
|
+
"tone": {
|
|
1252
|
+
"enum": [
|
|
1253
|
+
"neutral",
|
|
1254
|
+
"info",
|
|
1255
|
+
"success",
|
|
1256
|
+
"warning"
|
|
1257
|
+
]
|
|
1258
|
+
},
|
|
1259
|
+
"effectiveFrom": {
|
|
1260
|
+
"type": "string",
|
|
1261
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
1262
|
+
},
|
|
1263
|
+
"effectiveTo": {
|
|
1264
|
+
"type": "string",
|
|
1265
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
1266
|
+
},
|
|
1267
|
+
"order": {
|
|
1268
|
+
"type": "number"
|
|
1269
|
+
}
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
]
|
|
1273
|
+
}
|
|
1274
|
+
},
|
|
1275
|
+
"inlineQuickPresets": {
|
|
1276
|
+
"type": "object",
|
|
1277
|
+
"properties": {
|
|
1278
|
+
"enabled": {
|
|
1279
|
+
"type": "boolean"
|
|
1280
|
+
},
|
|
1281
|
+
"maxVisible": {
|
|
1282
|
+
"type": "number"
|
|
1283
|
+
},
|
|
1284
|
+
"position": {
|
|
1285
|
+
"enum": [
|
|
1286
|
+
"auto",
|
|
1287
|
+
"footer",
|
|
1288
|
+
"start",
|
|
1289
|
+
"end"
|
|
1290
|
+
]
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
},
|
|
1294
|
+
"applyMode": {
|
|
1295
|
+
"enum": [
|
|
1296
|
+
"auto",
|
|
1297
|
+
"explicit"
|
|
1298
|
+
]
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
},
|
|
1302
|
+
"effects": [
|
|
1303
|
+
{
|
|
1304
|
+
"kind": "compile-domain-patch",
|
|
1305
|
+
"handler": "metadata-date-range-shortcuts-configure",
|
|
1306
|
+
"handlerContract": {
|
|
1307
|
+
"reads": [
|
|
1308
|
+
"fieldMetadata.controlType",
|
|
1309
|
+
"fieldMetadata.shortcuts",
|
|
1310
|
+
"fieldMetadata.inlineQuickPresets",
|
|
1311
|
+
"fieldMetadata.inlineOverlay",
|
|
1312
|
+
"ConfigRegistryService"
|
|
1313
|
+
],
|
|
1314
|
+
"writes": [
|
|
1315
|
+
"fieldMetadata.shortcuts",
|
|
1316
|
+
"fieldMetadata.inlineQuickPresets",
|
|
1317
|
+
"fieldMetadata.inlineOverlay.applyMode"
|
|
1318
|
+
],
|
|
1319
|
+
"identityKeys": [
|
|
1320
|
+
"field.name",
|
|
1321
|
+
"shortcuts[].id"
|
|
1322
|
+
],
|
|
1323
|
+
"inputSchema": {
|
|
1324
|
+
"type": "object",
|
|
1325
|
+
"required": [
|
|
1326
|
+
"shortcuts"
|
|
1327
|
+
],
|
|
1328
|
+
"properties": {
|
|
1329
|
+
"shortcuts": {
|
|
1330
|
+
"type": "array",
|
|
1331
|
+
"items": {
|
|
1332
|
+
"anyOf": [
|
|
1333
|
+
{
|
|
1334
|
+
"enum": [
|
|
1335
|
+
"today",
|
|
1336
|
+
"yesterday",
|
|
1337
|
+
"thisWeek",
|
|
1338
|
+
"lastWeek",
|
|
1339
|
+
"thisMonth",
|
|
1340
|
+
"lastMonth",
|
|
1341
|
+
"thisYear",
|
|
1342
|
+
"lastYear"
|
|
1343
|
+
]
|
|
1344
|
+
},
|
|
1345
|
+
{
|
|
1346
|
+
"type": "object",
|
|
1347
|
+
"required": [
|
|
1348
|
+
"id",
|
|
1349
|
+
"label",
|
|
1350
|
+
"startDate",
|
|
1351
|
+
"endDate"
|
|
1352
|
+
],
|
|
1353
|
+
"additionalProperties": false,
|
|
1354
|
+
"properties": {
|
|
1355
|
+
"id": {
|
|
1356
|
+
"type": "string",
|
|
1357
|
+
"minLength": 1
|
|
1358
|
+
},
|
|
1359
|
+
"label": {
|
|
1360
|
+
"type": "string",
|
|
1361
|
+
"minLength": 1
|
|
1362
|
+
},
|
|
1363
|
+
"startDate": {
|
|
1364
|
+
"type": "string",
|
|
1365
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
1366
|
+
},
|
|
1367
|
+
"endDate": {
|
|
1368
|
+
"type": "string",
|
|
1369
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
1370
|
+
},
|
|
1371
|
+
"timeZone": {
|
|
1372
|
+
"type": "string"
|
|
1373
|
+
},
|
|
1374
|
+
"icon": {
|
|
1375
|
+
"type": "string"
|
|
1376
|
+
},
|
|
1377
|
+
"description": {
|
|
1378
|
+
"type": "string"
|
|
1379
|
+
},
|
|
1380
|
+
"tone": {
|
|
1381
|
+
"enum": [
|
|
1382
|
+
"neutral",
|
|
1383
|
+
"info",
|
|
1384
|
+
"success",
|
|
1385
|
+
"warning"
|
|
1386
|
+
]
|
|
1387
|
+
},
|
|
1388
|
+
"effectiveFrom": {
|
|
1389
|
+
"type": "string",
|
|
1390
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
1391
|
+
},
|
|
1392
|
+
"effectiveTo": {
|
|
1393
|
+
"type": "string",
|
|
1394
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
1395
|
+
},
|
|
1396
|
+
"order": {
|
|
1397
|
+
"type": "number"
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
}
|
|
1401
|
+
]
|
|
1402
|
+
}
|
|
1403
|
+
},
|
|
1404
|
+
"inlineQuickPresets": {
|
|
1405
|
+
"type": "object",
|
|
1406
|
+
"properties": {
|
|
1407
|
+
"enabled": {
|
|
1408
|
+
"type": "boolean"
|
|
1409
|
+
},
|
|
1410
|
+
"maxVisible": {
|
|
1411
|
+
"type": "number"
|
|
1412
|
+
},
|
|
1413
|
+
"position": {
|
|
1414
|
+
"enum": [
|
|
1415
|
+
"auto",
|
|
1416
|
+
"footer",
|
|
1417
|
+
"start",
|
|
1418
|
+
"end"
|
|
1419
|
+
]
|
|
1420
|
+
}
|
|
1421
|
+
}
|
|
1422
|
+
},
|
|
1423
|
+
"applyMode": {
|
|
1424
|
+
"enum": [
|
|
1425
|
+
"auto",
|
|
1426
|
+
"explicit"
|
|
1427
|
+
]
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
},
|
|
1431
|
+
"failureModes": [
|
|
1432
|
+
"control-type-not-date-range",
|
|
1433
|
+
"duplicate-shortcut-id",
|
|
1434
|
+
"invalid-static-date-range-shortcut",
|
|
1435
|
+
"unsupported-shortcut-tone",
|
|
1436
|
+
"executable-shortcut-metadata"
|
|
1437
|
+
],
|
|
1438
|
+
"description": "Configures built-in and backend-resolved static date range shortcuts through the canonical shortcuts array; JSON metadata may not contain calculateRange or executable expressions."
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
],
|
|
1442
|
+
"destructive": false,
|
|
1443
|
+
"requiresConfirmation": false,
|
|
1444
|
+
"validators": [
|
|
1445
|
+
"date-range-shortcuts-static-canonical",
|
|
1446
|
+
"date-range-shortcuts-no-executable-metadata",
|
|
1447
|
+
"date-range-shortcuts-unique-ids",
|
|
1448
|
+
"metadata-round-trip"
|
|
1449
|
+
],
|
|
1450
|
+
"affectedPaths": [
|
|
1451
|
+
"fieldMetadata.shortcuts",
|
|
1452
|
+
"fieldMetadata.inlineQuickPresets",
|
|
1453
|
+
"fieldMetadata.inlineOverlay.applyMode"
|
|
1454
|
+
],
|
|
1455
|
+
"submissionImpact": "affects-schema-backed-data",
|
|
1456
|
+
"preconditions": [
|
|
1457
|
+
"field-metadata-loaded",
|
|
1458
|
+
"editor-properties-loaded"
|
|
1459
|
+
]
|
|
1460
|
+
},
|
|
1461
|
+
{
|
|
1462
|
+
"operationId": "normalization.apply",
|
|
1463
|
+
"title": "Apply schema normalization",
|
|
1464
|
+
"scope": "runtimeCoverage",
|
|
1465
|
+
"targetKind": "normalization",
|
|
1466
|
+
"target": {
|
|
1467
|
+
"kind": "normalization",
|
|
1468
|
+
"resolver": "metadata-editor-schema-normalizer",
|
|
1469
|
+
"ambiguityPolicy": "fail",
|
|
1470
|
+
"required": false
|
|
1471
|
+
},
|
|
1472
|
+
"inputSchema": {
|
|
1473
|
+
"type": "object",
|
|
1474
|
+
"properties": {
|
|
1475
|
+
"mode": {
|
|
1476
|
+
"enum": [
|
|
1477
|
+
"hydrate-seed",
|
|
1478
|
+
"coerce-types",
|
|
1479
|
+
"apply-defaults",
|
|
1480
|
+
"preserve-advanced-properties"
|
|
1481
|
+
]
|
|
1482
|
+
},
|
|
1483
|
+
"preserveUnknownCanonicalFields": {
|
|
1484
|
+
"type": "boolean"
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
},
|
|
1488
|
+
"effects": [
|
|
1489
|
+
{
|
|
1490
|
+
"kind": "compile-domain-patch",
|
|
1491
|
+
"handler": "metadata-normalization-apply",
|
|
1492
|
+
"handlerContract": {
|
|
1493
|
+
"reads": [
|
|
1494
|
+
"SchemaNormalizerService",
|
|
1495
|
+
"fieldMetadata",
|
|
1496
|
+
"properties",
|
|
1497
|
+
"DynamicFormFactoryService"
|
|
1498
|
+
],
|
|
1499
|
+
"writes": [
|
|
1500
|
+
"normalizedSeed",
|
|
1501
|
+
"form",
|
|
1502
|
+
"fieldMetadata"
|
|
1503
|
+
],
|
|
1504
|
+
"identityKeys": [
|
|
1505
|
+
"field.name",
|
|
1506
|
+
"controlType",
|
|
1507
|
+
"mode"
|
|
1508
|
+
],
|
|
1509
|
+
"inputSchema": {
|
|
1510
|
+
"type": "object",
|
|
1511
|
+
"properties": {
|
|
1512
|
+
"mode": {
|
|
1513
|
+
"enum": [
|
|
1514
|
+
"hydrate-seed",
|
|
1515
|
+
"coerce-types",
|
|
1516
|
+
"apply-defaults",
|
|
1517
|
+
"preserve-advanced-properties"
|
|
1518
|
+
]
|
|
1519
|
+
},
|
|
1520
|
+
"preserveUnknownCanonicalFields": {
|
|
1521
|
+
"type": "boolean"
|
|
1522
|
+
}
|
|
1523
|
+
}
|
|
1524
|
+
},
|
|
1525
|
+
"failureModes": [
|
|
1526
|
+
"normalizer-missing",
|
|
1527
|
+
"type-coercion-failed",
|
|
1528
|
+
"advanced-property-lost",
|
|
1529
|
+
"runtime-editor-drift"
|
|
1530
|
+
],
|
|
1531
|
+
"description": "Runs metadata-editor schema normalization while preserving canonical advanced FieldMetadata properties and editor/runtime round-trip."
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
],
|
|
1535
|
+
"destructive": false,
|
|
1536
|
+
"requiresConfirmation": false,
|
|
1537
|
+
"validators": [
|
|
1538
|
+
"normalization-preserves-canonical-fields",
|
|
1539
|
+
"runtime-editor-round-trip",
|
|
1540
|
+
"metadata-round-trip"
|
|
1541
|
+
],
|
|
1542
|
+
"affectedPaths": [
|
|
1543
|
+
"normalizedSeed",
|
|
1544
|
+
"form",
|
|
1545
|
+
"fieldMetadata"
|
|
1546
|
+
],
|
|
1547
|
+
"submissionImpact": "config-only",
|
|
1548
|
+
"preconditions": [
|
|
1549
|
+
"field-metadata-loaded",
|
|
1550
|
+
"editor-properties-loaded"
|
|
1551
|
+
]
|
|
1552
|
+
}
|
|
1553
|
+
],
|
|
1554
|
+
"validators": [
|
|
1555
|
+
{
|
|
1556
|
+
"validatorId": "field-metadata-shape-canonical",
|
|
1557
|
+
"level": "error",
|
|
1558
|
+
"code": "METADATA_FIELD_SHAPE_CANONICAL",
|
|
1559
|
+
"description": "Edited metadata must remain compatible with canonical FieldMetadata."
|
|
1560
|
+
},
|
|
1561
|
+
{
|
|
1562
|
+
"validatorId": "field-path-supported-by-editor",
|
|
1563
|
+
"level": "error",
|
|
1564
|
+
"code": "METADATA_FIELD_PATH_SUPPORTED",
|
|
1565
|
+
"description": "Edited paths must be supported by visual editor coverage or explicitly delegated."
|
|
1566
|
+
},
|
|
1567
|
+
{
|
|
1568
|
+
"validatorId": "control-type-exists-in-discovery",
|
|
1569
|
+
"level": "error",
|
|
1570
|
+
"code": "METADATA_CONTROL_TYPE_DISCOVERED",
|
|
1571
|
+
"description": "Control type must exist in dynamic-fields discovery."
|
|
1572
|
+
},
|
|
1573
|
+
{
|
|
1574
|
+
"validatorId": "editor-coverage-exists",
|
|
1575
|
+
"level": "error",
|
|
1576
|
+
"code": "METADATA_EDITOR_COVERAGE_EXISTS",
|
|
1577
|
+
"description": "Control type and property must have metadata-editor coverage."
|
|
1578
|
+
},
|
|
1579
|
+
{
|
|
1580
|
+
"validatorId": "option-source-shape-canonical",
|
|
1581
|
+
"level": "error",
|
|
1582
|
+
"code": "METADATA_OPTION_SOURCE_CANONICAL",
|
|
1583
|
+
"description": "Option source must use canonical FieldMetadata/x-ui shape."
|
|
1584
|
+
},
|
|
1585
|
+
{
|
|
1586
|
+
"validatorId": "remote-option-source-governed",
|
|
1587
|
+
"level": "error",
|
|
1588
|
+
"code": "METADATA_REMOTE_OPTION_SOURCE_GOVERNED",
|
|
1589
|
+
"description": "Remote option sources must resolve through governed resource or endpoint metadata."
|
|
1590
|
+
},
|
|
1591
|
+
{
|
|
1592
|
+
"validatorId": "cascade-fields-exist",
|
|
1593
|
+
"level": "error",
|
|
1594
|
+
"code": "METADATA_CASCADE_FIELDS_EXIST",
|
|
1595
|
+
"description": "Cascade source and dependent fields must exist."
|
|
1596
|
+
},
|
|
1597
|
+
{
|
|
1598
|
+
"validatorId": "cascade-cycle-free",
|
|
1599
|
+
"level": "error",
|
|
1600
|
+
"code": "METADATA_CASCADE_CYCLE_FREE",
|
|
1601
|
+
"description": "Cascade dependencies must not create cycles."
|
|
1602
|
+
},
|
|
1603
|
+
{
|
|
1604
|
+
"validatorId": "cascade-backend-shape-preserved",
|
|
1605
|
+
"level": "error",
|
|
1606
|
+
"code": "METADATA_CASCADE_BACKEND_SHAPE_PRESERVED",
|
|
1607
|
+
"description": "Cascade config must preserve x-ui optionSource dependsOn and dependencyFilterMap semantics."
|
|
1608
|
+
},
|
|
1609
|
+
{
|
|
1610
|
+
"validatorId": "renderer-editor-type-registered",
|
|
1611
|
+
"level": "error",
|
|
1612
|
+
"code": "METADATA_RENDERER_TYPE_REGISTERED",
|
|
1613
|
+
"description": "Renderer editor type must be registered."
|
|
1614
|
+
},
|
|
1615
|
+
{
|
|
1616
|
+
"validatorId": "visual-editor-coverage-required",
|
|
1617
|
+
"level": "error",
|
|
1618
|
+
"code": "METADATA_VISUAL_COVERAGE_REQUIRED",
|
|
1619
|
+
"description": "JSON-only support is not accepted for required visual authoring coverage."
|
|
1620
|
+
},
|
|
1621
|
+
{
|
|
1622
|
+
"validatorId": "validation-rule-canonical",
|
|
1623
|
+
"level": "error",
|
|
1624
|
+
"code": "METADATA_VALIDATION_RULE_CANONICAL",
|
|
1625
|
+
"description": "Validation rule must use canonical metadata shape."
|
|
1626
|
+
},
|
|
1627
|
+
{
|
|
1628
|
+
"validatorId": "context-validator-registered",
|
|
1629
|
+
"level": "error",
|
|
1630
|
+
"code": "METADATA_CONTEXT_VALIDATOR_REGISTERED",
|
|
1631
|
+
"description": "Contextual validator must be registered before use."
|
|
1632
|
+
},
|
|
1633
|
+
{
|
|
1634
|
+
"validatorId": "context-hint-shape-canonical",
|
|
1635
|
+
"level": "error",
|
|
1636
|
+
"code": "METADATA_CONTEXT_HINT_CANONICAL",
|
|
1637
|
+
"description": "Context hints must remain structured metadata, not free-form host-only strings."
|
|
1638
|
+
},
|
|
1639
|
+
{
|
|
1640
|
+
"validatorId": "context-hint-i18n-compatible",
|
|
1641
|
+
"level": "warning",
|
|
1642
|
+
"code": "METADATA_CONTEXT_HINT_I18N_COMPATIBLE",
|
|
1643
|
+
"description": "Authoring hint text must remain compatible with metadata-editor i18n."
|
|
1644
|
+
},
|
|
1645
|
+
{
|
|
1646
|
+
"validatorId": "date-range-shortcuts-static-canonical",
|
|
1647
|
+
"level": "error",
|
|
1648
|
+
"code": "METADATA_DATE_RANGE_SHORTCUTS_STATIC_CANONICAL",
|
|
1649
|
+
"description": "Date range shortcuts must be built-in ids or static backend-resolved ranges with id, label, startDate and endDate."
|
|
1650
|
+
},
|
|
1651
|
+
{
|
|
1652
|
+
"validatorId": "date-range-shortcuts-no-executable-metadata",
|
|
1653
|
+
"level": "error",
|
|
1654
|
+
"code": "METADATA_DATE_RANGE_SHORTCUTS_NO_EXECUTABLE_METADATA",
|
|
1655
|
+
"description": "Metadata shortcuts must not contain calculateRange, executable expressions, local calendar-law rules, or frontend business-day logic."
|
|
1656
|
+
},
|
|
1657
|
+
{
|
|
1658
|
+
"validatorId": "date-range-shortcuts-unique-ids",
|
|
1659
|
+
"level": "error",
|
|
1660
|
+
"code": "METADATA_DATE_RANGE_SHORTCUTS_UNIQUE_IDS",
|
|
1661
|
+
"description": "Static business shortcuts must use unique ids inside the date range field."
|
|
1662
|
+
},
|
|
1663
|
+
{
|
|
1664
|
+
"validatorId": "normalization-preserves-canonical-fields",
|
|
1665
|
+
"level": "error",
|
|
1666
|
+
"code": "METADATA_NORMALIZATION_PRESERVES_FIELDS",
|
|
1667
|
+
"description": "Normalization must not drop canonical advanced FieldMetadata properties."
|
|
1668
|
+
},
|
|
1669
|
+
{
|
|
1670
|
+
"validatorId": "runtime-editor-round-trip",
|
|
1671
|
+
"level": "error",
|
|
1672
|
+
"code": "METADATA_RUNTIME_EDITOR_ROUND_TRIP",
|
|
1673
|
+
"description": "Runtime and editor must consume the same normalized metadata shape."
|
|
1674
|
+
},
|
|
1675
|
+
{
|
|
1676
|
+
"validatorId": "metadata-round-trip",
|
|
1677
|
+
"level": "error",
|
|
1678
|
+
"code": "METADATA_ROUND_TRIP",
|
|
1679
|
+
"description": "Open, edit, apply/save, reopen and runtime consume must preserve metadata."
|
|
1680
|
+
}
|
|
1681
|
+
],
|
|
1682
|
+
"roundTripRequirements": [
|
|
1683
|
+
"FieldMetadata is the canonical edited document shape; backend x-ui-derived metadata must not be rewritten into host-only aliases.",
|
|
1684
|
+
"Control type changes require both dynamic-fields discovery and metadata-editor visual coverage.",
|
|
1685
|
+
"Option source cascades preserve x-ui optionSource.dependsOn and optionSource.dependencyFilterMap semantics.",
|
|
1686
|
+
"Date range business shortcuts are authored as built-in ids or backend-resolved static ranges; browser metadata never carries calculateRange code or business calendar rules.",
|
|
1687
|
+
"JSON-only support is incomplete when visual editor coverage is required.",
|
|
1688
|
+
"Schema normalization must preserve advanced canonical properties through open, edit, apply/save, reopen and runtime consumption."
|
|
1689
|
+
],
|
|
1690
|
+
"examples": [
|
|
1691
|
+
{
|
|
1692
|
+
"id": "set-label",
|
|
1693
|
+
"request": "Set this field label to Customer name.",
|
|
1694
|
+
"operationId": "fieldMetadata.property.set",
|
|
1695
|
+
"params": {
|
|
1696
|
+
"path": "label",
|
|
1697
|
+
"value": "Customer name"
|
|
1698
|
+
},
|
|
1699
|
+
"isPositive": true
|
|
1700
|
+
},
|
|
1701
|
+
{
|
|
1702
|
+
"id": "set-control-type",
|
|
1703
|
+
"request": "Change this field to a select control.",
|
|
1704
|
+
"operationId": "controlType.set",
|
|
1705
|
+
"params": {
|
|
1706
|
+
"controlType": "select",
|
|
1707
|
+
"preserveCompatibleProperties": true
|
|
1708
|
+
},
|
|
1709
|
+
"isPositive": true
|
|
1710
|
+
},
|
|
1711
|
+
{
|
|
1712
|
+
"id": "configure-remote-options",
|
|
1713
|
+
"request": "Load options from the customers resource using id and name.",
|
|
1714
|
+
"operationId": "optionSource.configure",
|
|
1715
|
+
"params": {
|
|
1716
|
+
"kind": "resource",
|
|
1717
|
+
"resource": "customers",
|
|
1718
|
+
"valueField": "id",
|
|
1719
|
+
"labelField": "name"
|
|
1720
|
+
},
|
|
1721
|
+
"isPositive": true
|
|
1722
|
+
},
|
|
1723
|
+
{
|
|
1724
|
+
"id": "configure-cascade",
|
|
1725
|
+
"request": "Filter city options when state changes.",
|
|
1726
|
+
"operationId": "cascade.configure",
|
|
1727
|
+
"params": {
|
|
1728
|
+
"dependentField": "city",
|
|
1729
|
+
"sourceField": "state",
|
|
1730
|
+
"dependencyFilterMap": {
|
|
1731
|
+
"stateId": "state.id"
|
|
1732
|
+
}
|
|
1733
|
+
},
|
|
1734
|
+
"isPositive": true
|
|
1735
|
+
},
|
|
1736
|
+
{
|
|
1737
|
+
"id": "configure-renderer",
|
|
1738
|
+
"request": "Expose placeholder in the visual editor as a text field.",
|
|
1739
|
+
"operationId": "renderer.configure",
|
|
1740
|
+
"params": {
|
|
1741
|
+
"propertyName": "placeholder",
|
|
1742
|
+
"editorType": "text",
|
|
1743
|
+
"group": "Presentation"
|
|
1744
|
+
},
|
|
1745
|
+
"isPositive": true
|
|
1746
|
+
},
|
|
1747
|
+
{
|
|
1748
|
+
"id": "add-required-validation",
|
|
1749
|
+
"request": "Make this field required with a validation message.",
|
|
1750
|
+
"operationId": "validationRule.add",
|
|
1751
|
+
"params": {
|
|
1752
|
+
"rule": {
|
|
1753
|
+
"type": "required"
|
|
1754
|
+
},
|
|
1755
|
+
"message": "Required field"
|
|
1756
|
+
},
|
|
1757
|
+
"isPositive": true
|
|
1758
|
+
},
|
|
1759
|
+
{
|
|
1760
|
+
"id": "set-context-hint",
|
|
1761
|
+
"request": "Add a contextual hint for sales users.",
|
|
1762
|
+
"operationId": "contextHint.set",
|
|
1763
|
+
"params": {
|
|
1764
|
+
"hintPath": "helpText",
|
|
1765
|
+
"value": "Use the legal customer name."
|
|
1766
|
+
},
|
|
1767
|
+
"isPositive": true
|
|
1768
|
+
},
|
|
1769
|
+
{
|
|
1770
|
+
"id": "configure-date-range-business-shortcut",
|
|
1771
|
+
"request": "Add a fiscal competence period resolved by the backend to this inline date range.",
|
|
1772
|
+
"operationId": "dateRangeShortcuts.configure",
|
|
1773
|
+
"params": {
|
|
1774
|
+
"shortcuts": [
|
|
1775
|
+
"thisMonth",
|
|
1776
|
+
{
|
|
1777
|
+
"id": "competencia-fiscal-marco",
|
|
1778
|
+
"label": "Fiscal competence March",
|
|
1779
|
+
"startDate": "2026-03-01",
|
|
1780
|
+
"endDate": "2026-03-31",
|
|
1781
|
+
"timeZone": "America/Sao_Paulo",
|
|
1782
|
+
"tone": "success"
|
|
1783
|
+
}
|
|
1784
|
+
],
|
|
1785
|
+
"inlineQuickPresets": {
|
|
1786
|
+
"enabled": true,
|
|
1787
|
+
"position": "start",
|
|
1788
|
+
"maxVisible": 4
|
|
1789
|
+
},
|
|
1790
|
+
"applyMode": "explicit"
|
|
1791
|
+
},
|
|
1792
|
+
"isPositive": true
|
|
1793
|
+
},
|
|
1794
|
+
{
|
|
1795
|
+
"id": "reject-date-range-executable-shortcut",
|
|
1796
|
+
"request": "Add a date range shortcut that calculates fiscal holidays in calculateRange from JSON.",
|
|
1797
|
+
"operationId": "dateRangeShortcuts.configure",
|
|
1798
|
+
"params": {
|
|
1799
|
+
"shortcuts": [
|
|
1800
|
+
{
|
|
1801
|
+
"id": "legal-days",
|
|
1802
|
+
"label": "Legal days",
|
|
1803
|
+
"startDate": "2026-03-01",
|
|
1804
|
+
"endDate": "2026-03-31",
|
|
1805
|
+
"calculateRange": "() => legalCalendar()"
|
|
1806
|
+
}
|
|
1807
|
+
]
|
|
1808
|
+
},
|
|
1809
|
+
"isPositive": false
|
|
1810
|
+
},
|
|
1811
|
+
{
|
|
1812
|
+
"id": "normalize-seed",
|
|
1813
|
+
"request": "Normalize this imported field metadata while preserving advanced properties.",
|
|
1814
|
+
"operationId": "normalization.apply",
|
|
1815
|
+
"params": {
|
|
1816
|
+
"mode": "preserve-advanced-properties",
|
|
1817
|
+
"preserveUnknownCanonicalFields": true
|
|
1818
|
+
},
|
|
1819
|
+
"isPositive": true
|
|
1820
|
+
},
|
|
1821
|
+
{
|
|
1822
|
+
"id": "reject-unknown-control",
|
|
1823
|
+
"request": "Use an unknown control type named magic-picker.",
|
|
1824
|
+
"operationId": "controlType.set",
|
|
1825
|
+
"params": {
|
|
1826
|
+
"controlType": "magic-picker"
|
|
1827
|
+
},
|
|
1828
|
+
"isPositive": false
|
|
1829
|
+
},
|
|
1830
|
+
{
|
|
1831
|
+
"id": "reject-json-only-coverage",
|
|
1832
|
+
"request": "Support this field only by editing raw JSON.",
|
|
1833
|
+
"operationId": "renderer.configure",
|
|
1834
|
+
"params": {
|
|
1835
|
+
"propertyName": "optionSource",
|
|
1836
|
+
"editorType": "json"
|
|
1837
|
+
},
|
|
1838
|
+
"isPositive": false
|
|
1839
|
+
},
|
|
1840
|
+
{
|
|
1841
|
+
"id": "reject-cascade-cycle",
|
|
1842
|
+
"request": "Make field A depend on B and B depend on A.",
|
|
1843
|
+
"operationId": "cascade.configure",
|
|
1844
|
+
"params": {
|
|
1845
|
+
"dependentField": "a",
|
|
1846
|
+
"sourceField": "b"
|
|
1847
|
+
},
|
|
1848
|
+
"isPositive": false
|
|
1849
|
+
},
|
|
1850
|
+
{
|
|
1851
|
+
"id": "reject-host-only-option-source",
|
|
1852
|
+
"request": "Save a host-only URL string as the option source.",
|
|
1853
|
+
"operationId": "optionSource.configure",
|
|
1854
|
+
"params": {
|
|
1855
|
+
"kind": "remote",
|
|
1856
|
+
"endpoint": "local-only://options"
|
|
1857
|
+
},
|
|
1858
|
+
"isPositive": false
|
|
1859
|
+
}
|
|
1860
|
+
]
|
|
1861
|
+
},
|
|
1862
|
+
"chunks": [
|
|
1863
|
+
{
|
|
1864
|
+
"chunkIndex": 0,
|
|
1865
|
+
"chunkKind": "summary",
|
|
1866
|
+
"content": "Component ID: praxis-metadata-editor\nSelector: praxis-field-metadata-editor\nFriendly Name: Praxis Metadata Editor\nDescription: Editor for field metadata and schema helpers.\nLib/Package: @praxisui/metadata-editor\nTags: widget, metadata, configurable\nInputs:\n - controlType (FieldControlType)\n - seed (Partial<FieldDefinition>)\nOutputs:\n - applied (Partial<FieldDefinition>)\n - cancel (void)\n",
|
|
1867
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/praxis-metadata-editor.metadata.ts",
|
|
1868
|
+
"contentHash": "553cc0efd72287cd0ae4903ef352e67534fb20b5423f32e39526318f988697f4",
|
|
1869
|
+
"sourceKind": "component_definition",
|
|
1870
|
+
"sourceId": "praxis-metadata-editor",
|
|
1871
|
+
"corpusVersion": "1.0.0"
|
|
1872
|
+
},
|
|
1873
|
+
{
|
|
1874
|
+
"chunkIndex": 1,
|
|
1875
|
+
"chunkKind": "authoring_manifest",
|
|
1876
|
+
"content": "{\"operationId\":\"fieldMetadata.property.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set FieldMetadata property Effects: compile-domain-patch. Set this field label to Customer name.\",\"scope\":\"fieldMetadataPath\",\"target\":{\"kind\":\"fieldMetadata\",\"resolver\":\"field-metadata-json-path\",\"required\":true},\"inputContract\":{\"required\":[\"path\",\"value\"],\"properties\":[\"path\",\"value\",\"merge\"],\"semanticTerms\":[\"path\",\"value\",\"merge\",\"name\",\"label\",\"description\",\"controlType\",\"placeholder\",\"defaultValue\",\"group\",\"order\",\"required\",\"disabled\",\"readOnly\",\"hidden\",\"source\",\"transient\",\"submitPolicy\",\"hint\",\"helpText\",\"tooltip\",\"valuePresentation\",\"presentation\",\"presentation.presenter\",\"presentation.tone\",\"presentation.appearance\",\"presentation.icon\",\"presentation.label\",\"presentation.badge\",\"presentation.tooltip\",\"presentationRules\",\"options\",\"optionSource\",\"validators\",\"conditionalRequired\",\"conditionalDisplay\",\"visibleIn\",\"ariaLabel\",\"ariaDescribedBy\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata\"],\"validators\":[{\"validatorId\":\"field-metadata-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_FIELD_SHAPE_CANONICAL\",\"description\":\"Edited metadata must remain compatible with canonical FieldMetadata.\"},{\"validatorId\":\"field-path-supported-by-editor\",\"level\":\"error\",\"code\":\"METADATA_FIELD_PATH_SUPPORTED\",\"description\":\"Edited paths must be supported by visual editor coverage or explicitly delegated.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-metadata-loaded\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-label\",\"request\":\"Set this field label to Customer name.\",\"operationId\":\"fieldMetadata.property.set\",\"params\":{\"path\":\"label\",\"value\":\"Customer name\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
1877
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1878
|
+
"contentHash": "cef5507ef8785f477a8f7b35c35aa16eb04d2d492a41b77bff023582be8088e5",
|
|
1879
|
+
"sourceKind": "component_definition",
|
|
1880
|
+
"sourceId": "praxis-metadata-editor",
|
|
1881
|
+
"corpusVersion": "1.0.0"
|
|
1882
|
+
},
|
|
1883
|
+
{
|
|
1884
|
+
"chunkIndex": 2,
|
|
1885
|
+
"chunkKind": "authoring_manifest",
|
|
1886
|
+
"content": "{\"operationId\":\"controlType.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set control type Effects: compile-domain-patch. Change this field to a select control. Use an unknown control type named magic-picker.\",\"scope\":\"controlType\",\"target\":{\"kind\":\"controlType\",\"resolver\":\"dynamic-fields-control-type-discovery\",\"required\":true},\"inputContract\":{\"required\":[\"controlType\"],\"properties\":[\"controlType\",\"preserveCompatibleProperties\"],\"semanticTerms\":[\"controlType\",\"preserveCompatibleProperties\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata.controlType\",\"properties\",\"normalizedSeed\"],\"validators\":[{\"validatorId\":\"control-type-exists-in-discovery\",\"level\":\"error\",\"code\":\"METADATA_CONTROL_TYPE_DISCOVERED\",\"description\":\"Control type must exist in dynamic-fields discovery.\"},{\"validatorId\":\"editor-coverage-exists\",\"level\":\"error\",\"code\":\"METADATA_EDITOR_COVERAGE_EXISTS\",\"description\":\"Control type and property must have metadata-editor coverage.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"dynamic-fields-discovery-loaded\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-control-type\",\"request\":\"Change this field to a select control.\",\"operationId\":\"controlType.set\",\"params\":{\"controlType\":\"select\",\"preserveCompatibleProperties\":true},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-unknown-control\",\"request\":\"Use an unknown control type named magic-picker.\",\"operationId\":\"controlType.set\",\"params\":{\"controlType\":\"magic-picker\"},\"isPositive\":false}]}",
|
|
1887
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1888
|
+
"contentHash": "be587e58825231bfefd7893ec3c3ab4551ca2c706443e8bbcd8381ff57a372a7",
|
|
1889
|
+
"sourceKind": "component_definition",
|
|
1890
|
+
"sourceId": "praxis-metadata-editor",
|
|
1891
|
+
"corpusVersion": "1.0.0"
|
|
1892
|
+
},
|
|
1893
|
+
{
|
|
1894
|
+
"chunkIndex": 3,
|
|
1895
|
+
"chunkKind": "authoring_manifest",
|
|
1896
|
+
"content": "{\"operationId\":\"optionSource.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure option source Effects: compile-domain-patch. Load options from the customers resource using id and name. Save a host-only URL string as the option source.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"optionSource\",\"resolver\":\"field-metadata-option-source\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"kind\",\"resource\",\"endpoint\",\"valueField\",\"labelField\",\"dependsOn\",\"dependencyFilterMap\",\"display\",\"detail\",\"options\"],\"semanticTerms\":[\"kind\",\"resource\",\"endpoint\",\"valueField\",\"labelField\",\"dependsOn\",\"dependencyFilterMap\",\"display\",\"detail\",\"options\",\"static\",\"remote\",\"lookup\",\"display.preset\",\"display.usage\",\"display.density\",\"display.selectedLayout\",\"display.resultLayout\",\"display.primaryPropertyPath\",\"display.fields\",\"display.secondaryPropertyPaths\",\"display.badgePropertyPaths\",\"display.statusToneMap\",\"detail.kind\",\"detail.surfaceId\",\"detail.presentation\",\"detail.preferredWidget\",\"detail.mode\",\"compact\",\"rich\",\"directory\",\"status\",\"reference\",\"hierarchical\",\"form\",\"filter\",\"table-cell\",\"dashboard\",\"wizard\",\"review\",\"comfortable\",\"card\",\"inline\",\"token\",\"list\",\"denseList\",\"table\",\"surface\",\"route\",\"href\",\"drawer\",\"modal\",\"view\",\"edit\",\"create\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata.optionSource\"],\"validators\":[{\"validatorId\":\"option-source-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_OPTION_SOURCE_CANONICAL\",\"description\":\"Option source must use canonical FieldMetadata/x-ui shape.\"},{\"validatorId\":\"remote-option-source-governed\",\"level\":\"error\",\"code\":\"METADATA_REMOTE_OPTION_SOURCE_GOVERNED\",\"description\":\"Remote option sources must resolve through governed resource or endpoint metadata.\"},{\"validatorId\":\"cascade-backend-shape-preserved\",\"level\":\"error\",\"code\":\"METADATA_CASCADE_BACKEND_SHAPE_PRESERVED\",\"description\":\"Cascade config must preserve x-ui optionSource dependsOn and dependencyFilterMap semantics.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-metadata-loaded\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-remote-options\",\"request\":\"Load options from the customers resource using id and name.\",\"operationId\":\"optionSource.configure\",\"params\":{\"kind\":\"resource\",\"resource\":\"customers\",\"valueField\":\"id\",\"labelField\":\"name\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-host-only-option-source\",\"request\":\"Save a host-only URL string as the option source.\",\"operationId\":\"optionSource.configure\",\"params\":{\"kind\":\"remote\",\"endpoint\":\"local-only://options\"},\"isPositive\":false}]}",
|
|
1897
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1898
|
+
"contentHash": "037355de1c38dbb6cde763014aa5c89698eed8af1c9aa5bdbfc80e955ba1f3b4",
|
|
1899
|
+
"sourceKind": "component_definition",
|
|
1900
|
+
"sourceId": "praxis-metadata-editor",
|
|
1901
|
+
"corpusVersion": "1.0.0"
|
|
1902
|
+
},
|
|
1903
|
+
{
|
|
1904
|
+
"chunkIndex": 4,
|
|
1905
|
+
"chunkKind": "authoring_manifest",
|
|
1906
|
+
"content": "{\"operationId\":\"cascade.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure cascade rule Effects: compile-domain-patch. Filter city options when state changes. Make field A depend on B and B depend on A.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"cascade\",\"resolver\":\"metadata-editor-cascade-rules\",\"required\":false},\"inputContract\":{\"required\":[\"dependentField\"],\"properties\":[\"dependentField\",\"sourceField\",\"strategy\",\"debounceMs\",\"loadMode\",\"dependencyFilterMap\",\"optionSource\"],\"semanticTerms\":[\"dependentField\",\"sourceField\",\"strategy\",\"debounceMs\",\"loadMode\",\"dependencyFilterMap\",\"optionSource\",\"replace\",\"merge\",\"immediate\",\"manual\",\"respectLoadOn\",\"optionSource.kind\",\"optionSource.resource\",\"optionSource.endpoint\",\"optionSource.dependsOn\",\"optionSource.dependencyFilterMap\",\"static\",\"remote\",\"resource\",\"lookup\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata.dependencyFields\",\"fieldMetadata.enableDependencyCascade\",\"fieldMetadata.resetOnDependentChange\",\"fieldMetadata.dependencyFilterMap\",\"fieldMetadata.dependencyValuePath\",\"fieldMetadata.dependencyMergeStrategy\",\"fieldMetadata.dependencyDebounceMs\",\"fieldMetadata.dependencyLoadOnChange\",\"fieldMetadata.optionSource.dependsOn\",\"fieldMetadata.optionSource.dependencyFilterMap\"],\"validators\":[{\"validatorId\":\"cascade-fields-exist\",\"level\":\"error\",\"code\":\"METADATA_CASCADE_FIELDS_EXIST\",\"description\":\"Cascade source and dependent fields must exist.\"},{\"validatorId\":\"cascade-cycle-free\",\"level\":\"error\",\"code\":\"METADATA_CASCADE_CYCLE_FREE\",\"description\":\"Cascade dependencies must not create cycles.\"},{\"validatorId\":\"cascade-backend-shape-preserved\",\"level\":\"error\",\"code\":\"METADATA_CASCADE_BACKEND_SHAPE_PRESERVED\",\"description\":\"Cascade config must preserve x-ui optionSource dependsOn and dependencyFilterMap semantics.\"},{\"validatorId\":\"option-source-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_OPTION_SOURCE_CANONICAL\",\"description\":\"Option source must use canonical FieldMetadata/x-ui shape.\"},{\"validatorId\":\"remote-option-source-governed\",\"level\":\"error\",\"code\":\"METADATA_REMOTE_OPTION_SOURCE_GOVERNED\",\"description\":\"Remote option sources must resolve through governed resource or endpoint metadata.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-list-loaded\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-cascade\",\"request\":\"Filter city options when state changes.\",\"operationId\":\"cascade.configure\",\"params\":{\"dependentField\":\"city\",\"sourceField\":\"state\",\"dependencyFilterMap\":{\"stateId\":\"state.id\"}},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-cascade-cycle\",\"request\":\"Make field A depend on B and B depend on A.\",\"operationId\":\"cascade.configure\",\"params\":{\"dependentField\":\"a\",\"sourceField\":\"b\"},\"isPositive\":false}]}",
|
|
1907
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1908
|
+
"contentHash": "6ee3293d0124a4567aa9f46f24d29d1e4e05e610efaa6dd95d5e5bc9e4d06c95",
|
|
1909
|
+
"sourceKind": "component_definition",
|
|
1910
|
+
"sourceId": "praxis-metadata-editor",
|
|
1911
|
+
"corpusVersion": "1.0.0"
|
|
1912
|
+
},
|
|
1913
|
+
{
|
|
1914
|
+
"chunkIndex": 5,
|
|
1915
|
+
"chunkKind": "authoring_manifest",
|
|
1916
|
+
"content": "{\"operationId\":\"renderer.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure renderer coverage Effects: compile-domain-patch. Expose placeholder in the visual editor as a text field. Support this field only by editing raw JSON.\",\"scope\":\"editorCoverage\",\"target\":{\"kind\":\"renderer\",\"resolver\":\"metadata-editor-renderer-property\",\"required\":true},\"inputContract\":{\"required\":[\"propertyName\",\"editorType\"],\"properties\":[\"propertyName\",\"editorType\",\"group\",\"required\",\"options\"],\"semanticTerms\":[\"propertyName\",\"editorType\",\"group\",\"required\",\"options\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"properties\",\"editorCoverage\"],\"validators\":[{\"validatorId\":\"renderer-editor-type-registered\",\"level\":\"error\",\"code\":\"METADATA_RENDERER_TYPE_REGISTERED\",\"description\":\"Renderer editor type must be registered.\"},{\"validatorId\":\"visual-editor-coverage-required\",\"level\":\"error\",\"code\":\"METADATA_VISUAL_COVERAGE_REQUIRED\",\"description\":\"JSON-only support is not accepted for required visual authoring coverage.\"},{\"validatorId\":\"editor-coverage-exists\",\"level\":\"error\",\"code\":\"METADATA_EDITOR_COVERAGE_EXISTS\",\"description\":\"Control type and property must have metadata-editor coverage.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"config-registry-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-renderer\",\"request\":\"Expose placeholder in the visual editor as a text field.\",\"operationId\":\"renderer.configure\",\"params\":{\"propertyName\":\"placeholder\",\"editorType\":\"text\",\"group\":\"Presentation\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-json-only-coverage\",\"request\":\"Support this field only by editing raw JSON.\",\"operationId\":\"renderer.configure\",\"params\":{\"propertyName\":\"optionSource\",\"editorType\":\"json\"},\"isPositive\":false}]}",
|
|
1917
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1918
|
+
"contentHash": "8831dfaff67c2f0eb89029214b26e08bd416ce8068cc35564c15e5eb82ae1819",
|
|
1919
|
+
"sourceKind": "component_definition",
|
|
1920
|
+
"sourceId": "praxis-metadata-editor",
|
|
1921
|
+
"corpusVersion": "1.0.0"
|
|
1922
|
+
},
|
|
1923
|
+
{
|
|
1924
|
+
"chunkIndex": 6,
|
|
1925
|
+
"chunkKind": "authoring_manifest",
|
|
1926
|
+
"content": "{\"operationId\":\"validationRule.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Add validation rule Effects: compile-domain-patch. Make this field required with a validation message.\",\"scope\":\"fieldMetadataPath\",\"target\":{\"kind\":\"validation\",\"resolver\":\"field-metadata-validation-rules\",\"required\":false},\"inputContract\":{\"required\":[\"rule\"],\"properties\":[\"rule\",\"message\",\"contextValidatorId\"],\"semanticTerms\":[\"rule\",\"message\",\"contextValidatorId\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata.validators\"],\"validators\":[{\"validatorId\":\"validation-rule-canonical\",\"level\":\"error\",\"code\":\"METADATA_VALIDATION_RULE_CANONICAL\",\"description\":\"Validation rule must use canonical metadata shape.\"},{\"validatorId\":\"context-validator-registered\",\"level\":\"error\",\"code\":\"METADATA_CONTEXT_VALIDATOR_REGISTERED\",\"description\":\"Contextual validator must be registered before use.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-metadata-loaded\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-required-validation\",\"request\":\"Make this field required with a validation message.\",\"operationId\":\"validationRule.add\",\"params\":{\"rule\":{\"type\":\"required\"},\"message\":\"Required field\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
1927
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1928
|
+
"contentHash": "1c3afa5edaa5313f5cee85f57226feb70a0d3077a4c627b1218265d29967c261",
|
|
1929
|
+
"sourceKind": "component_definition",
|
|
1930
|
+
"sourceId": "praxis-metadata-editor",
|
|
1931
|
+
"corpusVersion": "1.0.0"
|
|
1932
|
+
},
|
|
1933
|
+
{
|
|
1934
|
+
"chunkIndex": 7,
|
|
1935
|
+
"chunkKind": "authoring_manifest",
|
|
1936
|
+
"content": "{\"operationId\":\"contextHint.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set metadata context hint Effects: compile-domain-patch. Add a contextual hint for sales users.\",\"scope\":\"meta\",\"target\":{\"kind\":\"contextHint\",\"resolver\":\"metadata-editor-context-hints\",\"required\":false},\"inputContract\":{\"required\":[\"hintPath\",\"value\"],\"properties\":[\"hintPath\",\"value\",\"localeKey\"],\"semanticTerms\":[\"hintPath\",\"value\",\"localeKey\",\"hint\",\"helpText\",\"description\",\"tooltip\",\"ariaLabel\",\"ariaDescribedBy\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata.hint\",\"fieldMetadata.helpText\",\"fieldMetadata.description\",\"fieldMetadata.tooltip\",\"fieldMetadata.ariaLabel\",\"fieldMetadata.ariaDescribedBy\"],\"validators\":[{\"validatorId\":\"context-hint-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_CONTEXT_HINT_CANONICAL\",\"description\":\"Context hints must remain structured metadata, not free-form host-only strings.\"},{\"validatorId\":\"context-hint-i18n-compatible\",\"level\":\"warning\",\"code\":\"METADATA_CONTEXT_HINT_I18N_COMPATIBLE\",\"description\":\"Authoring hint text must remain compatible with metadata-editor i18n.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-metadata-loaded\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-context-hint\",\"request\":\"Add a contextual hint for sales users.\",\"operationId\":\"contextHint.set\",\"params\":{\"hintPath\":\"helpText\",\"value\":\"Use the legal customer name.\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
1937
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1938
|
+
"contentHash": "0486d1714c8eefaa79e3d966ef160caeec2537dcecb43f796a74234c9668e756",
|
|
1939
|
+
"sourceKind": "component_definition",
|
|
1940
|
+
"sourceId": "praxis-metadata-editor",
|
|
1941
|
+
"corpusVersion": "1.0.0"
|
|
1942
|
+
},
|
|
1943
|
+
{
|
|
1944
|
+
"chunkIndex": 8,
|
|
1945
|
+
"chunkKind": "authoring_manifest",
|
|
1946
|
+
"content": "{\"operationId\":\"dateRangeShortcuts.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure governed date range shortcuts Effects: compile-domain-patch. Add a fiscal competence period resolved by the backend to this inline date range. Add a date range shortcut that calculates fiscal holidays in calculateRange from JSON.\",\"scope\":\"fieldMetadataPath\",\"target\":{\"kind\":\"dateRangeShortcuts\",\"resolver\":\"metadata-editor-date-range-shortcut-catalog\",\"required\":false},\"inputContract\":{\"required\":[\"shortcuts\"],\"properties\":[\"shortcuts\",\"inlineQuickPresets\",\"applyMode\"],\"semanticTerms\":[\"shortcuts\",\"inlineQuickPresets\",\"applyMode\",\"inlineQuickPresets.enabled\",\"inlineQuickPresets.maxVisible\",\"inlineQuickPresets.position\",\"auto\",\"explicit\",\"footer\",\"start\",\"end\",\"today\",\"yesterday\",\"thisWeek\",\"lastWeek\",\"thisMonth\",\"lastMonth\",\"thisYear\",\"lastYear\",\"shortcuts.id\",\"shortcuts.label\",\"shortcuts.startDate\",\"shortcuts.endDate\",\"shortcuts.timeZone\",\"shortcuts.icon\",\"shortcuts.description\",\"shortcuts.tone\",\"shortcuts.effectiveFrom\",\"shortcuts.effectiveTo\",\"shortcuts.order\",\"neutral\",\"info\",\"success\",\"warning\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata.shortcuts\",\"fieldMetadata.inlineQuickPresets\",\"fieldMetadata.inlineOverlay.applyMode\"],\"validators\":[{\"validatorId\":\"date-range-shortcuts-static-canonical\",\"level\":\"error\",\"code\":\"METADATA_DATE_RANGE_SHORTCUTS_STATIC_CANONICAL\",\"description\":\"Date range shortcuts must be built-in ids or static backend-resolved ranges with id, label, startDate and endDate.\"},{\"validatorId\":\"date-range-shortcuts-no-executable-metadata\",\"level\":\"error\",\"code\":\"METADATA_DATE_RANGE_SHORTCUTS_NO_EXECUTABLE_METADATA\",\"description\":\"Metadata shortcuts must not contain calculateRange, executable expressions, local calendar-law rules, or frontend business-day logic.\"},{\"validatorId\":\"date-range-shortcuts-unique-ids\",\"level\":\"error\",\"code\":\"METADATA_DATE_RANGE_SHORTCUTS_UNIQUE_IDS\",\"description\":\"Static business shortcuts must use unique ids inside the date range field.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-metadata-loaded\",\"editor-properties-loaded\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-date-range-business-shortcut\",\"request\":\"Add a fiscal competence period resolved by the backend to this inline date range.\",\"operationId\":\"dateRangeShortcuts.configure\",\"params\":{\"shortcuts\":[\"thisMonth\",{\"id\":\"competencia-fiscal-marco\",\"label\":\"Fiscal competence March\",\"startDate\":\"2026-03-01\",\"endDate\":\"2026-03-31\",\"timeZone\":\"America/Sao_Paulo\",\"tone\":\"success\"}],\"inlineQuickPresets\":{\"enabled\":true,\"position\":\"start\",\"maxVisible\":4},\"applyMode\":\"explicit\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-date-range-executable-shortcut\",\"request\":\"Add a date range shortcut that calculates fiscal holidays in calculateRange from JSON.\",\"operationId\":\"dateRangeShortcuts.configure\",\"params\":{\"shortcuts\":[{\"id\":\"legal-days\",\"label\":\"Legal days\",\"startDate\":\"2026-03-01\",\"endDate\":\"2026-03-31\",\"calculateRange\":\"() => legalCalendar()\"}]},\"isPositive\":false}]}",
|
|
1947
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1948
|
+
"contentHash": "de8b4b2fedfc0a50e6fe57a86ac71f6637ad9c79ed979f2b672648fbdd6285ba",
|
|
1949
|
+
"sourceKind": "component_definition",
|
|
1950
|
+
"sourceId": "praxis-metadata-editor",
|
|
1951
|
+
"corpusVersion": "1.0.0"
|
|
1952
|
+
},
|
|
1953
|
+
{
|
|
1954
|
+
"chunkIndex": 9,
|
|
1955
|
+
"chunkKind": "authoring_manifest",
|
|
1956
|
+
"content": "{\"operationId\":\"normalization.apply\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Apply schema normalization Effects: compile-domain-patch. Normalize this imported field metadata while preserving advanced properties.\",\"scope\":\"runtimeCoverage\",\"target\":{\"kind\":\"normalization\",\"resolver\":\"metadata-editor-schema-normalizer\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"mode\",\"preserveUnknownCanonicalFields\"],\"semanticTerms\":[\"mode\",\"preserveUnknownCanonicalFields\",\"hydrate-seed\",\"coerce-types\",\"apply-defaults\",\"preserve-advanced-properties\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"normalizedSeed\",\"form\",\"fieldMetadata\"],\"validators\":[{\"validatorId\":\"normalization-preserves-canonical-fields\",\"level\":\"error\",\"code\":\"METADATA_NORMALIZATION_PRESERVES_FIELDS\",\"description\":\"Normalization must not drop canonical advanced FieldMetadata properties.\"},{\"validatorId\":\"runtime-editor-round-trip\",\"level\":\"error\",\"code\":\"METADATA_RUNTIME_EDITOR_ROUND_TRIP\",\"description\":\"Runtime and editor must consume the same normalized metadata shape.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-metadata-loaded\",\"editor-properties-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"normalize-seed\",\"request\":\"Normalize this imported field metadata while preserving advanced properties.\",\"operationId\":\"normalization.apply\",\"params\":{\"mode\":\"preserve-advanced-properties\",\"preserveUnknownCanonicalFields\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
1957
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1958
|
+
"contentHash": "7778e9ad01604433c199a4003bd54d17eea32f0925639929af3be8fb2f2f4f7c",
|
|
1959
|
+
"sourceKind": "component_definition",
|
|
1960
|
+
"sourceId": "praxis-metadata-editor",
|
|
1961
|
+
"corpusVersion": "1.0.0"
|
|
1962
|
+
},
|
|
1963
|
+
{
|
|
1964
|
+
"chunkIndex": 10,
|
|
1965
|
+
"chunkKind": "authoring_manifest",
|
|
1966
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"identity\"}",
|
|
1967
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1968
|
+
"contentHash": "af432d637fb53cd5b75204ca11b5501fd679770d3d52d5def44896f4c2f5aab9",
|
|
1969
|
+
"sourceKind": "component_definition",
|
|
1970
|
+
"sourceId": "praxis-metadata-editor",
|
|
1971
|
+
"corpusVersion": "1.0.0"
|
|
1972
|
+
},
|
|
1973
|
+
{
|
|
1974
|
+
"chunkIndex": 11,
|
|
1975
|
+
"chunkKind": "authoring_manifest",
|
|
1976
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"controlType\",\"type\":\"FieldControlType\",\"description\":\"Canonical control type used to resolve editor property coverage.\"},{\"name\":\"seed\",\"type\":\"Partial<FieldMetadata | FieldDefinition>\",\"description\":\"Initial canonical field metadata used to hydrate the editor.\"},{\"name\":\"fields\",\"type\":\"Array<FieldMetadata | FieldDefinition>\",\"description\":\"Available fields used by cascade authoring and context validation.\"},{\"name\":\"properties\",\"type\":\"EditorProperty[]\",\"description\":\"Renderer property catalog resolved from ConfigRegistryService.\"},{\"name\":\"form\",\"type\":\"FormGroup\",\"description\":\"Dynamic form generated from canonical editor properties by DynamicFormFactoryService.\"}]}",
|
|
1977
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1978
|
+
"contentHash": "9172c06a0dad6eba9662ee2f0f64c17a2058471166d673e9cb3b60733dabf7d2",
|
|
1979
|
+
"sourceKind": "component_definition",
|
|
1980
|
+
"sourceId": "praxis-metadata-editor",
|
|
1981
|
+
"corpusVersion": "1.0.0"
|
|
1982
|
+
},
|
|
1983
|
+
{
|
|
1984
|
+
"chunkIndex": 12,
|
|
1985
|
+
"chunkKind": "authoring_manifest",
|
|
1986
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"fieldMetadata\",\"resolver\":\"field-metadata-json-path\",\"description\":\"Canonical FieldMetadata root and property paths.\"},{\"kind\":\"controlType\",\"resolver\":\"dynamic-fields-control-type-discovery\",\"description\":\"Control type selected from dynamic-fields discovery and editor config registry.\"},{\"kind\":\"optionSource\",\"resolver\":\"field-metadata-option-source\",\"description\":\"Canonical option source including backend x-ui option source fields where applicable.\"},{\"kind\":\"cascade\",\"resolver\":\"metadata-editor-cascade-rules\",\"description\":\"Cascade dependencies and dependency filter mappings edited through CascadeManagerTab.\"},{\"kind\":\"renderer\",\"resolver\":\"metadata-editor-renderer-property\",\"description\":\"Dynamic editor renderer property coverage and editor component mapping.\"},{\"kind\":\"validation\",\"resolver\":\"field-metadata-validation-rules\",\"description\":\"Field validation rules and contextual validators.\"},{\"kind\":\"dateRangeShortcuts\",\"resolver\":\"metadata-editor-date-range-shortcut-catalog\",\"description\":\"Governed static date range shortcut catalog for dateRange and inlineDateRange metadata.\"},{\"kind\":\"contextHint\",\"resolver\":\"metadata-editor-context-hints\",\"description\":\"Authoring hints, help text and contextual guidance for metadata editors.\"},{\"kind\":\"normalization\",\"resolver\":\"metadata-editor-schema-normalizer\",\"description\":\"Schema normalization and seed hydration rules.\"}]}",
|
|
1987
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1988
|
+
"contentHash": "5364ad3da2fec36bd907ac5bd33ba45e34edc08767d9ec41d91aa6e66b55702c",
|
|
1989
|
+
"sourceKind": "component_definition",
|
|
1990
|
+
"sourceId": "praxis-metadata-editor",
|
|
1991
|
+
"corpusVersion": "1.0.0"
|
|
1992
|
+
},
|
|
1993
|
+
{
|
|
1994
|
+
"chunkIndex": 13,
|
|
1995
|
+
"chunkKind": "authoring_manifest",
|
|
1996
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"fieldMetadata.property.set\",\"title\":\"Set FieldMetadata property\",\"scope\":\"fieldMetadataPath\",\"targetKind\":\"fieldMetadata\",\"target\":{\"kind\":\"fieldMetadata\",\"resolver\":\"field-metadata-json-path\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"path\",\"value\"],\"properties\":{\"path\":{\"enum\":[\"name\",\"label\",\"description\",\"controlType\",\"placeholder\",\"defaultValue\",\"group\",\"order\",\"required\",\"disabled\",\"readOnly\",\"hidden\",\"source\",\"transient\",\"submitPolicy\",\"hint\",\"helpText\",\"tooltip\",\"valuePresentation\",\"presentation\",\"presentation.presenter\",\"presentation.tone\",\"presentation.appearance\",\"presentation.icon\",\"presentation.label\",\"presentation.badge\",\"presentation.tooltip\",\"presentationRules\",\"options\",\"optionSource\",\"validators\",\"conditionalRequired\",\"conditionalDisplay\",\"visibleIn\",\"ariaLabel\",\"ariaDescribedBy\"]},\"value\":{},\"merge\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-field-property-set\",\"handlerContract\":{\"reads\":[\"fieldMetadata\",\"fieldMetadataPath\",\"SchemaNormalizerService\"],\"writes\":[\"fieldMetadata\"],\"identityKeys\":[\"field.name\",\"path\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"path\",\"value\"],\"properties\":{\"path\":{\"enum\":[\"name\",\"label\",\"description\",\"controlType\",\"placeholder\",\"defaultValue\",\"group\",\"order\",\"required\",\"disabled\",\"readOnly\",\"hidden\",\"source\",\"transient\",\"submitPolicy\",\"hint\",\"helpText\",\"tooltip\",\"valuePresentation\",\"presentation\",\"presentation.presenter\",\"presentation.tone\",\"presentation.appearance\",\"presentation.icon\",\"presentation.label\",\"presentation.badge\",\"presentation.tooltip\",\"presentationRules\",\"options\",\"optionSource\",\"validators\",\"conditionalRequired\",\"conditionalDisplay\",\"visibleIn\",\"ariaLabel\",\"ariaDescribedBy\"]},\"value\":{},\"merge\":{\"type\":\"boolean\"}}},\"failureModes\":[\"unknown-field-metadata-path\",\"non-canonical-shape\",\"readonly-field\",\"normalization-failed\"],\"description\":\"Sets a canonical FieldMetadata property through a governed metadata path and re-runs schema normalization.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"field-metadata-shape-canonical\",\"field-path-supported-by-editor\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"field-metadata-loaded\"]},{\"operationId\":\"controlType.set\",\"title\":\"Set control type\",\"scope\":\"controlType\",\"targetKind\":\"controlType\",\"target\":{\"kind\":\"controlType\",\"resolver\":\"dynamic-fields-control-type-discovery\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"controlType\"],\"properties\":{\"controlType\":{\"type\":\"string\"},\"preserveCompatibleProperties\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-control-type-set\",\"handlerContract\":{\"reads\":[\"FieldControlType\",\"ConfigRegistryService\",\"dynamic-fields-discovery\",\"fieldMetadata\"],\"writes\":[\"fieldMetadata.controlType\",\"properties\",\"normalizedSeed\"],\"identityKeys\":[\"field.name\",\"controlType\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"controlType\"],\"properties\":{\"controlType\":{\"type\":\"string\"},\"preserveCompatibleProperties\":{\"type\":\"boolean\"}}},\"failureModes\":[\"control-type-not-discovered\",\"editor-coverage-missing\",\"incompatible-metadata-preservation\"],\"description\":\"Changes control type only when dynamic-fields discovery and metadata-editor config registry both expose renderer/editor coverage.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"control-type-exists-in-discovery\",\"editor-coverage-exists\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata.controlType\",\"properties\",\"normalizedSeed\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"dynamic-fields-discovery-loaded\"]},{\"operationId\":\"optionSource.configure\",\"title\":\"Configure option source\",\"scope\":\"dataBinding\",\"targetKind\":\"optionSource\",\"target\":{\"kind\":\"optionSource\",\"resolver\":\"field-metadata-option-source\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"kind\":{\"enum\":[\"static\",\"remote\",\"resource\",\"lookup\"]},\"resource\":{\"type\":\"string\"},\"endpoint\":{\"type\":\"string\"},\"valueField\":{\"type\":\"string\"},\"labelField\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"string\"},\"dependencyFilterMap\":{\"type\":\"object\"},\"display\":{\"type\":\"object\",\"properties\":{\"preset\":{\"enum\":[\"compact\",\"rich\",\"directory\",\"status\",\"reference\",\"hierarchical\"]},\"usage\":{\"enum\":[\"form\",\"filter\",\"table-cell\",\"dashboard\",\"wizard\",\"review\"]},\"density\":{\"enum\":[\"compact\",\"comfortable\",\"rich\"]},\"selectedLayout\":{\"enum\":[\"card\",\"inline\",\"compact\",\"token\"]},\"resultLayout\":{\"enum\":[\"list\",\"denseList\",\"table\",\"card\"]},\"primaryPropertyPath\":{\"type\":\"string\"},\"fields\":{\"type\":\"array\"},\"secondaryPropertyPaths\":{\"type\":\"array\"},\"badgePropertyPaths\":{\"type\":\"array\"},\"statusToneMap\":{\"type\":\"object\"}}},\"detail\":{\"type\":\"object\",\"properties\":{\"kind\":{\"enum\":[\"surface\",\"route\",\"href\"]},\"surfaceId\":{\"type\":\"string\"},\"presentation\":{\"enum\":[\"drawer\",\"modal\"]},\"preferredWidget\":{\"type\":\"string\"},\"mode\":{\"enum\":[\"view\",\"edit\",\"create\"]}}},\"options\":{\"type\":\"array\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-option-source-configure\",\"handlerContract\":{\"reads\":[\"fieldMetadata.optionSource\",\"backend.x-ui.optionSource\",\"SchemaNormalizerService\"],\"writes\":[\"fieldMetadata.optionSource\"],\"identityKeys\":[\"field.name\",\"optionSource.kind\",\"optionSource.resource\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"kind\":{\"enum\":[\"static\",\"remote\",\"resource\",\"lookup\"]},\"resource\":{\"type\":\"string\"},\"endpoint\":{\"type\":\"string\"},\"valueField\":{\"type\":\"string\"},\"labelField\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"string\"},\"dependencyFilterMap\":{\"type\":\"object\"},\"display\":{\"type\":\"object\",\"properties\":{\"preset\":{\"enum\":[\"compact\",\"rich\",\"directory\",\"status\",\"reference\",\"hierarchical\"]},\"usage\":{\"enum\":[\"form\",\"filter\",\"table-cell\",\"dashboard\",\"wizard\",\"review\"]},\"density\":{\"enum\":[\"compact\",\"comfortable\",\"rich\"]},\"selectedLayout\":{\"enum\":[\"card\",\"inline\",\"compact\",\"token\"]},\"resultLayout\":{\"enum\":[\"list\",\"denseList\",\"table\",\"card\"]},\"primaryPropertyPath\":{\"type\":\"string\"},\"fields\":{\"type\":\"array\"},\"secondaryPropertyPaths\":{\"type\":\"array\"},\"badgePropertyPaths\":{\"type\":\"array\"},\"statusToneMap\":{\"type\":\"object\"}}},\"detail\":{\"type\":\"object\",\"properties\":{\"kind\":{\"enum\":[\"surface\",\"route\",\"href\"]},\"surfaceId\":{\"type\":\"string\"},\"presentation\":{\"enum\":[\"drawer\",\"modal\"]},\"preferredWidget\":{\"type\":\"string\"},\"mode\":{\"enum\":[\"view\",\"edit\",\"create\"]}}},\"options\":{\"type\":\"array\"}}},\"failureModes\":[\"invalid-option-source-kind\",\"remote-source-missing-governed-resource\",\"dependency-filter-map-invalid\"],\"description\":\"Configures canonical optionSource fields while preserving backend x-ui dependsOn and dependencyFilterMap semantics.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"option-source-shape-canonical\",\"remote-option-source-governed\",\"cascade-backend-shape-preserved\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata.optionSource\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"field-metadata-loaded\"]}]}",
|
|
1997
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
1998
|
+
"contentHash": "3cbf9d244088100c598a101e744d6bfa766a130030aa42544e015f9d203865b1",
|
|
1999
|
+
"sourceKind": "component_definition",
|
|
2000
|
+
"sourceId": "praxis-metadata-editor",
|
|
2001
|
+
"corpusVersion": "1.0.0"
|
|
2002
|
+
},
|
|
2003
|
+
{
|
|
2004
|
+
"chunkIndex": 14,
|
|
2005
|
+
"chunkKind": "authoring_manifest",
|
|
2006
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"cascade.configure\",\"title\":\"Configure cascade rule\",\"scope\":\"interaction\",\"targetKind\":\"cascade\",\"target\":{\"kind\":\"cascade\",\"resolver\":\"metadata-editor-cascade-rules\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"dependentField\"],\"properties\":{\"dependentField\":{\"type\":\"string\"},\"sourceField\":{\"type\":\"string\"},\"strategy\":{\"enum\":[\"replace\",\"merge\"]},\"debounceMs\":{\"type\":\"number\"},\"loadMode\":{\"enum\":[\"immediate\",\"manual\",\"respectLoadOn\"]},\"dependencyFilterMap\":{\"type\":\"object\"},\"optionSource\":{\"type\":\"object\",\"properties\":{\"kind\":{\"enum\":[\"static\",\"remote\",\"resource\",\"lookup\"]},\"resource\":{\"type\":\"string\"},\"endpoint\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"string\"},\"dependencyFilterMap\":{\"type\":\"object\"}}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-cascade-configure\",\"handlerContract\":{\"reads\":[\"CascadeManagerTabComponent\",\"CascadeRulesService\",\"fields\",\"fieldMetadata.optionSource\",\"fieldMetadata.dependencyFields\",\"fieldMetadata.dependencyFilterMap\"],\"writes\":[\"fieldMetadata.dependencyFields\",\"fieldMetadata.enableDependencyCascade\",\"fieldMetadata.resetOnDependentChange\",\"fieldMetadata.dependencyFilterMap\",\"fieldMetadata.dependencyValuePath\",\"fieldMetadata.dependencyMergeStrategy\",\"fieldMetadata.dependencyDebounceMs\",\"fieldMetadata.dependencyLoadOnChange\",\"fieldMetadata.optionSource.dependsOn\",\"fieldMetadata.optionSource.dependencyFilterMap\"],\"identityKeys\":[\"dependentField\",\"sourceField\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"dependentField\"],\"properties\":{\"dependentField\":{\"type\":\"string\"},\"sourceField\":{\"type\":\"string\"},\"strategy\":{\"enum\":[\"replace\",\"merge\"]},\"debounceMs\":{\"type\":\"number\"},\"loadMode\":{\"enum\":[\"immediate\",\"manual\",\"respectLoadOn\"]},\"dependencyFilterMap\":{\"type\":\"object\"},\"optionSource\":{\"type\":\"object\",\"properties\":{\"kind\":{\"enum\":[\"static\",\"remote\",\"resource\",\"lookup\"]},\"resource\":{\"type\":\"string\"},\"endpoint\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"string\"},\"dependencyFilterMap\":{\"type\":\"object\"}}}}},\"failureModes\":[\"dependent-field-not-found\",\"source-field-not-found\",\"cascade-cycle-detected\",\"dependency-filter-map-invalid\"],\"description\":\"Applies cascade dependencies through CascadeRulesService using the metadata-editor save contract while preserving backend x-ui optionSource dependency semantics during hydration.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"cascade-fields-exist\",\"cascade-cycle-free\",\"cascade-backend-shape-preserved\",\"option-source-shape-canonical\",\"remote-option-source-governed\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata.dependencyFields\",\"fieldMetadata.enableDependencyCascade\",\"fieldMetadata.resetOnDependentChange\",\"fieldMetadata.dependencyFilterMap\",\"fieldMetadata.dependencyValuePath\",\"fieldMetadata.dependencyMergeStrategy\",\"fieldMetadata.dependencyDebounceMs\",\"fieldMetadata.dependencyLoadOnChange\",\"fieldMetadata.optionSource.dependsOn\",\"fieldMetadata.optionSource.dependencyFilterMap\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"field-list-loaded\"]},{\"operationId\":\"renderer.configure\",\"title\":\"Configure renderer coverage\",\"scope\":\"editorCoverage\",\"targetKind\":\"renderer\",\"target\":{\"kind\":\"renderer\",\"resolver\":\"metadata-editor-renderer-property\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"propertyName\",\"editorType\"],\"properties\":{\"propertyName\":{\"type\":\"string\"},\"editorType\":{\"type\":\"string\"},\"group\":{\"type\":\"string\"},\"required\":{\"type\":\"boolean\"},\"options\":{\"type\":\"array\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-renderer-configure\",\"handlerContract\":{\"reads\":[\"DynamicEditorRendererComponent\",\"EditorComponentRegistryService\",\"ConfigRegistryService\",\"EditorProperty\"],\"writes\":[\"properties\",\"editorCoverage\"],\"identityKeys\":[\"controlType\",\"propertyName\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"propertyName\",\"editorType\"],\"properties\":{\"propertyName\":{\"type\":\"string\"},\"editorType\":{\"type\":\"string\"},\"group\":{\"type\":\"string\"}}},\"failureModes\":[\"editor-type-not-registered\",\"property-not-covered\",\"json-only-coverage-not-accepted\"],\"description\":\"Configures visual renderer coverage for a metadata property and rejects JSON-only support for required visual authoring.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"renderer-editor-type-registered\",\"visual-editor-coverage-required\",\"editor-coverage-exists\",\"metadata-round-trip\"],\"affectedPaths\":[\"properties\",\"editorCoverage\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-registry-loaded\"]},{\"operationId\":\"validationRule.add\",\"title\":\"Add validation rule\",\"scope\":\"fieldMetadataPath\",\"targetKind\":\"validation\",\"target\":{\"kind\":\"validation\",\"resolver\":\"field-metadata-validation-rules\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"rule\"],\"properties\":{\"rule\":{\"type\":\"object\"},\"message\":{\"type\":\"string\"},\"contextValidatorId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-validation-rule-add\",\"handlerContract\":{\"reads\":[\"fieldMetadata.validators\",\"ContextValidatorRegistryService\",\"DynamicFormFactoryService\"],\"writes\":[\"fieldMetadata.validators\"],\"identityKeys\":[\"field.name\",\"rule.type\",\"contextValidatorId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"rule\"],\"properties\":{\"rule\":{\"type\":\"object\"},\"message\":{\"type\":\"string\"},\"contextValidatorId\":{\"type\":\"string\"}}},\"failureModes\":[\"validation-rule-invalid\",\"context-validator-not-registered\",\"duplicate-validation-rule\"],\"description\":\"Adds a canonical validation rule and verifies contextual validator availability before persistence.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"validation-rule-canonical\",\"context-validator-registered\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata.validators\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"field-metadata-loaded\"]},{\"operationId\":\"contextHint.set\",\"title\":\"Set metadata context hint\",\"scope\":\"meta\",\"targetKind\":\"contextHint\",\"target\":{\"kind\":\"contextHint\",\"resolver\":\"metadata-editor-context-hints\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"hintPath\",\"value\"],\"properties\":{\"hintPath\":{\"enum\":[\"hint\",\"helpText\",\"description\",\"tooltip\",\"ariaLabel\",\"ariaDescribedBy\"]},\"value\":{},\"localeKey\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-context-hint-set\",\"handlerContract\":{\"reads\":[\"fieldMetadata.hint\",\"fieldMetadata.helpText\",\"fieldMetadata.description\",\"fieldMetadata.tooltip\",\"fieldMetadata.ariaLabel\",\"fieldMetadata.ariaDescribedBy\",\"metadata-editor-i18n\"],\"writes\":[\"fieldMetadata.hint\",\"fieldMetadata.helpText\",\"fieldMetadata.description\",\"fieldMetadata.tooltip\",\"fieldMetadata.ariaLabel\",\"fieldMetadata.ariaDescribedBy\"],\"identityKeys\":[\"field.name\",\"hintPath\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"hintPath\",\"value\"],\"properties\":{\"hintPath\":{\"enum\":[\"hint\",\"helpText\",\"description\",\"tooltip\",\"ariaLabel\",\"ariaDescribedBy\"]},\"value\":{},\"localeKey\":{\"type\":\"string\"}}},\"failureModes\":[\"hint-path-not-canonical\",\"hint-value-not-serializable\",\"i18n-key-missing\"],\"description\":\"Sets structured FieldMetadata hint/help/accessibility text through canonical metadata paths and metadata-editor i18n constraints.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"context-hint-shape-canonical\",\"context-hint-i18n-compatible\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata.hint\",\"fieldMetadata.helpText\",\"fieldMetadata.description\",\"fieldMetadata.tooltip\",\"fieldMetadata.ariaLabel\",\"fieldMetadata.ariaDescribedBy\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"field-metadata-loaded\"]}]}",
|
|
2007
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
2008
|
+
"contentHash": "3a127b0287f92c48907abbd2d4209cc3280ee4d350f8c59fdc86e99c5cdfa8d7",
|
|
2009
|
+
"sourceKind": "component_definition",
|
|
2010
|
+
"sourceId": "praxis-metadata-editor",
|
|
2011
|
+
"corpusVersion": "1.0.0"
|
|
2012
|
+
},
|
|
2013
|
+
{
|
|
2014
|
+
"chunkIndex": 15,
|
|
2015
|
+
"chunkKind": "authoring_manifest",
|
|
2016
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"dateRangeShortcuts.configure\",\"title\":\"Configure governed date range shortcuts\",\"scope\":\"fieldMetadataPath\",\"targetKind\":\"dateRangeShortcuts\",\"target\":{\"kind\":\"dateRangeShortcuts\",\"resolver\":\"metadata-editor-date-range-shortcut-catalog\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"shortcuts\"],\"properties\":{\"shortcuts\":{\"type\":\"array\",\"items\":{\"anyOf\":[{\"enum\":[\"today\",\"yesterday\",\"thisWeek\",\"lastWeek\",\"thisMonth\",\"lastMonth\",\"thisYear\",\"lastYear\"]},{\"type\":\"object\",\"required\":[\"id\",\"label\",\"startDate\",\"endDate\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"label\":{\"type\":\"string\",\"minLength\":1},\"startDate\":{\"type\":\"string\",\"pattern\":\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\"},\"endDate\":{\"type\":\"string\",\"pattern\":\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\"},\"timeZone\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"tone\":{\"enum\":[\"neutral\",\"info\",\"success\",\"warning\"]},\"effectiveFrom\":{\"type\":\"string\",\"pattern\":\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\"},\"effectiveTo\":{\"type\":\"string\",\"pattern\":\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\"},\"order\":{\"type\":\"number\"}}}]}},\"inlineQuickPresets\":{\"type\":\"object\",\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"maxVisible\":{\"type\":\"number\"},\"position\":{\"enum\":[\"auto\",\"footer\",\"start\",\"end\"]}}},\"applyMode\":{\"enum\":[\"auto\",\"explicit\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-date-range-shortcuts-configure\",\"handlerContract\":{\"reads\":[\"fieldMetadata.controlType\",\"fieldMetadata.shortcuts\",\"fieldMetadata.inlineQuickPresets\",\"fieldMetadata.inlineOverlay\",\"ConfigRegistryService\"],\"writes\":[\"fieldMetadata.shortcuts\",\"fieldMetadata.inlineQuickPresets\",\"fieldMetadata.inlineOverlay.applyMode\"],\"identityKeys\":[\"field.name\",\"shortcuts[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"shortcuts\"],\"properties\":{\"shortcuts\":{\"type\":\"array\",\"items\":{\"anyOf\":[{\"enum\":[\"today\",\"yesterday\",\"thisWeek\",\"lastWeek\",\"thisMonth\",\"lastMonth\",\"thisYear\",\"lastYear\"]},{\"type\":\"object\",\"required\":[\"id\",\"label\",\"startDate\",\"endDate\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"label\":{\"type\":\"string\",\"minLength\":1},\"startDate\":{\"type\":\"string\",\"pattern\":\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\"},\"endDate\":{\"type\":\"string\",\"pattern\":\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\"},\"timeZone\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"tone\":{\"enum\":[\"neutral\",\"info\",\"success\",\"warning\"]},\"effectiveFrom\":{\"type\":\"string\",\"pattern\":\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\"},\"effectiveTo\":{\"type\":\"string\",\"pattern\":\"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\"},\"order\":{\"type\":\"number\"}}}]}},\"inlineQuickPresets\":{\"type\":\"object\",\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"maxVisible\":{\"type\":\"number\"},\"position\":{\"enum\":[\"auto\",\"footer\",\"start\",\"end\"]}}},\"applyMode\":{\"enum\":[\"auto\",\"explicit\"]}}},\"failureModes\":[\"control-type-not-date-range\",\"duplicate-shortcut-id\",\"invalid-static-date-range-shortcut\",\"unsupported-shortcut-tone\",\"executable-shortcut-metadata\"],\"description\":\"Configures built-in and backend-resolved static date range shortcuts through the canonical shortcuts array; JSON metadata may not contain calculateRange or executable expressions.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"date-range-shortcuts-static-canonical\",\"date-range-shortcuts-no-executable-metadata\",\"date-range-shortcuts-unique-ids\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata.shortcuts\",\"fieldMetadata.inlineQuickPresets\",\"fieldMetadata.inlineOverlay.applyMode\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"field-metadata-loaded\",\"editor-properties-loaded\"]},{\"operationId\":\"normalization.apply\",\"title\":\"Apply schema normalization\",\"scope\":\"runtimeCoverage\",\"targetKind\":\"normalization\",\"target\":{\"kind\":\"normalization\",\"resolver\":\"metadata-editor-schema-normalizer\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"mode\":{\"enum\":[\"hydrate-seed\",\"coerce-types\",\"apply-defaults\",\"preserve-advanced-properties\"]},\"preserveUnknownCanonicalFields\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-normalization-apply\",\"handlerContract\":{\"reads\":[\"SchemaNormalizerService\",\"fieldMetadata\",\"properties\",\"DynamicFormFactoryService\"],\"writes\":[\"normalizedSeed\",\"form\",\"fieldMetadata\"],\"identityKeys\":[\"field.name\",\"controlType\",\"mode\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"mode\":{\"enum\":[\"hydrate-seed\",\"coerce-types\",\"apply-defaults\",\"preserve-advanced-properties\"]},\"preserveUnknownCanonicalFields\":{\"type\":\"boolean\"}}},\"failureModes\":[\"normalizer-missing\",\"type-coercion-failed\",\"advanced-property-lost\",\"runtime-editor-drift\"],\"description\":\"Runs metadata-editor schema normalization while preserving canonical advanced FieldMetadata properties and editor/runtime round-trip.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"normalization-preserves-canonical-fields\",\"runtime-editor-round-trip\",\"metadata-round-trip\"],\"affectedPaths\":[\"normalizedSeed\",\"form\",\"fieldMetadata\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"field-metadata-loaded\",\"editor-properties-loaded\"]}]}",
|
|
2017
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
2018
|
+
"contentHash": "59d513632a91ac407b2fb98c8eca8358743f3411e57cdf0d58256cc0de0e3d4b",
|
|
2019
|
+
"sourceKind": "component_definition",
|
|
2020
|
+
"sourceId": "praxis-metadata-editor",
|
|
2021
|
+
"corpusVersion": "1.0.0"
|
|
2022
|
+
},
|
|
2023
|
+
{
|
|
2024
|
+
"chunkIndex": 16,
|
|
2025
|
+
"chunkKind": "authoring_manifest",
|
|
2026
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"field-metadata-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_FIELD_SHAPE_CANONICAL\",\"description\":\"Edited metadata must remain compatible with canonical FieldMetadata.\"},{\"validatorId\":\"field-path-supported-by-editor\",\"level\":\"error\",\"code\":\"METADATA_FIELD_PATH_SUPPORTED\",\"description\":\"Edited paths must be supported by visual editor coverage or explicitly delegated.\"},{\"validatorId\":\"control-type-exists-in-discovery\",\"level\":\"error\",\"code\":\"METADATA_CONTROL_TYPE_DISCOVERED\",\"description\":\"Control type must exist in dynamic-fields discovery.\"},{\"validatorId\":\"editor-coverage-exists\",\"level\":\"error\",\"code\":\"METADATA_EDITOR_COVERAGE_EXISTS\",\"description\":\"Control type and property must have metadata-editor coverage.\"},{\"validatorId\":\"option-source-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_OPTION_SOURCE_CANONICAL\",\"description\":\"Option source must use canonical FieldMetadata/x-ui shape.\"},{\"validatorId\":\"remote-option-source-governed\",\"level\":\"error\",\"code\":\"METADATA_REMOTE_OPTION_SOURCE_GOVERNED\",\"description\":\"Remote option sources must resolve through governed resource or endpoint metadata.\"},{\"validatorId\":\"cascade-fields-exist\",\"level\":\"error\",\"code\":\"METADATA_CASCADE_FIELDS_EXIST\",\"description\":\"Cascade source and dependent fields must exist.\"},{\"validatorId\":\"cascade-cycle-free\",\"level\":\"error\",\"code\":\"METADATA_CASCADE_CYCLE_FREE\",\"description\":\"Cascade dependencies must not create cycles.\"},{\"validatorId\":\"cascade-backend-shape-preserved\",\"level\":\"error\",\"code\":\"METADATA_CASCADE_BACKEND_SHAPE_PRESERVED\",\"description\":\"Cascade config must preserve x-ui optionSource dependsOn and dependencyFilterMap semantics.\"},{\"validatorId\":\"renderer-editor-type-registered\",\"level\":\"error\",\"code\":\"METADATA_RENDERER_TYPE_REGISTERED\",\"description\":\"Renderer editor type must be registered.\"},{\"validatorId\":\"visual-editor-coverage-required\",\"level\":\"error\",\"code\":\"METADATA_VISUAL_COVERAGE_REQUIRED\",\"description\":\"JSON-only support is not accepted for required visual authoring coverage.\"},{\"validatorId\":\"validation-rule-canonical\",\"level\":\"error\",\"code\":\"METADATA_VALIDATION_RULE_CANONICAL\",\"description\":\"Validation rule must use canonical metadata shape.\"},{\"validatorId\":\"context-validator-registered\",\"level\":\"error\",\"code\":\"METADATA_CONTEXT_VALIDATOR_REGISTERED\",\"description\":\"Contextual validator must be registered before use.\"},{\"validatorId\":\"context-hint-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_CONTEXT_HINT_CANONICAL\",\"description\":\"Context hints must remain structured metadata, not free-form host-only strings.\"},{\"validatorId\":\"context-hint-i18n-compatible\",\"level\":\"warning\",\"code\":\"METADATA_CONTEXT_HINT_I18N_COMPATIBLE\",\"description\":\"Authoring hint text must remain compatible with metadata-editor i18n.\"},{\"validatorId\":\"date-range-shortcuts-static-canonical\",\"level\":\"error\",\"code\":\"METADATA_DATE_RANGE_SHORTCUTS_STATIC_CANONICAL\",\"description\":\"Date range shortcuts must be built-in ids or static backend-resolved ranges with id, label, startDate and endDate.\"},{\"validatorId\":\"date-range-shortcuts-no-executable-metadata\",\"level\":\"error\",\"code\":\"METADATA_DATE_RANGE_SHORTCUTS_NO_EXECUTABLE_METADATA\",\"description\":\"Metadata shortcuts must not contain calculateRange, executable expressions, local calendar-law rules, or frontend business-day logic.\"},{\"validatorId\":\"date-range-shortcuts-unique-ids\",\"level\":\"error\",\"code\":\"METADATA_DATE_RANGE_SHORTCUTS_UNIQUE_IDS\",\"description\":\"Static business shortcuts must use unique ids inside the date range field.\"},{\"validatorId\":\"normalization-preserves-canonical-fields\",\"level\":\"error\",\"code\":\"METADATA_NORMALIZATION_PRESERVES_FIELDS\",\"description\":\"Normalization must not drop canonical advanced FieldMetadata properties.\"},{\"validatorId\":\"runtime-editor-round-trip\",\"level\":\"error\",\"code\":\"METADATA_RUNTIME_EDITOR_ROUND_TRIP\",\"description\":\"Runtime and editor must consume the same normalized metadata shape.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}]}",
|
|
2027
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
2028
|
+
"contentHash": "3b9148ddb8fd1a255e5150ca321e11f2779fb480afac5ebe0cfb5bd128127896",
|
|
2029
|
+
"sourceKind": "component_definition",
|
|
2030
|
+
"sourceId": "praxis-metadata-editor",
|
|
2031
|
+
"corpusVersion": "1.0.0"
|
|
2032
|
+
},
|
|
2033
|
+
{
|
|
2034
|
+
"chunkIndex": 17,
|
|
2035
|
+
"chunkKind": "authoring_manifest",
|
|
2036
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"FieldMetadata is the canonical edited document shape; backend x-ui-derived metadata must not be rewritten into host-only aliases.\",\"Control type changes require both dynamic-fields discovery and metadata-editor visual coverage.\",\"Option source cascades preserve x-ui optionSource.dependsOn and optionSource.dependencyFilterMap semantics.\",\"Date range business shortcuts are authored as built-in ids or backend-resolved static ranges; browser metadata never carries calculateRange code or business calendar rules.\",\"JSON-only support is incomplete when visual editor coverage is required.\",\"Schema normalization must preserve advanced canonical properties through open, edit, apply/save, reopen and runtime consumption.\"]}",
|
|
2037
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
2038
|
+
"contentHash": "a50f50bff84341366760569555738c538260cacc577e234be485d4502e5eebde",
|
|
2039
|
+
"sourceKind": "component_definition",
|
|
2040
|
+
"sourceId": "praxis-metadata-editor",
|
|
2041
|
+
"corpusVersion": "1.0.0"
|
|
2042
|
+
},
|
|
2043
|
+
{
|
|
2044
|
+
"chunkIndex": 18,
|
|
2045
|
+
"chunkKind": "authoring_manifest",
|
|
2046
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"set-label\",\"request\":\"Set this field label to Customer name.\",\"operationId\":\"fieldMetadata.property.set\",\"params\":{\"path\":\"label\",\"value\":\"Customer name\"},\"isPositive\":true},{\"id\":\"set-control-type\",\"request\":\"Change this field to a select control.\",\"operationId\":\"controlType.set\",\"params\":{\"controlType\":\"select\",\"preserveCompatibleProperties\":true},\"isPositive\":true},{\"id\":\"configure-remote-options\",\"request\":\"Load options from the customers resource using id and name.\",\"operationId\":\"optionSource.configure\",\"params\":{\"kind\":\"resource\",\"resource\":\"customers\",\"valueField\":\"id\",\"labelField\":\"name\"},\"isPositive\":true},{\"id\":\"configure-cascade\",\"request\":\"Filter city options when state changes.\",\"operationId\":\"cascade.configure\",\"params\":{\"dependentField\":\"city\",\"sourceField\":\"state\",\"dependencyFilterMap\":{\"stateId\":\"state.id\"}},\"isPositive\":true},{\"id\":\"configure-renderer\",\"request\":\"Expose placeholder in the visual editor as a text field.\",\"operationId\":\"renderer.configure\",\"params\":{\"propertyName\":\"placeholder\",\"editorType\":\"text\",\"group\":\"Presentation\"},\"isPositive\":true},{\"id\":\"add-required-validation\",\"request\":\"Make this field required with a validation message.\",\"operationId\":\"validationRule.add\",\"params\":{\"rule\":{\"type\":\"required\"},\"message\":\"Required field\"},\"isPositive\":true},{\"id\":\"set-context-hint\",\"request\":\"Add a contextual hint for sales users.\",\"operationId\":\"contextHint.set\",\"params\":{\"hintPath\":\"helpText\",\"value\":\"Use the legal customer name.\"},\"isPositive\":true},{\"id\":\"configure-date-range-business-shortcut\",\"request\":\"Add a fiscal competence period resolved by the backend to this inline date range.\",\"operationId\":\"dateRangeShortcuts.configure\",\"params\":{\"shortcuts\":[\"thisMonth\",{\"id\":\"competencia-fiscal-marco\",\"label\":\"Fiscal competence March\",\"startDate\":\"2026-03-01\",\"endDate\":\"2026-03-31\",\"timeZone\":\"America/Sao_Paulo\",\"tone\":\"success\"}],\"inlineQuickPresets\":{\"enabled\":true,\"position\":\"start\",\"maxVisible\":4},\"applyMode\":\"explicit\"},\"isPositive\":true},{\"id\":\"reject-date-range-executable-shortcut\",\"request\":\"Add a date range shortcut that calculates fiscal holidays in calculateRange from JSON.\",\"operationId\":\"dateRangeShortcuts.configure\",\"params\":{\"shortcuts\":[{\"id\":\"legal-days\",\"label\":\"Legal days\",\"startDate\":\"2026-03-01\",\"endDate\":\"2026-03-31\",\"calculateRange\":\"() => legalCalendar()\"}]},\"isPositive\":false},{\"id\":\"normalize-seed\",\"request\":\"Normalize this imported field metadata while preserving advanced properties.\",\"operationId\":\"normalization.apply\",\"params\":{\"mode\":\"preserve-advanced-properties\",\"preserveUnknownCanonicalFields\":true},\"isPositive\":true},{\"id\":\"reject-unknown-control\",\"request\":\"Use an unknown control type named magic-picker.\",\"operationId\":\"controlType.set\",\"params\":{\"controlType\":\"magic-picker\"},\"isPositive\":false},{\"id\":\"reject-json-only-coverage\",\"request\":\"Support this field only by editing raw JSON.\",\"operationId\":\"renderer.configure\",\"params\":{\"propertyName\":\"optionSource\",\"editorType\":\"json\"},\"isPositive\":false},{\"id\":\"reject-cascade-cycle\",\"request\":\"Make field A depend on B and B depend on A.\",\"operationId\":\"cascade.configure\",\"params\":{\"dependentField\":\"a\",\"sourceField\":\"b\"},\"isPositive\":false},{\"id\":\"reject-host-only-option-source\",\"request\":\"Save a host-only URL string as the option source.\",\"operationId\":\"optionSource.configure\",\"params\":{\"kind\":\"remote\",\"endpoint\":\"local-only://options\"},\"isPositive\":false}]}",
|
|
2047
|
+
"sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
|
|
2048
|
+
"contentHash": "b9fcde426b6d20b1b60732085bb6753ac25ab86a84ed516edb1d4f5a73548dc2",
|
|
2049
|
+
"sourceKind": "component_definition",
|
|
2050
|
+
"sourceId": "praxis-metadata-editor",
|
|
2051
|
+
"corpusVersion": "1.0.0"
|
|
2052
|
+
},
|
|
2053
|
+
{
|
|
2054
|
+
"chunkIndex": 19,
|
|
2055
|
+
"chunkKind": "recipe",
|
|
2056
|
+
"content": "{\"_comment\":\"Receita para o Editor de Metadados (FieldMetadata).\",\"templateMeta\":{\"registryKey\":\"praxis-metadata-editor\",\"variantId\":\"base\",\"useWhen\":\"Base metadata editor configuration.\",\"examplePrompts\":[\"configure field metadata editor\",\"set up metadata editor preview and permissions\"]},\"metadata\":{\"schema\":{\"id\":\"product-schema\",\"version\":\"1.0\"},\"permissions\":{\"edit\":[\"admin\"],\"view\":[\"user\",\"guest\"]},\"preview\":{\"live\":true,\"mode\":\"form\"},\"fieldDefinitions\":[{\"name\":\"sku\",\"label\":\"SKU\",\"controlType\":\"input\",\"validationHelpers\":{\"mask\":\"AAA-9999\",\"regex\":\"^[A-Z]{3}-\\\\d{4}$\"}},{\"name\":\"category\",\"label\":\"Categoria\",\"controlType\":\"select\",\"options\":[\"Electronics\",\"Books\"]},{\"name\":\"subcategory\",\"label\":\"Subcategoria\",\"controlType\":\"select\",\"cascades\":[{\"triggerField\":\"category\",\"action\":\"filterOptions\",\"endpoint\":\"/api/subcategories?category={category}\"}]}]}}",
|
|
2057
|
+
"sourcePointer": "examples/ai-recipes/praxis-field-metadata-editor.json",
|
|
2058
|
+
"contentHash": "7465601d729f9dcebdd5eda822dfa201723bd101351db3ad5ff110faf5f951b5",
|
|
2059
|
+
"sourceKind": "component_definition",
|
|
2060
|
+
"sourceId": "praxis-metadata-editor",
|
|
2061
|
+
"corpusVersion": "1.0.0"
|
|
2062
|
+
}
|
|
2063
|
+
]
|
|
2064
|
+
}
|
|
2065
|
+
},
|
|
2066
|
+
"note": "Package-scoped Praxis component registry for source-free agent discovery. Use the canonical ingestion registry for cross-package aggregate analysis."
|
|
2067
|
+
}
|