@praxisui/charts 9.0.0-beta.7 → 9.0.0-beta.71
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 +27 -3
- package/ai/component-registry.json +1809 -0
- package/fesm2022/praxisui-charts.mjs +941 -7
- package/package.json +8 -4
- package/types/praxisui-charts.d.ts +64 -2
|
@@ -0,0 +1,1809 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"generatedAt": "2026-07-11T00:12:06.404Z",
|
|
4
|
+
"packageName": "@praxisui/charts",
|
|
5
|
+
"packageVersion": "9.0.0-beta.71",
|
|
6
|
+
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
|
+
"sourceRegistryVersion": "1.0.0",
|
|
8
|
+
"componentCount": 2,
|
|
9
|
+
"components": {
|
|
10
|
+
"praxis-chart": {
|
|
11
|
+
"id": "praxis-chart",
|
|
12
|
+
"description": "Chart component for analytics and metadata-driven visualizations in Praxis UI.",
|
|
13
|
+
"inputs": [
|
|
14
|
+
{
|
|
15
|
+
"name": "config",
|
|
16
|
+
"type": "PraxisChartConfig",
|
|
17
|
+
"required": false
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "data",
|
|
21
|
+
"type": "PraxisChartDataRow[]",
|
|
22
|
+
"required": false
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "chartDocument",
|
|
26
|
+
"type": "PraxisXUiChartContract | null",
|
|
27
|
+
"required": false
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "queryContext",
|
|
31
|
+
"type": "PraxisDataQueryContext | null",
|
|
32
|
+
"required": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "remoteDataResolver",
|
|
36
|
+
"type": "PraxisChartRemoteDataResolver | null",
|
|
37
|
+
"required": false
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "filterCriteria",
|
|
41
|
+
"type": "Record<string, unknown> | null",
|
|
42
|
+
"required": false
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "enableCustomization",
|
|
46
|
+
"type": "boolean",
|
|
47
|
+
"required": false
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "availableResources",
|
|
51
|
+
"type": "ReadonlyArray<ChartEditorResourceOption>",
|
|
52
|
+
"required": false
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "availableFields",
|
|
56
|
+
"type": "ReadonlyArray<ChartEditorFieldOption>",
|
|
57
|
+
"required": false
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "availableTargets",
|
|
61
|
+
"type": "ReadonlyArray<ChartEditorTargetOption>",
|
|
62
|
+
"required": false
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"outputs": [
|
|
66
|
+
{
|
|
67
|
+
"name": "pointClick",
|
|
68
|
+
"type": "PraxisChartPointEvent",
|
|
69
|
+
"required": false
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "selectionChange",
|
|
73
|
+
"type": "PraxisChartSelectionEvent",
|
|
74
|
+
"required": false
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "crossFilter",
|
|
78
|
+
"type": "PraxisChartCrossFilterEvent",
|
|
79
|
+
"required": false
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"name": "queryRequest",
|
|
83
|
+
"type": "PraxisChartQueryRequestEvent",
|
|
84
|
+
"required": false
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"name": "loadStateChange",
|
|
88
|
+
"type": "PraxisChartLoadState",
|
|
89
|
+
"required": false
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "chartDocumentApplied",
|
|
93
|
+
"type": "PraxisXUiChartContract",
|
|
94
|
+
"required": false
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"name": "chartDocumentSaved",
|
|
98
|
+
"type": "PraxisXUiChartContract",
|
|
99
|
+
"required": false
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"configSchemaId": null,
|
|
103
|
+
"selector": "praxis-chart",
|
|
104
|
+
"friendlyName": "Praxis Chart",
|
|
105
|
+
"icon": "bar_chart",
|
|
106
|
+
"tags": [
|
|
107
|
+
"chart",
|
|
108
|
+
"analytics",
|
|
109
|
+
"widget",
|
|
110
|
+
"visualization"
|
|
111
|
+
],
|
|
112
|
+
"lib": "@praxisui/charts",
|
|
113
|
+
"source": "projects/praxis-charts/src/lib/praxis-chart.metadata.ts",
|
|
114
|
+
"exportName": "PRAXIS_CHART_COMPONENT_METADATA",
|
|
115
|
+
"authoringManifest": {
|
|
116
|
+
"schemaVersion": "1.0.0",
|
|
117
|
+
"componentId": "praxis-chart",
|
|
118
|
+
"ownerPackage": "@praxisui/charts",
|
|
119
|
+
"configSchemaId": "PraxisXUiChartContract",
|
|
120
|
+
"manifestVersion": "1.0.0",
|
|
121
|
+
"runtimeInputs": [
|
|
122
|
+
{
|
|
123
|
+
"name": "chartDocument",
|
|
124
|
+
"type": "PraxisXUiChartContract | null",
|
|
125
|
+
"description": "Canonical x-ui.chart document used as the authoring source of truth."
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"name": "config",
|
|
129
|
+
"type": "PraxisChartConfig",
|
|
130
|
+
"description": "Runtime chart configuration mapped from or supplied beside the canonical chart document."
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"name": "queryContext",
|
|
134
|
+
"type": "PraxisChartQueryContext | null",
|
|
135
|
+
"description": "Declarative query context merged into remote datasource requests."
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"name": "remoteDataResolver",
|
|
139
|
+
"type": "PraxisChartRemoteDataResolver | null",
|
|
140
|
+
"description": "Host-governed remote row resolver for integrations outside the default praxis.stats client."
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"name": "availableResources",
|
|
144
|
+
"type": "ChartEditorResourceOption[]",
|
|
145
|
+
"description": "Governed remote resource catalog exposed to the config editor."
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "availableFields",
|
|
149
|
+
"type": "ChartEditorFieldOption[]",
|
|
150
|
+
"description": "Governed semantic field catalog exposed to the config editor."
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"name": "availableTargets",
|
|
154
|
+
"type": "ChartEditorTargetOption[]",
|
|
155
|
+
"description": "Governed widget or route targets exposed to chart event authoring."
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"editableTargets": [
|
|
159
|
+
{
|
|
160
|
+
"kind": "chartType",
|
|
161
|
+
"resolver": "x-ui-chart-kind",
|
|
162
|
+
"description": "Canonical `kind` field in PraxisXUiChartContract."
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"kind": "series",
|
|
166
|
+
"resolver": "x-ui-chart-metric-by-field",
|
|
167
|
+
"description": "Metric-backed series definition in `metrics[]`, keyed by field."
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"kind": "axis",
|
|
171
|
+
"resolver": "x-ui-chart-dimension-or-metric-axis",
|
|
172
|
+
"description": "Dimension role, metric axis and chart orientation semantics."
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"kind": "dataBinding",
|
|
176
|
+
"resolver": "x-ui-chart-source-and-field-catalog",
|
|
177
|
+
"description": "Source, dimensions, metrics and resource/field bindings."
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"kind": "queryContext",
|
|
181
|
+
"resolver": "praxis-chart-query-context",
|
|
182
|
+
"description": "Runtime queryContext contract for filters, sort, limit and page."
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"kind": "crossFilter",
|
|
186
|
+
"resolver": "x-ui-chart-events-cross-filter",
|
|
187
|
+
"description": "Cross-filter event mapping emitted as structured query-context filters."
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"kind": "drilldown",
|
|
191
|
+
"resolver": "x-ui-chart-events-drill-down",
|
|
192
|
+
"description": "Drilldown event mapping and governed target."
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"kind": "selection",
|
|
196
|
+
"resolver": "x-ui-chart-events-selection-change",
|
|
197
|
+
"description": "Selection event enablement and mapping semantics."
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"kind": "legend",
|
|
201
|
+
"resolver": "x-ui-chart-legend-feature",
|
|
202
|
+
"description": "Legend visibility through boolean or toggleable feature object."
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"kind": "tooltip",
|
|
206
|
+
"resolver": "x-ui-chart-tooltip-feature",
|
|
207
|
+
"description": "Tooltip visibility through boolean or toggleable feature object."
|
|
208
|
+
}
|
|
209
|
+
],
|
|
210
|
+
"operations": [
|
|
211
|
+
{
|
|
212
|
+
"operationId": "chart.document.set",
|
|
213
|
+
"title": "Set chart document",
|
|
214
|
+
"scope": "global",
|
|
215
|
+
"targetKind": "dataBinding",
|
|
216
|
+
"target": {
|
|
217
|
+
"kind": "dataBinding",
|
|
218
|
+
"resolver": "x-ui-chart-document-root",
|
|
219
|
+
"ambiguityPolicy": "fail",
|
|
220
|
+
"required": false
|
|
221
|
+
},
|
|
222
|
+
"inputSchema": {
|
|
223
|
+
"type": "object",
|
|
224
|
+
"required": [
|
|
225
|
+
"version",
|
|
226
|
+
"kind",
|
|
227
|
+
"source"
|
|
228
|
+
],
|
|
229
|
+
"properties": {
|
|
230
|
+
"version": {
|
|
231
|
+
"const": "0.1.0"
|
|
232
|
+
},
|
|
233
|
+
"kind": {
|
|
234
|
+
"enum": [
|
|
235
|
+
"bar",
|
|
236
|
+
"combo",
|
|
237
|
+
"horizontal-bar",
|
|
238
|
+
"line",
|
|
239
|
+
"pie",
|
|
240
|
+
"donut",
|
|
241
|
+
"area",
|
|
242
|
+
"stacked-bar",
|
|
243
|
+
"stacked-area",
|
|
244
|
+
"scatter"
|
|
245
|
+
]
|
|
246
|
+
},
|
|
247
|
+
"chartId": {
|
|
248
|
+
"type": "string"
|
|
249
|
+
},
|
|
250
|
+
"title": {
|
|
251
|
+
"oneOf": [
|
|
252
|
+
{
|
|
253
|
+
"type": "string"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"type": "object"
|
|
257
|
+
}
|
|
258
|
+
]
|
|
259
|
+
},
|
|
260
|
+
"subtitle": {
|
|
261
|
+
"oneOf": [
|
|
262
|
+
{
|
|
263
|
+
"type": "string"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"type": "object"
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
},
|
|
270
|
+
"source": {
|
|
271
|
+
"type": "object",
|
|
272
|
+
"required": [
|
|
273
|
+
"kind"
|
|
274
|
+
],
|
|
275
|
+
"properties": {
|
|
276
|
+
"kind": {
|
|
277
|
+
"enum": [
|
|
278
|
+
"praxis.stats",
|
|
279
|
+
"derived"
|
|
280
|
+
]
|
|
281
|
+
},
|
|
282
|
+
"resource": {
|
|
283
|
+
"type": "string"
|
|
284
|
+
},
|
|
285
|
+
"operation": {
|
|
286
|
+
"enum": [
|
|
287
|
+
"group-by",
|
|
288
|
+
"timeseries",
|
|
289
|
+
"distribution"
|
|
290
|
+
]
|
|
291
|
+
},
|
|
292
|
+
"options": {
|
|
293
|
+
"type": "object"
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
"dimensions": {
|
|
298
|
+
"type": "array",
|
|
299
|
+
"items": {
|
|
300
|
+
"type": "object"
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
"metrics": {
|
|
304
|
+
"type": "array",
|
|
305
|
+
"items": {
|
|
306
|
+
"type": "object"
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
"events": {
|
|
310
|
+
"type": "object"
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
"effects": [
|
|
315
|
+
{
|
|
316
|
+
"kind": "set-value",
|
|
317
|
+
"path": "chartDocument"
|
|
318
|
+
}
|
|
319
|
+
],
|
|
320
|
+
"destructive": false,
|
|
321
|
+
"requiresConfirmation": false,
|
|
322
|
+
"validators": [
|
|
323
|
+
"chart-document-shape",
|
|
324
|
+
"chart-version-supported",
|
|
325
|
+
"chart-type-series-axis-compatible",
|
|
326
|
+
"editor-runtime-round-trip"
|
|
327
|
+
],
|
|
328
|
+
"affectedPaths": [
|
|
329
|
+
"chartDocument"
|
|
330
|
+
],
|
|
331
|
+
"submissionImpact": "config-only",
|
|
332
|
+
"preconditions": [
|
|
333
|
+
"config-initialized"
|
|
334
|
+
]
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"operationId": "chart.type.set",
|
|
338
|
+
"title": "Set chart type",
|
|
339
|
+
"scope": "global",
|
|
340
|
+
"targetKind": "chartType",
|
|
341
|
+
"target": {
|
|
342
|
+
"kind": "chartType",
|
|
343
|
+
"resolver": "x-ui-chart-kind",
|
|
344
|
+
"ambiguityPolicy": "fail",
|
|
345
|
+
"required": false
|
|
346
|
+
},
|
|
347
|
+
"inputSchema": {
|
|
348
|
+
"type": "object",
|
|
349
|
+
"required": [
|
|
350
|
+
"kind"
|
|
351
|
+
],
|
|
352
|
+
"properties": {
|
|
353
|
+
"kind": {
|
|
354
|
+
"enum": [
|
|
355
|
+
"bar",
|
|
356
|
+
"combo",
|
|
357
|
+
"horizontal-bar",
|
|
358
|
+
"line",
|
|
359
|
+
"pie",
|
|
360
|
+
"donut",
|
|
361
|
+
"area",
|
|
362
|
+
"stacked-bar",
|
|
363
|
+
"stacked-area",
|
|
364
|
+
"scatter"
|
|
365
|
+
]
|
|
366
|
+
},
|
|
367
|
+
"orientation": {
|
|
368
|
+
"enum": [
|
|
369
|
+
"vertical",
|
|
370
|
+
"horizontal"
|
|
371
|
+
]
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
"effects": [
|
|
376
|
+
{
|
|
377
|
+
"kind": "merge-object",
|
|
378
|
+
"path": "chartDocument"
|
|
379
|
+
}
|
|
380
|
+
],
|
|
381
|
+
"destructive": false,
|
|
382
|
+
"requiresConfirmation": false,
|
|
383
|
+
"validators": [
|
|
384
|
+
"chart-type-supported",
|
|
385
|
+
"chart-type-series-axis-compatible",
|
|
386
|
+
"pie-single-metric",
|
|
387
|
+
"combo-minimum-series",
|
|
388
|
+
"editor-runtime-round-trip"
|
|
389
|
+
],
|
|
390
|
+
"affectedPaths": [
|
|
391
|
+
"chartDocument.kind",
|
|
392
|
+
"chartDocument.orientation",
|
|
393
|
+
"chartDocument.metrics[]",
|
|
394
|
+
"chartDocument.dimensions[]"
|
|
395
|
+
],
|
|
396
|
+
"submissionImpact": "config-only",
|
|
397
|
+
"preconditions": [
|
|
398
|
+
"config-initialized"
|
|
399
|
+
]
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"operationId": "series.add",
|
|
403
|
+
"title": "Add chart series",
|
|
404
|
+
"scope": "dataBinding",
|
|
405
|
+
"targetKind": "series",
|
|
406
|
+
"target": {
|
|
407
|
+
"kind": "series",
|
|
408
|
+
"resolver": "x-ui-chart-metric-by-field",
|
|
409
|
+
"ambiguityPolicy": "fail",
|
|
410
|
+
"required": false
|
|
411
|
+
},
|
|
412
|
+
"inputSchema": {
|
|
413
|
+
"type": "object",
|
|
414
|
+
"required": [
|
|
415
|
+
"field"
|
|
416
|
+
],
|
|
417
|
+
"properties": {
|
|
418
|
+
"field": {
|
|
419
|
+
"type": "string"
|
|
420
|
+
},
|
|
421
|
+
"label": {
|
|
422
|
+
"oneOf": [
|
|
423
|
+
{
|
|
424
|
+
"type": "string"
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"type": "object"
|
|
428
|
+
}
|
|
429
|
+
]
|
|
430
|
+
},
|
|
431
|
+
"aggregation": {
|
|
432
|
+
"enum": [
|
|
433
|
+
"sum",
|
|
434
|
+
"avg",
|
|
435
|
+
"min",
|
|
436
|
+
"max",
|
|
437
|
+
"count",
|
|
438
|
+
"distinct-count"
|
|
439
|
+
]
|
|
440
|
+
},
|
|
441
|
+
"seriesKind": {
|
|
442
|
+
"enum": [
|
|
443
|
+
"bar",
|
|
444
|
+
"line",
|
|
445
|
+
"area"
|
|
446
|
+
]
|
|
447
|
+
},
|
|
448
|
+
"axis": {
|
|
449
|
+
"enum": [
|
|
450
|
+
"primary",
|
|
451
|
+
"secondary"
|
|
452
|
+
]
|
|
453
|
+
},
|
|
454
|
+
"color": {
|
|
455
|
+
"type": "string"
|
|
456
|
+
},
|
|
457
|
+
"format": {
|
|
458
|
+
"type": "string"
|
|
459
|
+
},
|
|
460
|
+
"afterField": {
|
|
461
|
+
"type": "string"
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
},
|
|
465
|
+
"effects": [
|
|
466
|
+
{
|
|
467
|
+
"kind": "compile-domain-patch",
|
|
468
|
+
"handler": "chart-series-add",
|
|
469
|
+
"handlerContract": {
|
|
470
|
+
"reads": [
|
|
471
|
+
"chartDocument.kind",
|
|
472
|
+
"chartDocument.metrics[]",
|
|
473
|
+
"availableFields[]"
|
|
474
|
+
],
|
|
475
|
+
"writes": [
|
|
476
|
+
"chartDocument.metrics[]"
|
|
477
|
+
],
|
|
478
|
+
"identityKeys": [
|
|
479
|
+
"chartDocument.metrics[].field"
|
|
480
|
+
],
|
|
481
|
+
"inputSchema": {
|
|
482
|
+
"type": "object",
|
|
483
|
+
"required": [
|
|
484
|
+
"field"
|
|
485
|
+
],
|
|
486
|
+
"properties": {
|
|
487
|
+
"field": {
|
|
488
|
+
"type": "string"
|
|
489
|
+
},
|
|
490
|
+
"label": {
|
|
491
|
+
"oneOf": [
|
|
492
|
+
{
|
|
493
|
+
"type": "string"
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"type": "object"
|
|
497
|
+
}
|
|
498
|
+
]
|
|
499
|
+
},
|
|
500
|
+
"aggregation": {
|
|
501
|
+
"enum": [
|
|
502
|
+
"sum",
|
|
503
|
+
"avg",
|
|
504
|
+
"min",
|
|
505
|
+
"max",
|
|
506
|
+
"count",
|
|
507
|
+
"distinct-count"
|
|
508
|
+
]
|
|
509
|
+
},
|
|
510
|
+
"seriesKind": {
|
|
511
|
+
"enum": [
|
|
512
|
+
"bar",
|
|
513
|
+
"line",
|
|
514
|
+
"area"
|
|
515
|
+
]
|
|
516
|
+
},
|
|
517
|
+
"axis": {
|
|
518
|
+
"enum": [
|
|
519
|
+
"primary",
|
|
520
|
+
"secondary"
|
|
521
|
+
]
|
|
522
|
+
},
|
|
523
|
+
"color": {
|
|
524
|
+
"type": "string"
|
|
525
|
+
},
|
|
526
|
+
"format": {
|
|
527
|
+
"type": "string"
|
|
528
|
+
},
|
|
529
|
+
"afterField": {
|
|
530
|
+
"type": "string"
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
"failureModes": [
|
|
535
|
+
"field-not-in-catalog",
|
|
536
|
+
"duplicate-series-field",
|
|
537
|
+
"aggregation-not-supported",
|
|
538
|
+
"chart-type-series-incompatible"
|
|
539
|
+
],
|
|
540
|
+
"description": "Adds a metric-backed series by semantic field, validating it against availableFields and chart kind compatibility before patching metrics[]."
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
],
|
|
544
|
+
"destructive": false,
|
|
545
|
+
"requiresConfirmation": false,
|
|
546
|
+
"validators": [
|
|
547
|
+
"series-field-exists",
|
|
548
|
+
"series-field-aggregable",
|
|
549
|
+
"series-id-unique",
|
|
550
|
+
"chart-type-series-axis-compatible",
|
|
551
|
+
"editor-runtime-round-trip"
|
|
552
|
+
],
|
|
553
|
+
"affectedPaths": [
|
|
554
|
+
"chartDocument.metrics[]"
|
|
555
|
+
],
|
|
556
|
+
"submissionImpact": "config-only",
|
|
557
|
+
"preconditions": [
|
|
558
|
+
"config-initialized"
|
|
559
|
+
]
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
"operationId": "series.remove",
|
|
563
|
+
"title": "Remove chart series",
|
|
564
|
+
"scope": "dataBinding",
|
|
565
|
+
"targetKind": "series",
|
|
566
|
+
"target": {
|
|
567
|
+
"kind": "series",
|
|
568
|
+
"resolver": "x-ui-chart-metric-by-field",
|
|
569
|
+
"ambiguityPolicy": "fail",
|
|
570
|
+
"required": true
|
|
571
|
+
},
|
|
572
|
+
"inputSchema": {
|
|
573
|
+
"type": "object",
|
|
574
|
+
"required": [
|
|
575
|
+
"field"
|
|
576
|
+
],
|
|
577
|
+
"properties": {
|
|
578
|
+
"field": {
|
|
579
|
+
"type": "string"
|
|
580
|
+
},
|
|
581
|
+
"replacementField": {
|
|
582
|
+
"type": "string"
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
},
|
|
586
|
+
"effects": [
|
|
587
|
+
{
|
|
588
|
+
"kind": "remove-by-key",
|
|
589
|
+
"path": "chartDocument.metrics[]",
|
|
590
|
+
"key": "field"
|
|
591
|
+
}
|
|
592
|
+
],
|
|
593
|
+
"destructive": true,
|
|
594
|
+
"requiresConfirmation": true,
|
|
595
|
+
"validators": [
|
|
596
|
+
"series-exists",
|
|
597
|
+
"destructive-series-removal-confirmed",
|
|
598
|
+
"chart-keeps-required-metric",
|
|
599
|
+
"editor-runtime-round-trip"
|
|
600
|
+
],
|
|
601
|
+
"affectedPaths": [
|
|
602
|
+
"chartDocument.metrics[]"
|
|
603
|
+
],
|
|
604
|
+
"submissionImpact": "config-only",
|
|
605
|
+
"preconditions": [
|
|
606
|
+
"config-initialized",
|
|
607
|
+
"target-series-exists",
|
|
608
|
+
"confirmation-collected"
|
|
609
|
+
]
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
"operationId": "axis.configure",
|
|
613
|
+
"title": "Configure chart axis",
|
|
614
|
+
"scope": "dataBinding",
|
|
615
|
+
"targetKind": "axis",
|
|
616
|
+
"target": {
|
|
617
|
+
"kind": "axis",
|
|
618
|
+
"resolver": "x-ui-chart-dimension-or-metric-axis",
|
|
619
|
+
"ambiguityPolicy": "fail",
|
|
620
|
+
"required": true
|
|
621
|
+
},
|
|
622
|
+
"inputSchema": {
|
|
623
|
+
"type": "object",
|
|
624
|
+
"properties": {
|
|
625
|
+
"dimensionField": {
|
|
626
|
+
"type": "string"
|
|
627
|
+
},
|
|
628
|
+
"dimensionRole": {
|
|
629
|
+
"enum": [
|
|
630
|
+
"category",
|
|
631
|
+
"series",
|
|
632
|
+
"segment",
|
|
633
|
+
"time",
|
|
634
|
+
"value"
|
|
635
|
+
]
|
|
636
|
+
},
|
|
637
|
+
"metricField": {
|
|
638
|
+
"type": "string"
|
|
639
|
+
},
|
|
640
|
+
"metricAxis": {
|
|
641
|
+
"enum": [
|
|
642
|
+
"primary",
|
|
643
|
+
"secondary"
|
|
644
|
+
]
|
|
645
|
+
},
|
|
646
|
+
"orientation": {
|
|
647
|
+
"enum": [
|
|
648
|
+
"vertical",
|
|
649
|
+
"horizontal"
|
|
650
|
+
]
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
"effects": [
|
|
655
|
+
{
|
|
656
|
+
"kind": "compile-domain-patch",
|
|
657
|
+
"handler": "chart-axis-configure",
|
|
658
|
+
"handlerContract": {
|
|
659
|
+
"reads": [
|
|
660
|
+
"chartDocument.kind",
|
|
661
|
+
"chartDocument.dimensions[]",
|
|
662
|
+
"chartDocument.metrics[]",
|
|
663
|
+
"availableFields[]"
|
|
664
|
+
],
|
|
665
|
+
"writes": [
|
|
666
|
+
"chartDocument.dimensions[]",
|
|
667
|
+
"chartDocument.metrics[]",
|
|
668
|
+
"chartDocument.orientation"
|
|
669
|
+
],
|
|
670
|
+
"identityKeys": [
|
|
671
|
+
"chartDocument.dimensions[].field",
|
|
672
|
+
"chartDocument.metrics[].field"
|
|
673
|
+
],
|
|
674
|
+
"inputSchema": {
|
|
675
|
+
"type": "object",
|
|
676
|
+
"properties": {
|
|
677
|
+
"dimensionField": {
|
|
678
|
+
"type": "string"
|
|
679
|
+
},
|
|
680
|
+
"dimensionRole": {
|
|
681
|
+
"enum": [
|
|
682
|
+
"category",
|
|
683
|
+
"series",
|
|
684
|
+
"segment",
|
|
685
|
+
"time",
|
|
686
|
+
"value"
|
|
687
|
+
]
|
|
688
|
+
},
|
|
689
|
+
"metricField": {
|
|
690
|
+
"type": "string"
|
|
691
|
+
},
|
|
692
|
+
"metricAxis": {
|
|
693
|
+
"enum": [
|
|
694
|
+
"primary",
|
|
695
|
+
"secondary"
|
|
696
|
+
]
|
|
697
|
+
},
|
|
698
|
+
"orientation": {
|
|
699
|
+
"enum": [
|
|
700
|
+
"vertical",
|
|
701
|
+
"horizontal"
|
|
702
|
+
]
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
},
|
|
706
|
+
"failureModes": [
|
|
707
|
+
"field-not-in-catalog",
|
|
708
|
+
"secondary-axis-non-combo",
|
|
709
|
+
"missing-required-dimension",
|
|
710
|
+
"axis-role-incompatible"
|
|
711
|
+
],
|
|
712
|
+
"description": "Configures dimensions and metric axes using semantic fields, preserving combo-only secondary axis constraints."
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
],
|
|
716
|
+
"destructive": false,
|
|
717
|
+
"requiresConfirmation": false,
|
|
718
|
+
"validators": [
|
|
719
|
+
"axis-field-exists",
|
|
720
|
+
"secondary-axis-combo-only",
|
|
721
|
+
"cartesian-dimension-required",
|
|
722
|
+
"editor-runtime-round-trip"
|
|
723
|
+
],
|
|
724
|
+
"affectedPaths": [
|
|
725
|
+
"chartDocument.dimensions[]",
|
|
726
|
+
"chartDocument.metrics[].axis",
|
|
727
|
+
"chartDocument.orientation"
|
|
728
|
+
],
|
|
729
|
+
"submissionImpact": "config-only",
|
|
730
|
+
"preconditions": [
|
|
731
|
+
"config-initialized"
|
|
732
|
+
]
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
"operationId": "data.resource.bind",
|
|
736
|
+
"title": "Bind chart data resource",
|
|
737
|
+
"scope": "dataBinding",
|
|
738
|
+
"targetKind": "dataBinding",
|
|
739
|
+
"target": {
|
|
740
|
+
"kind": "dataBinding",
|
|
741
|
+
"resolver": "x-ui-chart-source-and-field-catalog",
|
|
742
|
+
"ambiguityPolicy": "fail",
|
|
743
|
+
"required": false
|
|
744
|
+
},
|
|
745
|
+
"inputSchema": {
|
|
746
|
+
"type": "object",
|
|
747
|
+
"required": [
|
|
748
|
+
"sourceKind"
|
|
749
|
+
],
|
|
750
|
+
"properties": {
|
|
751
|
+
"sourceKind": {
|
|
752
|
+
"enum": [
|
|
753
|
+
"praxis.stats",
|
|
754
|
+
"derived"
|
|
755
|
+
]
|
|
756
|
+
},
|
|
757
|
+
"resource": {
|
|
758
|
+
"type": "string"
|
|
759
|
+
},
|
|
760
|
+
"operation": {
|
|
761
|
+
"enum": [
|
|
762
|
+
"group-by",
|
|
763
|
+
"timeseries",
|
|
764
|
+
"distribution"
|
|
765
|
+
]
|
|
766
|
+
},
|
|
767
|
+
"dimensions": {
|
|
768
|
+
"type": "array",
|
|
769
|
+
"items": {
|
|
770
|
+
"type": "object",
|
|
771
|
+
"required": [
|
|
772
|
+
"field"
|
|
773
|
+
],
|
|
774
|
+
"properties": {
|
|
775
|
+
"field": {
|
|
776
|
+
"type": "string"
|
|
777
|
+
},
|
|
778
|
+
"role": {
|
|
779
|
+
"type": "string"
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
},
|
|
784
|
+
"metrics": {
|
|
785
|
+
"type": "array",
|
|
786
|
+
"items": {
|
|
787
|
+
"type": "object",
|
|
788
|
+
"required": [
|
|
789
|
+
"field"
|
|
790
|
+
],
|
|
791
|
+
"properties": {
|
|
792
|
+
"field": {
|
|
793
|
+
"type": "string"
|
|
794
|
+
},
|
|
795
|
+
"label": {
|
|
796
|
+
"oneOf": [
|
|
797
|
+
{
|
|
798
|
+
"type": "string"
|
|
799
|
+
},
|
|
800
|
+
{
|
|
801
|
+
"type": "object"
|
|
802
|
+
}
|
|
803
|
+
]
|
|
804
|
+
},
|
|
805
|
+
"aggregation": {
|
|
806
|
+
"enum": [
|
|
807
|
+
"sum",
|
|
808
|
+
"avg",
|
|
809
|
+
"min",
|
|
810
|
+
"max",
|
|
811
|
+
"count",
|
|
812
|
+
"distinct-count"
|
|
813
|
+
]
|
|
814
|
+
},
|
|
815
|
+
"seriesKind": {
|
|
816
|
+
"enum": [
|
|
817
|
+
"bar",
|
|
818
|
+
"line",
|
|
819
|
+
"area"
|
|
820
|
+
]
|
|
821
|
+
},
|
|
822
|
+
"axis": {
|
|
823
|
+
"enum": [
|
|
824
|
+
"primary",
|
|
825
|
+
"secondary"
|
|
826
|
+
]
|
|
827
|
+
},
|
|
828
|
+
"color": {
|
|
829
|
+
"type": "string"
|
|
830
|
+
},
|
|
831
|
+
"format": {
|
|
832
|
+
"type": "string"
|
|
833
|
+
},
|
|
834
|
+
"afterField": {
|
|
835
|
+
"type": "string"
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
},
|
|
842
|
+
"effects": [
|
|
843
|
+
{
|
|
844
|
+
"kind": "compile-domain-patch",
|
|
845
|
+
"handler": "chart-data-resource-bind",
|
|
846
|
+
"handlerContract": {
|
|
847
|
+
"reads": [
|
|
848
|
+
"availableResources[]",
|
|
849
|
+
"availableFields[]",
|
|
850
|
+
"chartDocument.source",
|
|
851
|
+
"chartDocument.dimensions[]",
|
|
852
|
+
"chartDocument.metrics[]"
|
|
853
|
+
],
|
|
854
|
+
"writes": [
|
|
855
|
+
"chartDocument.source",
|
|
856
|
+
"chartDocument.dimensions[]",
|
|
857
|
+
"chartDocument.metrics[]"
|
|
858
|
+
],
|
|
859
|
+
"identityKeys": [
|
|
860
|
+
"availableResources[].path",
|
|
861
|
+
"availableResources[].id",
|
|
862
|
+
"availableFields[].field"
|
|
863
|
+
],
|
|
864
|
+
"inputSchema": {
|
|
865
|
+
"type": "object",
|
|
866
|
+
"required": [
|
|
867
|
+
"sourceKind"
|
|
868
|
+
],
|
|
869
|
+
"properties": {
|
|
870
|
+
"sourceKind": {
|
|
871
|
+
"enum": [
|
|
872
|
+
"praxis.stats",
|
|
873
|
+
"derived"
|
|
874
|
+
]
|
|
875
|
+
},
|
|
876
|
+
"resource": {
|
|
877
|
+
"type": "string"
|
|
878
|
+
},
|
|
879
|
+
"operation": {
|
|
880
|
+
"enum": [
|
|
881
|
+
"group-by",
|
|
882
|
+
"timeseries",
|
|
883
|
+
"distribution"
|
|
884
|
+
]
|
|
885
|
+
},
|
|
886
|
+
"dimensions": {
|
|
887
|
+
"type": "array"
|
|
888
|
+
},
|
|
889
|
+
"metrics": {
|
|
890
|
+
"type": "array"
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
},
|
|
894
|
+
"failureModes": [
|
|
895
|
+
"resource-not-in-api-metadata",
|
|
896
|
+
"field-not-in-schema",
|
|
897
|
+
"stats-operation-not-supported",
|
|
898
|
+
"remote-binding-incomplete"
|
|
899
|
+
],
|
|
900
|
+
"description": "Binds a derived or praxis.stats source using the governed resource and field catalogs instead of free-form prompt examples."
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
],
|
|
904
|
+
"destructive": false,
|
|
905
|
+
"requiresConfirmation": false,
|
|
906
|
+
"validators": [
|
|
907
|
+
"remote-resource-in-api-metadata",
|
|
908
|
+
"bound-fields-exist",
|
|
909
|
+
"stats-operation-supported",
|
|
910
|
+
"editor-runtime-round-trip"
|
|
911
|
+
],
|
|
912
|
+
"affectedPaths": [
|
|
913
|
+
"chartDocument.source",
|
|
914
|
+
"chartDocument.dimensions[]",
|
|
915
|
+
"chartDocument.metrics[]"
|
|
916
|
+
],
|
|
917
|
+
"submissionImpact": "affects-remote-binding",
|
|
918
|
+
"preconditions": [
|
|
919
|
+
"config-initialized"
|
|
920
|
+
]
|
|
921
|
+
},
|
|
922
|
+
{
|
|
923
|
+
"operationId": "queryContext.set",
|
|
924
|
+
"title": "Set chart query context",
|
|
925
|
+
"scope": "dataBinding",
|
|
926
|
+
"targetKind": "queryContext",
|
|
927
|
+
"target": {
|
|
928
|
+
"kind": "queryContext",
|
|
929
|
+
"resolver": "praxis-chart-query-context",
|
|
930
|
+
"ambiguityPolicy": "fail",
|
|
931
|
+
"required": false
|
|
932
|
+
},
|
|
933
|
+
"inputSchema": {
|
|
934
|
+
"type": "object",
|
|
935
|
+
"properties": {
|
|
936
|
+
"filters": {
|
|
937
|
+
"type": "object"
|
|
938
|
+
},
|
|
939
|
+
"sort": {
|
|
940
|
+
"type": "array",
|
|
941
|
+
"items": {
|
|
942
|
+
"type": "string"
|
|
943
|
+
}
|
|
944
|
+
},
|
|
945
|
+
"limit": {
|
|
946
|
+
"type": "number"
|
|
947
|
+
},
|
|
948
|
+
"page": {
|
|
949
|
+
"type": "object"
|
|
950
|
+
},
|
|
951
|
+
"meta": {
|
|
952
|
+
"type": "object"
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
},
|
|
956
|
+
"effects": [
|
|
957
|
+
{
|
|
958
|
+
"kind": "set-value",
|
|
959
|
+
"path": "queryContext"
|
|
960
|
+
}
|
|
961
|
+
],
|
|
962
|
+
"destructive": false,
|
|
963
|
+
"requiresConfirmation": false,
|
|
964
|
+
"validators": [
|
|
965
|
+
"query-context-structured",
|
|
966
|
+
"query-context-fields-exist",
|
|
967
|
+
"query-context-safe-values",
|
|
968
|
+
"editor-runtime-round-trip"
|
|
969
|
+
],
|
|
970
|
+
"affectedPaths": [
|
|
971
|
+
"queryContext"
|
|
972
|
+
],
|
|
973
|
+
"submissionImpact": "affects-schema-backed-data",
|
|
974
|
+
"preconditions": [
|
|
975
|
+
"config-initialized"
|
|
976
|
+
]
|
|
977
|
+
},
|
|
978
|
+
{
|
|
979
|
+
"operationId": "crossFilter.configure",
|
|
980
|
+
"title": "Configure chart cross-filter",
|
|
981
|
+
"scope": "eventMapping",
|
|
982
|
+
"targetKind": "crossFilter",
|
|
983
|
+
"target": {
|
|
984
|
+
"kind": "crossFilter",
|
|
985
|
+
"resolver": "x-ui-chart-events-cross-filter",
|
|
986
|
+
"ambiguityPolicy": "fail",
|
|
987
|
+
"required": false
|
|
988
|
+
},
|
|
989
|
+
"inputSchema": {
|
|
990
|
+
"type": "object",
|
|
991
|
+
"required": [
|
|
992
|
+
"event",
|
|
993
|
+
"action"
|
|
994
|
+
],
|
|
995
|
+
"properties": {
|
|
996
|
+
"event": {
|
|
997
|
+
"enum": [
|
|
998
|
+
"pointClick",
|
|
999
|
+
"selectionChange",
|
|
1000
|
+
"drillDown",
|
|
1001
|
+
"crossFilter"
|
|
1002
|
+
]
|
|
1003
|
+
},
|
|
1004
|
+
"action": {
|
|
1005
|
+
"enum": [
|
|
1006
|
+
"filter-widget",
|
|
1007
|
+
"open-detail",
|
|
1008
|
+
"navigate",
|
|
1009
|
+
"update-context",
|
|
1010
|
+
"emit"
|
|
1011
|
+
]
|
|
1012
|
+
},
|
|
1013
|
+
"target": {
|
|
1014
|
+
"type": "string"
|
|
1015
|
+
},
|
|
1016
|
+
"mapping": {
|
|
1017
|
+
"type": "object",
|
|
1018
|
+
"additionalProperties": {
|
|
1019
|
+
"type": "string"
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
},
|
|
1024
|
+
"effects": [
|
|
1025
|
+
{
|
|
1026
|
+
"kind": "compile-domain-patch",
|
|
1027
|
+
"handler": "chart-event-cross-filter-configure",
|
|
1028
|
+
"handlerContract": {
|
|
1029
|
+
"reads": [
|
|
1030
|
+
"chartDocument.events.crossFilter",
|
|
1031
|
+
"chartDocument.dimensions[]",
|
|
1032
|
+
"availableTargets[]"
|
|
1033
|
+
],
|
|
1034
|
+
"writes": [
|
|
1035
|
+
"chartDocument.events.crossFilter"
|
|
1036
|
+
],
|
|
1037
|
+
"identityKeys": [
|
|
1038
|
+
"availableTargets[].id"
|
|
1039
|
+
],
|
|
1040
|
+
"inputSchema": {
|
|
1041
|
+
"type": "object",
|
|
1042
|
+
"required": [
|
|
1043
|
+
"event",
|
|
1044
|
+
"action"
|
|
1045
|
+
],
|
|
1046
|
+
"properties": {
|
|
1047
|
+
"event": {
|
|
1048
|
+
"enum": [
|
|
1049
|
+
"pointClick",
|
|
1050
|
+
"selectionChange",
|
|
1051
|
+
"drillDown",
|
|
1052
|
+
"crossFilter"
|
|
1053
|
+
]
|
|
1054
|
+
},
|
|
1055
|
+
"action": {
|
|
1056
|
+
"enum": [
|
|
1057
|
+
"filter-widget",
|
|
1058
|
+
"open-detail",
|
|
1059
|
+
"navigate",
|
|
1060
|
+
"update-context",
|
|
1061
|
+
"emit"
|
|
1062
|
+
]
|
|
1063
|
+
},
|
|
1064
|
+
"target": {
|
|
1065
|
+
"type": "string"
|
|
1066
|
+
},
|
|
1067
|
+
"mapping": {
|
|
1068
|
+
"type": "object",
|
|
1069
|
+
"additionalProperties": {
|
|
1070
|
+
"type": "string"
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
},
|
|
1075
|
+
"failureModes": [
|
|
1076
|
+
"target-not-in-catalog",
|
|
1077
|
+
"mapping-source-field-missing",
|
|
1078
|
+
"mapping-target-invalid",
|
|
1079
|
+
"unsafe-event-action"
|
|
1080
|
+
],
|
|
1081
|
+
"description": "Configures crossFilter as a structured event action that emits safe query-context filters to a governed target."
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
],
|
|
1085
|
+
"destructive": false,
|
|
1086
|
+
"requiresConfirmation": false,
|
|
1087
|
+
"validators": [
|
|
1088
|
+
"cross-filter-output-structured",
|
|
1089
|
+
"event-target-governed",
|
|
1090
|
+
"event-mapping-fields-exist",
|
|
1091
|
+
"editor-runtime-round-trip"
|
|
1092
|
+
],
|
|
1093
|
+
"affectedPaths": [
|
|
1094
|
+
"chartDocument.events.crossFilter"
|
|
1095
|
+
],
|
|
1096
|
+
"submissionImpact": "affects-schema-backed-data",
|
|
1097
|
+
"preconditions": [
|
|
1098
|
+
"config-initialized"
|
|
1099
|
+
]
|
|
1100
|
+
},
|
|
1101
|
+
{
|
|
1102
|
+
"operationId": "drilldown.configure",
|
|
1103
|
+
"title": "Configure chart drilldown",
|
|
1104
|
+
"scope": "eventMapping",
|
|
1105
|
+
"targetKind": "drilldown",
|
|
1106
|
+
"target": {
|
|
1107
|
+
"kind": "drilldown",
|
|
1108
|
+
"resolver": "x-ui-chart-events-drill-down",
|
|
1109
|
+
"ambiguityPolicy": "fail",
|
|
1110
|
+
"required": false
|
|
1111
|
+
},
|
|
1112
|
+
"inputSchema": {
|
|
1113
|
+
"type": "object",
|
|
1114
|
+
"required": [
|
|
1115
|
+
"event",
|
|
1116
|
+
"action"
|
|
1117
|
+
],
|
|
1118
|
+
"properties": {
|
|
1119
|
+
"event": {
|
|
1120
|
+
"enum": [
|
|
1121
|
+
"pointClick",
|
|
1122
|
+
"selectionChange",
|
|
1123
|
+
"drillDown",
|
|
1124
|
+
"crossFilter"
|
|
1125
|
+
]
|
|
1126
|
+
},
|
|
1127
|
+
"action": {
|
|
1128
|
+
"enum": [
|
|
1129
|
+
"filter-widget",
|
|
1130
|
+
"open-detail",
|
|
1131
|
+
"navigate",
|
|
1132
|
+
"update-context",
|
|
1133
|
+
"emit"
|
|
1134
|
+
]
|
|
1135
|
+
},
|
|
1136
|
+
"target": {
|
|
1137
|
+
"type": "string"
|
|
1138
|
+
},
|
|
1139
|
+
"mapping": {
|
|
1140
|
+
"type": "object",
|
|
1141
|
+
"additionalProperties": {
|
|
1142
|
+
"type": "string"
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
},
|
|
1147
|
+
"effects": [
|
|
1148
|
+
{
|
|
1149
|
+
"kind": "compile-domain-patch",
|
|
1150
|
+
"handler": "chart-event-drilldown-configure",
|
|
1151
|
+
"handlerContract": {
|
|
1152
|
+
"reads": [
|
|
1153
|
+
"chartDocument.events.drillDown",
|
|
1154
|
+
"chartDocument.dimensions[]",
|
|
1155
|
+
"availableTargets[]"
|
|
1156
|
+
],
|
|
1157
|
+
"writes": [
|
|
1158
|
+
"chartDocument.events.drillDown"
|
|
1159
|
+
],
|
|
1160
|
+
"identityKeys": [
|
|
1161
|
+
"availableTargets[].id"
|
|
1162
|
+
],
|
|
1163
|
+
"inputSchema": {
|
|
1164
|
+
"type": "object",
|
|
1165
|
+
"required": [
|
|
1166
|
+
"event",
|
|
1167
|
+
"action"
|
|
1168
|
+
],
|
|
1169
|
+
"properties": {
|
|
1170
|
+
"event": {
|
|
1171
|
+
"enum": [
|
|
1172
|
+
"pointClick",
|
|
1173
|
+
"selectionChange",
|
|
1174
|
+
"drillDown",
|
|
1175
|
+
"crossFilter"
|
|
1176
|
+
]
|
|
1177
|
+
},
|
|
1178
|
+
"action": {
|
|
1179
|
+
"enum": [
|
|
1180
|
+
"filter-widget",
|
|
1181
|
+
"open-detail",
|
|
1182
|
+
"navigate",
|
|
1183
|
+
"update-context",
|
|
1184
|
+
"emit"
|
|
1185
|
+
]
|
|
1186
|
+
},
|
|
1187
|
+
"target": {
|
|
1188
|
+
"type": "string"
|
|
1189
|
+
},
|
|
1190
|
+
"mapping": {
|
|
1191
|
+
"type": "object",
|
|
1192
|
+
"additionalProperties": {
|
|
1193
|
+
"type": "string"
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
},
|
|
1198
|
+
"failureModes": [
|
|
1199
|
+
"target-not-in-catalog",
|
|
1200
|
+
"mapping-source-field-missing",
|
|
1201
|
+
"drilldown-target-invalid",
|
|
1202
|
+
"unsafe-event-action"
|
|
1203
|
+
],
|
|
1204
|
+
"description": "Configures drillDown through governed route/widget targets and structured field mappings."
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
],
|
|
1208
|
+
"destructive": false,
|
|
1209
|
+
"requiresConfirmation": false,
|
|
1210
|
+
"validators": [
|
|
1211
|
+
"drilldown-target-governed",
|
|
1212
|
+
"event-mapping-fields-exist",
|
|
1213
|
+
"event-action-supported",
|
|
1214
|
+
"editor-runtime-round-trip"
|
|
1215
|
+
],
|
|
1216
|
+
"affectedPaths": [
|
|
1217
|
+
"chartDocument.events.drillDown"
|
|
1218
|
+
],
|
|
1219
|
+
"submissionImpact": "config-only",
|
|
1220
|
+
"preconditions": [
|
|
1221
|
+
"config-initialized"
|
|
1222
|
+
]
|
|
1223
|
+
},
|
|
1224
|
+
{
|
|
1225
|
+
"operationId": "selection.configure",
|
|
1226
|
+
"title": "Configure chart selection",
|
|
1227
|
+
"scope": "selection",
|
|
1228
|
+
"targetKind": "selection",
|
|
1229
|
+
"target": {
|
|
1230
|
+
"kind": "selection",
|
|
1231
|
+
"resolver": "x-ui-chart-events-selection-change",
|
|
1232
|
+
"ambiguityPolicy": "fail",
|
|
1233
|
+
"required": false
|
|
1234
|
+
},
|
|
1235
|
+
"inputSchema": {
|
|
1236
|
+
"type": "object",
|
|
1237
|
+
"required": [
|
|
1238
|
+
"event",
|
|
1239
|
+
"action"
|
|
1240
|
+
],
|
|
1241
|
+
"properties": {
|
|
1242
|
+
"event": {
|
|
1243
|
+
"enum": [
|
|
1244
|
+
"pointClick",
|
|
1245
|
+
"selectionChange",
|
|
1246
|
+
"drillDown",
|
|
1247
|
+
"crossFilter"
|
|
1248
|
+
]
|
|
1249
|
+
},
|
|
1250
|
+
"action": {
|
|
1251
|
+
"enum": [
|
|
1252
|
+
"filter-widget",
|
|
1253
|
+
"open-detail",
|
|
1254
|
+
"navigate",
|
|
1255
|
+
"update-context",
|
|
1256
|
+
"emit"
|
|
1257
|
+
]
|
|
1258
|
+
},
|
|
1259
|
+
"target": {
|
|
1260
|
+
"type": "string"
|
|
1261
|
+
},
|
|
1262
|
+
"mapping": {
|
|
1263
|
+
"type": "object",
|
|
1264
|
+
"additionalProperties": {
|
|
1265
|
+
"type": "string"
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
},
|
|
1270
|
+
"effects": [
|
|
1271
|
+
{
|
|
1272
|
+
"kind": "merge-object",
|
|
1273
|
+
"path": "chartDocument.events.selectionChange"
|
|
1274
|
+
}
|
|
1275
|
+
],
|
|
1276
|
+
"destructive": false,
|
|
1277
|
+
"requiresConfirmation": false,
|
|
1278
|
+
"validators": [
|
|
1279
|
+
"selection-output-structured",
|
|
1280
|
+
"event-mapping-fields-exist",
|
|
1281
|
+
"event-action-supported",
|
|
1282
|
+
"editor-runtime-round-trip"
|
|
1283
|
+
],
|
|
1284
|
+
"affectedPaths": [
|
|
1285
|
+
"chartDocument.events.selectionChange"
|
|
1286
|
+
],
|
|
1287
|
+
"submissionImpact": "affects-schema-backed-data",
|
|
1288
|
+
"preconditions": [
|
|
1289
|
+
"config-initialized"
|
|
1290
|
+
]
|
|
1291
|
+
},
|
|
1292
|
+
{
|
|
1293
|
+
"operationId": "legend.configure",
|
|
1294
|
+
"title": "Configure chart legend",
|
|
1295
|
+
"scope": "skin",
|
|
1296
|
+
"targetKind": "legend",
|
|
1297
|
+
"target": {
|
|
1298
|
+
"kind": "legend",
|
|
1299
|
+
"resolver": "x-ui-chart-legend-feature",
|
|
1300
|
+
"ambiguityPolicy": "fail",
|
|
1301
|
+
"required": false
|
|
1302
|
+
},
|
|
1303
|
+
"inputSchema": {
|
|
1304
|
+
"type": "object",
|
|
1305
|
+
"required": [
|
|
1306
|
+
"enabled"
|
|
1307
|
+
],
|
|
1308
|
+
"properties": {
|
|
1309
|
+
"enabled": {
|
|
1310
|
+
"type": "boolean"
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
},
|
|
1314
|
+
"effects": [
|
|
1315
|
+
{
|
|
1316
|
+
"kind": "set-value",
|
|
1317
|
+
"path": "chartDocument.legend"
|
|
1318
|
+
}
|
|
1319
|
+
],
|
|
1320
|
+
"destructive": false,
|
|
1321
|
+
"requiresConfirmation": false,
|
|
1322
|
+
"validators": [
|
|
1323
|
+
"feature-toggle-valid",
|
|
1324
|
+
"editor-runtime-round-trip"
|
|
1325
|
+
],
|
|
1326
|
+
"affectedPaths": [
|
|
1327
|
+
"chartDocument.legend"
|
|
1328
|
+
],
|
|
1329
|
+
"submissionImpact": "visual-only",
|
|
1330
|
+
"preconditions": [
|
|
1331
|
+
"config-initialized"
|
|
1332
|
+
]
|
|
1333
|
+
},
|
|
1334
|
+
{
|
|
1335
|
+
"operationId": "tooltip.configure",
|
|
1336
|
+
"title": "Configure chart tooltip",
|
|
1337
|
+
"scope": "skin",
|
|
1338
|
+
"targetKind": "tooltip",
|
|
1339
|
+
"target": {
|
|
1340
|
+
"kind": "tooltip",
|
|
1341
|
+
"resolver": "x-ui-chart-tooltip-feature",
|
|
1342
|
+
"ambiguityPolicy": "fail",
|
|
1343
|
+
"required": false
|
|
1344
|
+
},
|
|
1345
|
+
"inputSchema": {
|
|
1346
|
+
"type": "object",
|
|
1347
|
+
"required": [
|
|
1348
|
+
"enabled"
|
|
1349
|
+
],
|
|
1350
|
+
"properties": {
|
|
1351
|
+
"enabled": {
|
|
1352
|
+
"type": "boolean"
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
},
|
|
1356
|
+
"effects": [
|
|
1357
|
+
{
|
|
1358
|
+
"kind": "set-value",
|
|
1359
|
+
"path": "chartDocument.tooltip"
|
|
1360
|
+
}
|
|
1361
|
+
],
|
|
1362
|
+
"destructive": false,
|
|
1363
|
+
"requiresConfirmation": false,
|
|
1364
|
+
"validators": [
|
|
1365
|
+
"feature-toggle-valid",
|
|
1366
|
+
"editor-runtime-round-trip"
|
|
1367
|
+
],
|
|
1368
|
+
"affectedPaths": [
|
|
1369
|
+
"chartDocument.tooltip"
|
|
1370
|
+
],
|
|
1371
|
+
"submissionImpact": "visual-only",
|
|
1372
|
+
"preconditions": [
|
|
1373
|
+
"config-initialized"
|
|
1374
|
+
]
|
|
1375
|
+
}
|
|
1376
|
+
],
|
|
1377
|
+
"validators": [
|
|
1378
|
+
{
|
|
1379
|
+
"validatorId": "chart-document-shape",
|
|
1380
|
+
"level": "error",
|
|
1381
|
+
"code": "CHART_DOCUMENT_SHAPE",
|
|
1382
|
+
"description": "Document must conform to PraxisXUiChartContract."
|
|
1383
|
+
},
|
|
1384
|
+
{
|
|
1385
|
+
"validatorId": "chart-version-supported",
|
|
1386
|
+
"level": "error",
|
|
1387
|
+
"code": "CHART_VERSION_SUPPORTED",
|
|
1388
|
+
"description": "Only x-ui.chart version 0.1.0 is authorable."
|
|
1389
|
+
},
|
|
1390
|
+
{
|
|
1391
|
+
"validatorId": "chart-type-supported",
|
|
1392
|
+
"level": "error",
|
|
1393
|
+
"code": "CHART_TYPE_SUPPORTED",
|
|
1394
|
+
"description": "Chart kind must be supported by @praxisui/charts."
|
|
1395
|
+
},
|
|
1396
|
+
{
|
|
1397
|
+
"validatorId": "chart-type-series-axis-compatible",
|
|
1398
|
+
"level": "error",
|
|
1399
|
+
"code": "CHART_TYPE_SERIES_AXIS_COMPATIBLE",
|
|
1400
|
+
"description": "Chart kind, dimensions, metrics and axes must be compatible."
|
|
1401
|
+
},
|
|
1402
|
+
{
|
|
1403
|
+
"validatorId": "pie-single-metric",
|
|
1404
|
+
"level": "error",
|
|
1405
|
+
"code": "PIE_SINGLE_METRIC",
|
|
1406
|
+
"description": "Pie and donut charts support a single metric."
|
|
1407
|
+
},
|
|
1408
|
+
{
|
|
1409
|
+
"validatorId": "combo-minimum-series",
|
|
1410
|
+
"level": "error",
|
|
1411
|
+
"code": "COMBO_MINIMUM_SERIES",
|
|
1412
|
+
"description": "Combo charts require at least two metrics."
|
|
1413
|
+
},
|
|
1414
|
+
{
|
|
1415
|
+
"validatorId": "series-field-exists",
|
|
1416
|
+
"level": "error",
|
|
1417
|
+
"code": "SERIES_FIELD_EXISTS",
|
|
1418
|
+
"description": "Series field must exist in availableFields or schema context."
|
|
1419
|
+
},
|
|
1420
|
+
{
|
|
1421
|
+
"validatorId": "series-field-aggregable",
|
|
1422
|
+
"level": "error",
|
|
1423
|
+
"code": "SERIES_FIELD_AGGREGABLE",
|
|
1424
|
+
"description": "Metric fields must support the requested aggregation."
|
|
1425
|
+
},
|
|
1426
|
+
{
|
|
1427
|
+
"validatorId": "series-id-unique",
|
|
1428
|
+
"level": "error",
|
|
1429
|
+
"code": "SERIES_ID_UNIQUE",
|
|
1430
|
+
"description": "Metric/series identity must be stable and unique by field."
|
|
1431
|
+
},
|
|
1432
|
+
{
|
|
1433
|
+
"validatorId": "series-exists",
|
|
1434
|
+
"level": "error",
|
|
1435
|
+
"code": "SERIES_EXISTS",
|
|
1436
|
+
"description": "Series removal target must exist."
|
|
1437
|
+
},
|
|
1438
|
+
{
|
|
1439
|
+
"validatorId": "destructive-series-removal-confirmed",
|
|
1440
|
+
"level": "error",
|
|
1441
|
+
"code": "DESTRUCTIVE_SERIES_REMOVAL_CONFIRMED",
|
|
1442
|
+
"description": "Removing a series requires explicit confirmation."
|
|
1443
|
+
},
|
|
1444
|
+
{
|
|
1445
|
+
"validatorId": "chart-keeps-required-metric",
|
|
1446
|
+
"level": "error",
|
|
1447
|
+
"code": "CHART_KEEPS_REQUIRED_METRIC",
|
|
1448
|
+
"description": "A chart cannot be left without required metrics."
|
|
1449
|
+
},
|
|
1450
|
+
{
|
|
1451
|
+
"validatorId": "axis-field-exists",
|
|
1452
|
+
"level": "error",
|
|
1453
|
+
"code": "AXIS_FIELD_EXISTS",
|
|
1454
|
+
"description": "Axis/dimension fields must exist in availableFields or schema context."
|
|
1455
|
+
},
|
|
1456
|
+
{
|
|
1457
|
+
"validatorId": "secondary-axis-combo-only",
|
|
1458
|
+
"level": "error",
|
|
1459
|
+
"code": "SECONDARY_AXIS_COMBO_ONLY",
|
|
1460
|
+
"description": "Secondary axis is supported only for combo charts."
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
"validatorId": "cartesian-dimension-required",
|
|
1464
|
+
"level": "error",
|
|
1465
|
+
"code": "CARTESIAN_DIMENSION_REQUIRED",
|
|
1466
|
+
"description": "Cartesian charts require at least one dimension."
|
|
1467
|
+
},
|
|
1468
|
+
{
|
|
1469
|
+
"validatorId": "remote-resource-in-api-metadata",
|
|
1470
|
+
"level": "error",
|
|
1471
|
+
"code": "REMOTE_RESOURCE_IN_API_METADATA",
|
|
1472
|
+
"description": "Remote praxis.stats resource must come from the governed API metadata/resource catalog."
|
|
1473
|
+
},
|
|
1474
|
+
{
|
|
1475
|
+
"validatorId": "bound-fields-exist",
|
|
1476
|
+
"level": "error",
|
|
1477
|
+
"code": "BOUND_FIELDS_EXIST",
|
|
1478
|
+
"description": "Bound dimensions and metrics must exist in the schema/data context."
|
|
1479
|
+
},
|
|
1480
|
+
{
|
|
1481
|
+
"validatorId": "stats-operation-supported",
|
|
1482
|
+
"level": "error",
|
|
1483
|
+
"code": "STATS_OPERATION_SUPPORTED",
|
|
1484
|
+
"description": "Remote datasource operation must be supported by the stats backend."
|
|
1485
|
+
},
|
|
1486
|
+
{
|
|
1487
|
+
"validatorId": "query-context-structured",
|
|
1488
|
+
"level": "error",
|
|
1489
|
+
"code": "QUERY_CONTEXT_STRUCTURED",
|
|
1490
|
+
"description": "queryContext must use structured filters, sort, limit and page fields."
|
|
1491
|
+
},
|
|
1492
|
+
{
|
|
1493
|
+
"validatorId": "query-context-fields-exist",
|
|
1494
|
+
"level": "warning",
|
|
1495
|
+
"code": "QUERY_CONTEXT_FIELDS_EXIST",
|
|
1496
|
+
"description": "queryContext filter fields should exist in the schema/data context."
|
|
1497
|
+
},
|
|
1498
|
+
{
|
|
1499
|
+
"validatorId": "query-context-safe-values",
|
|
1500
|
+
"level": "error",
|
|
1501
|
+
"code": "QUERY_CONTEXT_SAFE_VALUES",
|
|
1502
|
+
"description": "queryContext values must be serializable safe data."
|
|
1503
|
+
},
|
|
1504
|
+
{
|
|
1505
|
+
"validatorId": "cross-filter-output-structured",
|
|
1506
|
+
"level": "error",
|
|
1507
|
+
"code": "CROSS_FILTER_OUTPUT_STRUCTURED",
|
|
1508
|
+
"description": "Cross-filter output must be structured as query-context filters."
|
|
1509
|
+
},
|
|
1510
|
+
{
|
|
1511
|
+
"validatorId": "event-target-governed",
|
|
1512
|
+
"level": "error",
|
|
1513
|
+
"code": "EVENT_TARGET_GOVERNED",
|
|
1514
|
+
"description": "Event targets must be selected from availableTargets or an approved host catalog."
|
|
1515
|
+
},
|
|
1516
|
+
{
|
|
1517
|
+
"validatorId": "event-mapping-fields-exist",
|
|
1518
|
+
"level": "error",
|
|
1519
|
+
"code": "EVENT_MAPPING_FIELDS_EXIST",
|
|
1520
|
+
"description": "Event mapping source fields must exist in chart data context."
|
|
1521
|
+
},
|
|
1522
|
+
{
|
|
1523
|
+
"validatorId": "event-action-supported",
|
|
1524
|
+
"level": "error",
|
|
1525
|
+
"code": "EVENT_ACTION_SUPPORTED",
|
|
1526
|
+
"description": "Event action must be one of the supported structured action kinds."
|
|
1527
|
+
},
|
|
1528
|
+
{
|
|
1529
|
+
"validatorId": "drilldown-target-governed",
|
|
1530
|
+
"level": "error",
|
|
1531
|
+
"code": "DRILLDOWN_TARGET_GOVERNED",
|
|
1532
|
+
"description": "Drilldown target must be a governed route or widget target."
|
|
1533
|
+
},
|
|
1534
|
+
{
|
|
1535
|
+
"validatorId": "selection-output-structured",
|
|
1536
|
+
"level": "error",
|
|
1537
|
+
"code": "SELECTION_OUTPUT_STRUCTURED",
|
|
1538
|
+
"description": "Selection output must resolve selected point filters deterministically."
|
|
1539
|
+
},
|
|
1540
|
+
{
|
|
1541
|
+
"validatorId": "feature-toggle-valid",
|
|
1542
|
+
"level": "error",
|
|
1543
|
+
"code": "FEATURE_TOGGLE_VALID",
|
|
1544
|
+
"description": "Legend and tooltip feature values must be boolean or toggleable feature objects."
|
|
1545
|
+
},
|
|
1546
|
+
{
|
|
1547
|
+
"validatorId": "editor-runtime-round-trip",
|
|
1548
|
+
"level": "error",
|
|
1549
|
+
"code": "EDITOR_RUNTIME_ROUND_TRIP",
|
|
1550
|
+
"description": "PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes."
|
|
1551
|
+
}
|
|
1552
|
+
],
|
|
1553
|
+
"roundTripRequirements": [
|
|
1554
|
+
"The canonical saved shape is PraxisXUiChartContract, not raw ECharts options.",
|
|
1555
|
+
"PraxisChartConfigEditor must preserve chart kind, source, dimensions, metrics, events, legend and tooltip across apply/save/reset/reopen.",
|
|
1556
|
+
"Remote bindings must be resolved from availableResources/API metadata and availableFields/schema context.",
|
|
1557
|
+
"Cross-filter, drilldown and selection authoring must persist structured event actions, not prompt examples or command strings."
|
|
1558
|
+
],
|
|
1559
|
+
"examples": [
|
|
1560
|
+
{
|
|
1561
|
+
"id": "set-bar-chart",
|
|
1562
|
+
"request": "Use a bar chart for employees by department.",
|
|
1563
|
+
"operationId": "chart.type.set",
|
|
1564
|
+
"params": {
|
|
1565
|
+
"kind": "bar"
|
|
1566
|
+
},
|
|
1567
|
+
"isPositive": true
|
|
1568
|
+
},
|
|
1569
|
+
{
|
|
1570
|
+
"id": "add-salary-series",
|
|
1571
|
+
"request": "Add salary as a summed metric.",
|
|
1572
|
+
"operationId": "series.add",
|
|
1573
|
+
"params": {
|
|
1574
|
+
"field": "salary",
|
|
1575
|
+
"aggregation": "sum",
|
|
1576
|
+
"label": "Salary"
|
|
1577
|
+
},
|
|
1578
|
+
"isPositive": true
|
|
1579
|
+
},
|
|
1580
|
+
{
|
|
1581
|
+
"id": "remove-old-series",
|
|
1582
|
+
"request": "Remove the old cost series.",
|
|
1583
|
+
"operationId": "series.remove",
|
|
1584
|
+
"target": "cost",
|
|
1585
|
+
"params": {
|
|
1586
|
+
"field": "cost"
|
|
1587
|
+
},
|
|
1588
|
+
"isPositive": true
|
|
1589
|
+
},
|
|
1590
|
+
{
|
|
1591
|
+
"id": "configure-secondary-axis",
|
|
1592
|
+
"request": "Put margin on a secondary axis for the combo chart.",
|
|
1593
|
+
"operationId": "axis.configure",
|
|
1594
|
+
"params": {
|
|
1595
|
+
"metricField": "margin",
|
|
1596
|
+
"metricAxis": "secondary"
|
|
1597
|
+
},
|
|
1598
|
+
"isPositive": true
|
|
1599
|
+
},
|
|
1600
|
+
{
|
|
1601
|
+
"id": "bind-stats-resource",
|
|
1602
|
+
"request": "Bind this chart to payroll stats grouped by department.",
|
|
1603
|
+
"operationId": "data.resource.bind",
|
|
1604
|
+
"params": {
|
|
1605
|
+
"sourceKind": "praxis.stats",
|
|
1606
|
+
"resource": "/api/stats/payroll",
|
|
1607
|
+
"operation": "group-by"
|
|
1608
|
+
},
|
|
1609
|
+
"isPositive": true
|
|
1610
|
+
},
|
|
1611
|
+
{
|
|
1612
|
+
"id": "set-query-context",
|
|
1613
|
+
"request": "Limit the chart to active employees and sort by total descending.",
|
|
1614
|
+
"operationId": "queryContext.set",
|
|
1615
|
+
"params": {
|
|
1616
|
+
"filters": {
|
|
1617
|
+
"status": "ACTIVE"
|
|
1618
|
+
},
|
|
1619
|
+
"sort": [
|
|
1620
|
+
"total,desc"
|
|
1621
|
+
],
|
|
1622
|
+
"limit": 10
|
|
1623
|
+
},
|
|
1624
|
+
"isPositive": true
|
|
1625
|
+
},
|
|
1626
|
+
{
|
|
1627
|
+
"id": "configure-cross-filter",
|
|
1628
|
+
"request": "Use selected department to filter the employee table.",
|
|
1629
|
+
"operationId": "crossFilter.configure",
|
|
1630
|
+
"params": {
|
|
1631
|
+
"event": "crossFilter",
|
|
1632
|
+
"action": "filter-widget",
|
|
1633
|
+
"target": "employeesTable",
|
|
1634
|
+
"mapping": {
|
|
1635
|
+
"department": "department"
|
|
1636
|
+
}
|
|
1637
|
+
},
|
|
1638
|
+
"isPositive": true
|
|
1639
|
+
},
|
|
1640
|
+
{
|
|
1641
|
+
"id": "configure-drilldown",
|
|
1642
|
+
"request": "Open the department detail when a point is clicked.",
|
|
1643
|
+
"operationId": "drilldown.configure",
|
|
1644
|
+
"params": {
|
|
1645
|
+
"event": "drillDown",
|
|
1646
|
+
"action": "navigate",
|
|
1647
|
+
"target": "/departments/detail",
|
|
1648
|
+
"mapping": {
|
|
1649
|
+
"department": "departmentId"
|
|
1650
|
+
}
|
|
1651
|
+
},
|
|
1652
|
+
"isPositive": true
|
|
1653
|
+
},
|
|
1654
|
+
{
|
|
1655
|
+
"id": "configure-selection",
|
|
1656
|
+
"request": "Emit selected department as a structured selection event.",
|
|
1657
|
+
"operationId": "selection.configure",
|
|
1658
|
+
"params": {
|
|
1659
|
+
"event": "selectionChange",
|
|
1660
|
+
"action": "emit",
|
|
1661
|
+
"mapping": {
|
|
1662
|
+
"department": "department"
|
|
1663
|
+
}
|
|
1664
|
+
},
|
|
1665
|
+
"isPositive": true
|
|
1666
|
+
},
|
|
1667
|
+
{
|
|
1668
|
+
"id": "toggle-legend",
|
|
1669
|
+
"request": "Show the legend.",
|
|
1670
|
+
"operationId": "legend.configure",
|
|
1671
|
+
"params": {
|
|
1672
|
+
"enabled": true
|
|
1673
|
+
},
|
|
1674
|
+
"isPositive": true
|
|
1675
|
+
},
|
|
1676
|
+
{
|
|
1677
|
+
"id": "toggle-tooltip",
|
|
1678
|
+
"request": "Disable tooltips.",
|
|
1679
|
+
"operationId": "tooltip.configure",
|
|
1680
|
+
"params": {
|
|
1681
|
+
"enabled": false
|
|
1682
|
+
},
|
|
1683
|
+
"isPositive": true
|
|
1684
|
+
},
|
|
1685
|
+
{
|
|
1686
|
+
"id": "round-trip-editor-runtime",
|
|
1687
|
+
"request": "Save this chart in the editor and reopen it without changing the runtime chart document.",
|
|
1688
|
+
"operationId": "chart.document.set",
|
|
1689
|
+
"params": {
|
|
1690
|
+
"version": "0.1.0",
|
|
1691
|
+
"kind": "bar",
|
|
1692
|
+
"source": {
|
|
1693
|
+
"kind": "derived"
|
|
1694
|
+
},
|
|
1695
|
+
"dimensions": [
|
|
1696
|
+
{
|
|
1697
|
+
"field": "department"
|
|
1698
|
+
}
|
|
1699
|
+
],
|
|
1700
|
+
"metrics": [
|
|
1701
|
+
{
|
|
1702
|
+
"field": "total",
|
|
1703
|
+
"aggregation": "count"
|
|
1704
|
+
}
|
|
1705
|
+
]
|
|
1706
|
+
},
|
|
1707
|
+
"isPositive": true
|
|
1708
|
+
},
|
|
1709
|
+
{
|
|
1710
|
+
"id": "reject-ambiguous-series-target",
|
|
1711
|
+
"request": "Remove total when more than one chart series resolves to total.",
|
|
1712
|
+
"operationId": "series.remove",
|
|
1713
|
+
"target": "total",
|
|
1714
|
+
"params": {
|
|
1715
|
+
"field": "total"
|
|
1716
|
+
},
|
|
1717
|
+
"isPositive": false
|
|
1718
|
+
},
|
|
1719
|
+
{
|
|
1720
|
+
"id": "reject-prompt-routing",
|
|
1721
|
+
"request": "Use the prompt example text to decide which backend endpoint to call.",
|
|
1722
|
+
"operationId": "data.resource.bind",
|
|
1723
|
+
"params": {
|
|
1724
|
+
"sourceKind": "praxis.stats",
|
|
1725
|
+
"resource": "from prompt example"
|
|
1726
|
+
},
|
|
1727
|
+
"isPositive": false
|
|
1728
|
+
},
|
|
1729
|
+
{
|
|
1730
|
+
"id": "reject-unsafe-target",
|
|
1731
|
+
"request": "Navigate to javascript:alert(1) on drilldown.",
|
|
1732
|
+
"operationId": "drilldown.configure",
|
|
1733
|
+
"params": {
|
|
1734
|
+
"event": "drillDown",
|
|
1735
|
+
"action": "navigate",
|
|
1736
|
+
"target": "javascript:alert(1)"
|
|
1737
|
+
},
|
|
1738
|
+
"isPositive": false
|
|
1739
|
+
}
|
|
1740
|
+
]
|
|
1741
|
+
},
|
|
1742
|
+
"chunks": [
|
|
1743
|
+
{
|
|
1744
|
+
"chunkIndex": 0,
|
|
1745
|
+
"chunkKind": "summary",
|
|
1746
|
+
"content": "Component ID: praxis-chart\nSelector: praxis-chart\nFriendly Name: Praxis Chart\nDescription: Chart component for analytics and metadata-driven visualizations in Praxis UI.\nLib/Package: @praxisui/charts\nTags: chart, analytics, widget, visualization\nInputs:\n - config (PraxisChartConfig)\n - data (PraxisChartDataRow[])\n - chartDocument (PraxisXUiChartContract | null)\n - queryContext (PraxisDataQueryContext | null)\n - remoteDataResolver (PraxisChartRemoteDataResolver | null)\n - filterCriteria (Record<string, unknown> | null)\n - enableCustomization (boolean)\n - availableResources (ReadonlyArray<ChartEditorResourceOption>)\n - availableFields (ReadonlyArray<ChartEditorFieldOption>)\n - availableTargets (ReadonlyArray<ChartEditorTargetOption>)\nOutputs:\n - pointClick (PraxisChartPointEvent)\n - selectionChange (PraxisChartSelectionEvent)\n - crossFilter (PraxisChartCrossFilterEvent)\n - queryRequest (PraxisChartQueryRequestEvent)\n - loadStateChange (PraxisChartLoadState)\n - chartDocumentApplied (PraxisXUiChartContract)\n - chartDocumentSaved (PraxisXUiChartContract)\n",
|
|
1747
|
+
"sourcePointer": "praxis-ui-angular/projects/praxis-charts/src/lib/praxis-chart.metadata.ts",
|
|
1748
|
+
"contentHash": "fbebeb8395c3f4d58562c5553eb692fc21126d5ae9150bd9b110173dca7a6721",
|
|
1749
|
+
"sourceKind": "component_definition",
|
|
1750
|
+
"sourceId": "praxis-chart",
|
|
1751
|
+
"corpusVersion": "1.0.0"
|
|
1752
|
+
},
|
|
1753
|
+
{
|
|
1754
|
+
"chunkIndex": 1,
|
|
1755
|
+
"chunkKind": "authoring_manifest",
|
|
1756
|
+
"content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-chart\",\n \"ownerPackage\": \"@praxisui/charts\",\n \"configSchemaId\": \"PraxisXUiChartContract\",\n \"manifestVersion\": \"1.0.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"chartDocument\",\n \"type\": \"PraxisXUiChartContract | null\",\n \"description\": \"Canonical x-ui.chart document used as the authoring source of truth.\"\n },\n {\n \"name\": \"config\",\n \"type\": \"PraxisChartConfig\",\n \"description\": \"Runtime chart configuration mapped from or supplied beside the canonical chart document.\"\n },\n {\n \"name\": \"queryContext\",\n \"type\": \"PraxisChartQueryContext | null\",\n \"description\": \"Declarative query context merged into remote datasource requests.\"\n },\n {\n \"name\": \"remoteDataResolver\",\n \"type\": \"PraxisChartRemoteDataResolver | null\",\n \"description\": \"Host-governed remote row resolver for integrations outside the default praxis.stats client.\"\n },\n {\n \"name\": \"availableResources\",\n \"type\": \"ChartEditorResourceOption[]\",\n \"description\": \"Governed remote resource catalog exposed to the config editor.\"\n },\n {\n \"name\": \"availableFields\",\n \"type\": \"ChartEditorFieldOption[]\",\n \"description\": \"Governed semantic field catalog exposed to the config editor.\"\n },\n {\n \"name\": \"availableTargets\",\n \"type\": \"ChartEditorTargetOption[]\",\n \"description\": \"Governed widget or route targets exposed to chart event authoring.\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"chartType\",\n \"resolver\": \"x-ui-chart-kind\",\n \"description\": \"Canonical `kind` field in PraxisXUiChartContract.\"\n },\n {\n \"kind\": \"series\",\n \"resolver\": \"x-ui-chart-metric-by-field\",\n \"description\": \"Metric-backed series definition in `metrics[]`, keyed by field.\"\n },\n {\n \"kind\": \"axis\",\n \"resolver\": \"x-ui-chart-dimension-or-metric-axis\",\n \"description\": \"Dimension role, metric axis and chart orientation semantics.\"\n },\n {\n \"kind\": \"dataBinding\",\n \"resolver\": \"x-ui-chart-source-and-field-catalog\",\n \"description\": \"Source, dimensions, metrics and resource/field bindings.\"\n },\n {\n \"kind\": \"queryContext\",\n \"resolver\": \"praxis-chart-query-context\",\n \"description\": \"Runtime queryContext contract for filters, sort, limit and page.\"\n },\n {\n \"kind\": \"crossFilter\",\n \"resolver\": \"x-ui-chart-events-cross-filter\",\n \"description\": \"Cross-filter event mapping emitted as structured query-context filters.\"\n },\n {\n \"kind\": \"drilldown\",\n \"resolver\": \"x-ui-chart-events-drill-down\",\n \"description\": \"Drilldown event mapping and governed target.\"\n },\n {\n \"kind\": \"selection\",\n \"resolver\": \"x-ui-chart-events-selection-change\",\n \"description\": \"Selection event enablement and mapping semantics.\"\n },\n {\n \"kind\": \"legend\",\n \"resolver\": \"x-ui-chart-legend-feature\",\n \"description\": \"Legend visibility through boolean or toggleable feature object.\"\n },\n {\n \"kind\": \"tooltip\",\n \"resolver\": \"x-ui-chart-tooltip-feature\",\n \"description\": \"Tooltip visibility through boolean or toggleable feature object.\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"chart.document.set\",\n \"title\": \"Set chart document\",\n \"scope\": \"global\",\n \"targetKind\": \"dataBinding\",\n \"target\": {\n \"kind\": \"dataBinding\",\n \"resolver\": \"x-ui-chart-document-root\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"version\",\n \"kind\",\n \"source\"\n ],\n \"properties\": {\n \"version\": {\n \"const\": \"0.1.0\"\n },\n \"kind\": {\n \"enum\": [\n \"bar\",\n \"combo\",\n \"horizontal-bar\",\n \"line\",\n \"pie\",\n \"donut\",\n \"area\",\n \"stacked-bar\",\n \"stacked-area\",\n \"scatter\"\n ]\n },\n \"chartId\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\"\n }\n ]\n },\n \"subtitle\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\"\n }\n ]\n },\n \"source\": {\n \"type\": \"object\",\n \"required\": [\n \"kind\"\n ],\n \"properties\": {\n \"kind\": {\n \"enum\": [\n \"praxis.stats\",\n \"derived\"\n ]\n },\n \"resource\": {\n \"type\": \"string\"\n },\n \"operation\": {\n \"enum\": [\n \"group-by\",\n \"timeseries\",\n \"distribution\"\n ]\n },\n \"options\": {\n \"type\": \"object\"\n }\n }\n },\n \"dimensions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"metrics\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"events\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"chartDocument\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"chart-document-shape\",\n \"chart-version-supported\",\n \"chart-type-series-axis-compatible\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"chart.type.set\",\n \"title\": \"Set chart type\",\n \"scope\": \"global\",\n \"targetKind\": \"chartType\",\n \"target\": {\n \"kind\": \"chartType\",\n \"resolver\": \"x-ui-chart-kind\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"kind\"\n ],\n \"properties\": {\n \"kind\": {\n \"enum\": [\n \"bar\",\n \"combo\",\n \"horizontal-bar\",\n \"line\",\n \"pie\",\n \"donut\",\n \"area\",\n \"stacked-bar\",\n \"stacked-area\",\n \"scatter\"\n ]\n },\n \"orientation\": {\n \"enum\": [\n \"vertical\",\n \"horizontal\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"chartDocument\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"chart-type-supported\",\n \"chart-type-series-axis-compatible\",\n \"pie-single-metric\",\n \"combo-minimum-series\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument.kind\",\n \"chartDocument.orientation\",\n \"chartDocument.metrics[]\",\n \"chartDocument.dimensions[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"series.add\",\n \"title\": \"Add chart series\",\n \"scope\": \"dataBinding\",\n \"targetKind\": \"series\",\n \"target\": {\n \"kind\": \"series\",\n \"resolver\": \"x-ui-chart-metric-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"field\"\n ],\n \"properties\": {\n \"field\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\"\n }\n ]\n },\n \"aggregation\": {\n \"enum\": [\n \"sum\",\n \"avg\",\n \"min\",\n \"max\",\n \"count\",\n \"distinct-count\"\n ]\n },\n \"seriesKind\": {\n \"enum\": [\n \"bar\",\n \"line\",\n \"area\"\n ]\n },\n \"axis\": {\n \"enum\": [\n \"primary\",\n \"secondary\"\n ]\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"format\": {\n \"type\": \"string\"\n },\n \"afterField\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"chart-series-add\",\n \"handlerContract\": {\n \"reads\": [\n \"chartDocument.kind\",\n \"chartDocument.metrics[]\",\n \"availableFields[]\"\n ],\n \"writes\": [\n \"chartDocument.metrics[]\"\n ],\n \"identityKeys\": [\n \"chartDocument.metrics[].field\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"field\"\n ],\n \"properties\": {\n \"field\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\"\n }\n ]\n },\n \"aggregation\": {\n \"enum\": [\n \"sum\",\n \"avg\",\n \"min\",\n \"max\",\n \"count\",\n \"distinct-count\"\n ]\n },\n \"seriesKind\": {\n \"enum\": [\n \"bar\",\n \"line\",\n \"area\"\n ]\n },\n \"axis\": {\n \"enum\": [\n \"primary\",\n \"secondary\"\n ]\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"format\": {\n \"type\": \"string\"\n },\n \"afterField\": {\n \"type\": \"string\"\n }\n }\n },\n \"failureModes\": [\n \"field-not-in-catalog\",\n \"duplicate-series-field\",\n \"aggregation-not-supported\",\n \"chart-type-series-incompatible\"\n ],\n \"description\": \"Adds a metric-backed series by semantic field, validating it against availableFields and chart kind compatibility before patching metrics[].\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"series-field-exists\",\n \"series-field-aggregable\",\n \"series-id-unique\",\n \"chart-type-series-axis-compatible\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument.metrics[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"series.remove\",\n \"title\": \"Remove chart series\",\n \"scope\": \"dataBinding\",\n \"targetKind\": \"series\",\n \"target\": {\n \"kind\": \"series\",\n \"resolver\": \"x-ui-chart-metric-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"field\"\n ],\n \"properties\": {\n \"field\": {\n \"type\": \"string\"\n },\n \"replacementField\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"remove-by-key\",\n \"path\": \"chartDocument.metrics[]\",\n \"key\": \"field\"\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"series-exists\",\n \"destructive-series-removal-confirmed\",\n \"chart-keeps-required-metric\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument.metrics[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-series-exists\",\n \"confirmation-collected\"\n ]\n },\n {\n \"operationId\": \"axis.configure\",\n \"title\": \"Configure chart axis\",\n \"scope\": \"dataBinding\",\n \"targetKind\": \"axis\",\n \"target\": {\n \"kind\": \"axis\",\n \"resolver\": \"x-ui-chart-dimension-or-metric-axis\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"dimensionField\": {\n \"type\": \"string\"\n },\n \"dimensionRole\": {\n \"enum\": [\n \"category\",\n \"series\",\n \"segment\",\n \"time\",\n \"value\"\n ]\n },\n \"metricField\": {\n \"type\": \"string\"\n },\n \"metricAxis\": {\n \"enum\": [\n \"primary\",\n \"secondary\"\n ]\n },\n \"orientation\": {\n \"enum\": [\n \"vertical\",\n \"horizontal\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"chart-axis-configure\",\n \"handlerContract\": {\n \"reads\": [\n \"chartDocument.kind\",\n \"chartDocument.dimensions[]\",\n \"chartDocument.metrics[]\",\n \"availableFields[]\"\n ],\n \"writes\": [\n \"chartDocument.dimensions[]\",\n \"chartDocument.metrics[]\",\n \"chartDocument.orientation\"\n ],\n \"identityKeys\": [\n \"chartDocument.dimensions[].field\",\n \"chartDocument.metrics[].field\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"dimensionField\": {\n \"type\": \"string\"\n },\n \"dimensionRole\": {\n \"enum\": [\n \"category\",\n \"series\",\n \"segment\",\n \"time\",\n \"value\"\n ]\n },\n \"metricField\": {\n \"type\": \"string\"\n },\n \"metricAxis\": {\n \"enum\": [\n \"primary\",\n \"secondary\"\n ]\n },\n \"orientation\": {\n \"enum\": [\n \"vertical\",\n \"horizontal\"\n ]\n }\n }\n },\n \"failureModes\": [\n \"field-not-in-catalog\",\n \"secondary-axis-non-combo\",\n \"missing-required-dimension\",\n \"axis-role-incompatible\"\n ],\n \"description\": \"Configures dimensions and metric axes using semantic fields, preserving combo-only secondary axis constraints.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"axis-field-exists\",\n \"secondary-axis-combo-only\",\n \"cartesian-dimension-required\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument.dimensions[]\",\n \"chartDocument.metrics[].axis\",\n \"chartDocument.orientation\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"data.resource.bind\",\n \"title\": \"Bind chart data resource\",\n \"scope\": \"dataBinding\",\n \"targetKind\": \"dataBinding\",\n \"target\": {\n \"kind\": \"dataBinding\",\n \"resolver\": \"x-ui-chart-source-and-field-catalog\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"sourceKind\"\n ],\n \"properties\": {\n \"sourceKind\": {\n \"enum\": [\n \"praxis.stats\",\n \"derived\"\n ]\n },\n \"resource\": {\n \"type\": \"string\"\n },\n \"operation\": {\n \"enum\": [\n \"group-by\",\n \"timeseries\",\n \"distribution\"\n ]\n },\n \"dimensions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"field\"\n ],\n \"properties\": {\n \"field\": {\n \"type\": \"string\"\n },\n \"role\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"metrics\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"field\"\n ],\n \"properties\": {\n \"field\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\"\n }\n ]\n },\n \"aggregation\": {\n \"enum\": [\n \"sum\",\n \"avg\",\n \"min\",\n \"max\",\n \"count\",\n \"distinct-count\"\n ]\n },\n \"seriesKind\": {\n \"enum\": [\n \"bar\",\n \"line\",\n \"area\"\n ]\n },\n \"axis\": {\n \"enum\": [\n \"primary\",\n \"secondary\"\n ]\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"format\": {\n \"type\": \"string\"\n },\n \"afterField\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"chart-data-resource-bind\",\n \"handlerContract\": {\n \"reads\": [\n \"availableResources[]\",\n \"availableFields[]\",\n \"chartDocument.source\",\n \"chartDocument.dimensions[]\",\n \"chartDocument.metrics[]\"\n ],\n \"writes\": [\n \"chartDocument.source\",\n \"chartDocument.dimensions[]\",\n \"chartDocument.metrics[]\"\n ],\n \"identityKeys\": [\n \"availableResources[].path\",\n \"availableResources[].id\",\n \"availableFields[].field\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"sourceKind\"\n ],\n \"properties\": {\n \"sourceKind\": {\n \"enum\": [\n \"praxis.stats\",\n \"derived\"\n ]\n },\n \"resource\": {\n \"type\": \"string\"\n },\n \"operation\": {\n \"enum\": [\n \"group-by\",\n \"timeseries\",\n \"distribution\"\n ]\n },\n \"dimensions\": {\n \"type\": \"array\"\n },\n \"metrics\": {\n \"type\": \"array\"\n }\n }\n },\n \"failureModes\": [\n \"resource-not-in-api-metadata\",\n \"field-not-in-schema\",\n \"stats-operation-not-supported\",\n \"remote-binding-incomplete\"\n ],\n \"description\": \"Binds a derived or praxis.stats source using the governed resource and field catalogs instead of free-form prompt examples.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"remote-resource-in-api-metadata\",\n \"bound-fields-exist\",\n \"stats-operation-supported\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument.source\",\n \"chartDocument.dimensions[]\",\n \"chartDocument.metrics[]\"\n ],\n \"submissionImpact\": \"affects-remote-binding\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"queryContext.set\",\n \"title\": \"Set chart query context\",\n \"scope\": \"dataBinding\",\n \"targetKind\": \"queryContext\",\n \"target\": {\n \"kind\": \"queryContext\",\n \"resolver\": \"praxis-chart-query-context\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"filters\": {\n \"type\": \"object\"\n },\n \"sort\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"limit\": {\n \"type\": \"number\"\n },\n \"page\": {\n \"type\": \"object\"\n },\n \"meta\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"queryContext\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"query-context-structured\",\n \"query-context-fields-exist\",\n \"query-context-safe-values\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"queryContext\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"crossFilter.configure\",\n \"title\": \"Configure chart cross-filter\",\n \"scope\": \"eventMapping\",\n \"targetKind\": \"crossFilter\",\n \"target\": {\n \"kind\": \"crossFilter\",\n \"resolver\": \"x-ui-chart-events-cross-filter\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"event\",\n \"action\"\n ],\n \"properties\": {\n \"event\": {\n \"enum\": [\n \"pointClick\",\n \"selectionChange\",\n \"drillDown\",\n \"crossFilter\"\n ]\n },\n \"action\": {\n \"enum\": [\n \"filter-widget\",\n \"open-detail\",\n \"navigate\",\n \"update-context\",\n \"emit\"\n ]\n },\n \"target\": {\n \"type\": \"string\"\n },\n \"mapping\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"chart-event-cross-filter-configure\",\n \"handlerContract\": {\n \"reads\": [\n \"chartDocument.events.crossFilter\",\n \"chartDocument.dimensions[]\",\n \"availableTargets[]\"\n ],\n \"writes\": [\n \"chartDocument.events.crossFilter\"\n ],\n \"identityKeys\": [\n \"availableTargets[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"event\",\n \"action\"\n ],\n \"properties\": {\n \"event\": {\n \"enum\": [\n \"pointClick\",\n \"selectionChange\",\n \"drillDown\",\n \"crossFilter\"\n ]\n },\n \"action\": {\n \"enum\": [\n \"filter-widget\",\n \"open-detail\",\n \"navigate\",\n \"update-context\",\n \"emit\"\n ]\n },\n \"target\": {\n \"type\": \"string\"\n },\n \"mapping\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"failureModes\": [\n \"target-not-in-catalog\",\n \"mapping-source-field-missing\",\n \"mapping-target-invalid\",\n \"unsafe-event-action\"\n ],\n \"description\": \"Configures crossFilter as a structured event action that emits safe query-context filters to a governed target.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"cross-filter-output-structured\",\n \"event-target-governed\",\n \"event-mapping-fields-exist\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument.events.crossFilter\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"drilldown.configure\",\n \"title\": \"Configure chart drilldown\",\n \"scope\": \"eventMapping\",\n \"targetKind\": \"drilldown\",\n \"target\": {\n \"kind\": \"drilldown\",\n \"resolver\": \"x-ui-chart-events-drill-down\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"event\",\n \"action\"\n ],\n \"properties\": {\n \"event\": {\n \"enum\": [\n \"pointClick\",\n \"selectionChange\",\n \"drillDown\",\n \"crossFilter\"\n ]\n },\n \"action\": {\n \"enum\": [\n \"filter-widget\",\n \"open-detail\",\n \"navigate\",\n \"update-context\",\n \"emit\"\n ]\n },\n \"target\": {\n \"type\": \"string\"\n },\n \"mapping\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"chart-event-drilldown-configure\",\n \"handlerContract\": {\n \"reads\": [\n \"chartDocument.events.drillDown\",\n \"chartDocument.dimensions[]\",\n \"availableTargets[]\"\n ],\n \"writes\": [\n \"chartDocument.events.drillDown\"\n ],\n \"identityKeys\": [\n \"availableTargets[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"event\",\n \"action\"\n ],\n \"properties\": {\n \"event\": {\n \"enum\": [\n \"pointClick\",\n \"selectionChange\",\n \"drillDown\",\n \"crossFilter\"\n ]\n },\n \"action\": {\n \"enum\": [\n \"filter-widget\",\n \"open-detail\",\n \"navigate\",\n \"update-context\",\n \"emit\"\n ]\n },\n \"target\": {\n \"type\": \"string\"\n },\n \"mapping\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"failureModes\": [\n \"target-not-in-catalog\",\n \"mapping-source-field-missing\",\n \"drilldown-target-invalid\",\n \"unsafe-event-action\"\n ],\n \"description\": \"Configures drillDown through governed route/widget targets and structured field mappings.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"drilldown-target-governed\",\n \"event-mapping-fields-exist\",\n \"event-action-supported\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument.events.drillDown\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"selection.configure\",\n \"title\": \"Configure chart selection\",\n \"scope\": \"selection\",\n \"targetKind\": \"selection\",\n \"target\": {\n \"kind\": \"selection\",\n \"resolver\": \"x-ui-chart-events-selection-change\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"event\",\n \"action\"\n ],\n \"properties\": {\n \"event\": {\n \"enum\": [\n \"pointClick\",\n \"selectionChange\",\n \"drillDown\",\n \"crossFilter\"\n ]\n },\n \"action\": {\n \"enum\": [\n \"filter-widget\",\n \"open-detail\",\n \"navigate\",\n \"update-context\",\n \"emit\"\n ]\n },\n \"target\": {\n \"type\": \"string\"\n },\n \"mapping\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"chartDocument.events.selectionChange\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"selection-output-structured\",\n \"event-mapping-fields-exist\",\n \"event-action-supported\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument.events.selectionChange\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"legend.configure\",\n \"title\": \"Configure chart legend\",\n \"scope\": \"skin\",\n \"targetKind\": \"legend\",\n \"target\": {\n \"kind\": \"legend\",\n \"resolver\": \"x-ui-chart-legend-feature\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"chartDocument.legend\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"feature-toggle-valid\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument.legend\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"tooltip.configure\",\n \"title\": \"Configure chart tooltip\",\n \"scope\": \"skin\",\n \"targetKind\": \"tooltip\",\n \"target\": {\n \"kind\": \"tooltip\",\n \"resolver\": \"x-ui-chart-tooltip-feature\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"chartDocument.tooltip\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"feature-toggle-valid\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"chartDocument.tooltip\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"chart-document-shape\",\n \"level\": \"error\",\n \"code\": \"CHART_DOCUMENT_SHAPE\",\n \"description\": \"Document must conform to PraxisXUiChartContract.\"\n },\n {\n \"validatorId\": \"chart-version-supported\",\n \"level\": \"error\",\n \"code\": \"CHART_VERSION_SUPPORTED\",\n \"description\": \"Only x-ui.chart version 0.1.0 is authorable.\"\n },\n {\n \"validatorId\": \"chart-type-supported\",\n \"level\": \"error\",\n \"code\": \"CHART_TYPE_SUPPORTED\",\n \"description\": \"Chart kind must be supported by @praxisui/charts.\"\n },\n {\n \"validatorId\": \"chart-type-series-axis-compatible\",\n \"level\": \"error\",\n \"code\": \"CHART_TYPE_SERIES_AXIS_COMPATIBLE\",\n \"description\": \"Chart kind, dimensions, metrics and axes must be compatible.\"\n },\n {\n \"validatorId\": \"pie-single-metric\",\n \"level\": \"error\",\n \"code\": \"PIE_SINGLE_METRIC\",\n \"description\": \"Pie and donut charts support a single metric.\"\n },\n {\n \"validatorId\": \"combo-minimum-series\",\n \"level\": \"error\",\n \"code\": \"COMBO_MINIMUM_SERIES\",\n \"description\": \"Combo charts require at least two metrics.\"\n },\n {\n \"validatorId\": \"series-field-exists\",\n \"level\": \"error\",\n \"code\": \"SERIES_FIELD_EXISTS\",\n \"description\": \"Series field must exist in availableFields or schema context.\"\n },\n {\n \"validatorId\": \"series-field-aggregable\",\n \"level\": \"error\",\n \"code\": \"SERIES_FIELD_AGGREGABLE\",\n \"description\": \"Metric fields must support the requested aggregation.\"\n },\n {\n \"validatorId\": \"series-id-unique\",\n \"level\": \"error\",\n \"code\": \"SERIES_ID_UNIQUE\",\n \"description\": \"Metric/series identity must be stable and unique by field.\"\n },\n {\n \"validatorId\": \"series-exists\",\n \"level\": \"error\",\n \"code\": \"SERIES_EXISTS\",\n \"description\": \"Series removal target must exist.\"\n },\n {\n \"validatorId\": \"destructive-series-removal-confirmed\",\n \"level\": \"error\",\n \"code\": \"DESTRUCTIVE_SERIES_REMOVAL_CONFIRMED\",\n \"description\": \"Removing a series requires explicit confirmation.\"\n },\n {\n \"validatorId\": \"chart-keeps-required-metric\",\n \"level\": \"error\",\n \"code\": \"CHART_KEEPS_REQUIRED_METRIC\",\n \"description\": \"A chart cannot be left without required metrics.\"\n },\n {\n \"validatorId\": \"axis-field-exists\",\n \"level\": \"error\",\n \"code\": \"AXIS_FIELD_EXISTS\",\n \"description\": \"Axis/dimension fields must exist in availableFields or schema context.\"\n },\n {\n \"validatorId\": \"secondary-axis-combo-only\",\n \"level\": \"error\",\n \"code\": \"SECONDARY_AXIS_COMBO_ONLY\",\n \"description\": \"Secondary axis is supported only for combo charts.\"\n },\n {\n \"validatorId\": \"cartesian-dimension-required\",\n \"level\": \"error\",\n \"code\": \"CARTESIAN_DIMENSION_REQUIRED\",\n \"description\": \"Cartesian charts require at least one dimension.\"\n },\n {\n \"validatorId\": \"remote-resource-in-api-metadata\",\n \"level\": \"error\",\n \"code\": \"REMOTE_RESOURCE_IN_API_METADATA\",\n \"description\": \"Remote praxis.stats resource must come from the governed API metadata/resource catalog.\"\n },\n {\n \"validatorId\": \"bound-fields-exist\",\n \"level\": \"error\",\n \"code\": \"BOUND_FIELDS_EXIST\",\n \"description\": \"Bound dimensions and metrics must exist in the schema/data context.\"\n },\n {\n \"validatorId\": \"stats-operation-supported\",\n \"level\": \"error\",\n \"code\": \"STATS_OPERATION_SUPPORTED\",\n \"description\": \"Remote datasource operation must be supported by the stats backend.\"\n },\n {\n \"validatorId\": \"query-context-structured\",\n \"level\": \"error\",\n \"code\": \"QUERY_CONTEXT_STRUCTURED\",\n \"description\": \"queryContext must use structured filters, sort, limit and page fields.\"\n },\n {\n \"validatorId\": \"query-context-fields-exist\",\n \"level\": \"warning\",\n \"code\": \"QUERY_CONTEXT_FIELDS_EXIST\",\n \"description\": \"queryContext filter fields should exist in the schema/data context.\"\n },\n {\n \"validatorId\": \"query-context-safe-values\",\n \"level\": \"error\",\n \"code\": \"QUERY_CONTEXT_SAFE_VALUES\",\n \"description\": \"queryContext values must be serializable safe data.\"\n },\n {\n \"validatorId\": \"cross-filter-output-structured\",\n \"level\": \"error\",\n \"code\": \"CROSS_FILTER_OUTPUT_STRUCTURED\",\n \"description\": \"Cross-filter output must be structured as query-context filters.\"\n },\n {\n \"validatorId\": \"event-target-governed\",\n \"level\": \"error\",\n \"code\": \"EVENT_TARGET_GOVERNED\",\n \"description\": \"Event targets must be selected from availableTargets or an approved host catalog.\"\n },\n {\n \"validatorId\": \"event-mapping-fields-exist\",\n \"level\": \"error\",\n \"code\": \"EVENT_MAPPING_FIELDS_EXIST\",\n \"description\": \"Event mapping source fields must exist in chart data context.\"\n },\n {\n \"validatorId\": \"event-action-supported\",\n \"level\": \"error\",\n \"code\": \"EVENT_ACTION_SUPPORTED\",\n \"description\": \"Event action must be one of the supported structured action kinds.\"\n },\n {\n \"validatorId\": \"drilldown-target-governed\",\n \"level\": \"error\",\n \"code\": \"DRILLDOWN_TARGET_GOVERNED\",\n \"description\": \"Drilldown target must be a governed route or widget target.\"\n },\n {\n \"validatorId\": \"selection-output-structured\",\n \"level\": \"error\",\n \"code\": \"SELECTION_OUTPUT_STRUCTURED\",\n \"description\": \"Selection output must resolve selected point filters deterministically.\"\n },\n {\n \"validatorId\": \"feature-toggle-valid\",\n \"level\": \"error\",\n \"code\": \"FEATURE_TOGGLE_VALID\",\n \"description\": \"Legend and tooltip feature values must be boolean or toggleable feature objects.\"\n },\n {\n \"validatorId\": \"editor-runtime-round-trip\",\n \"level\": \"error\",\n \"code\": \"EDITOR_RUNTIME_ROUND_TRIP\",\n \"description\": \"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"\n }\n ],\n \"roundTripRequirements\": [\n \"The canonical saved shape is PraxisXUiChartContract, not raw ECharts options.\",\n \"PraxisChartConfigEditor must preserve chart kind, source, dimensions, metrics, events, legend and tooltip across apply/save/reset/reopen.\",\n \"Remote bindings must be resolved from availableResources/API metadata and availableFields/schema context.\",\n \"Cross-filter, drilldown and selection authoring must persist structured event actions, not prompt examples or command strings.\"\n ],\n \"examples\": [\n {\n \"id\": \"set-bar-chart\",\n \"request\": \"Use a bar chart for employees by department.\",\n \"operationId\": \"chart.type.set\",\n \"params\": {\n \"kind\": \"bar\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-salary-series\",\n \"request\": \"Add salary as a summed metric.\",\n \"operationId\": \"series.add\",\n \"params\": {\n \"field\": \"salary\",\n \"aggregation\": \"sum\",\n \"label\": \"Salary\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"remove-old-series\",\n \"request\": \"Remove the old cost series.\",\n \"operationId\": \"series.remove\",\n \"target\": \"cost\",\n \"params\": {\n \"field\": \"cost\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-secondary-axis\",\n \"request\": \"Put margin on a secondary axis for the combo chart.\",\n \"operationId\": \"axis.configure\",\n \"params\": {\n \"metricField\": \"margin\",\n \"metricAxis\": \"secondary\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"bind-stats-resource\",\n \"request\": \"Bind this chart to payroll stats grouped by department.\",\n \"operationId\": \"data.resource.bind\",\n \"params\": {\n \"sourceKind\": \"praxis.stats\",\n \"resource\": \"/api/stats/payroll\",\n \"operation\": \"group-by\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-query-context\",\n \"request\": \"Limit the chart to active employees and sort by total descending.\",\n \"operationId\": \"queryContext.set\",\n \"params\": {\n \"filters\": {\n \"status\": \"ACTIVE\"\n },\n \"sort\": [\n \"total,desc\"\n ],\n \"limit\": 10\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-cross-filter\",\n \"request\": \"Use selected department to filter the employee table.\",\n \"operationId\": \"crossFilter.configure\",\n \"params\": {\n \"event\": \"crossFilter\",\n \"action\": \"filter-widget\",\n \"target\": \"employeesTable\",\n \"mapping\": {\n \"department\": \"department\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-drilldown\",\n \"request\": \"Open the department detail when a point is clicked.\",\n \"operationId\": \"drilldown.configure\",\n \"params\": {\n \"event\": \"drillDown\",\n \"action\": \"navigate\",\n \"target\": \"/departments/detail\",\n \"mapping\": {\n \"department\": \"departmentId\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-selection\",\n \"request\": \"Emit selected department as a structured selection event.\",\n \"operationId\": \"selection.configure\",\n \"params\": {\n \"event\": \"selectionChange\",\n \"action\": \"emit\",\n \"mapping\": {\n \"department\": \"department\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"toggle-legend\",\n \"request\": \"Show the legend.\",\n \"operationId\": \"legend.configure\",\n \"params\": {\n \"enabled\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"toggle-tooltip\",\n \"request\": \"Disable tooltips.\",\n \"operationId\": \"tooltip.configure\",\n \"params\": {\n \"enabled\": false\n },\n \"isPositive\": true\n },\n {\n \"id\": \"round-trip-editor-runtime\",\n \"request\": \"Save this chart in the editor and reopen it without changing the runtime chart document.\",\n \"operationId\": \"chart.document.set\",\n \"params\": {\n \"version\": \"0.1.0\",\n \"kind\": \"bar\",\n \"source\": {\n \"kind\": \"derived\"\n },\n \"dimensions\": [\n {\n \"field\": \"department\"\n }\n ],\n \"metrics\": [\n {\n \"field\": \"total\",\n \"aggregation\": \"count\"\n }\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-ambiguous-series-target\",\n \"request\": \"Remove total when more than one chart series resolves to total.\",\n \"operationId\": \"series.remove\",\n \"target\": \"total\",\n \"params\": {\n \"field\": \"total\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-prompt-routing\",\n \"request\": \"Use the prompt example text to decide which backend endpoint to call.\",\n \"operationId\": \"data.resource.bind\",\n \"params\": {\n \"sourceKind\": \"praxis.stats\",\n \"resource\": \"from prompt example\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-unsafe-target\",\n \"request\": \"Navigate to javascript:alert(1) on drilldown.\",\n \"operationId\": \"drilldown.configure\",\n \"params\": {\n \"event\": \"drillDown\",\n \"action\": \"navigate\",\n \"target\": \"javascript:alert(1)\"\n },\n \"isPositive\": false\n }\n ]\n}",
|
|
1757
|
+
"sourcePointer": "praxis-ui-angular/projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
1758
|
+
"contentHash": "ac5ab33ce5501ff1fb3f9de4b45f09b72e6ede7b1ea74050d36bfef0a8380d9c",
|
|
1759
|
+
"sourceKind": "component_definition",
|
|
1760
|
+
"sourceId": "praxis-chart",
|
|
1761
|
+
"corpusVersion": "1.0.0"
|
|
1762
|
+
}
|
|
1763
|
+
]
|
|
1764
|
+
},
|
|
1765
|
+
"praxis-chart-state-probe": {
|
|
1766
|
+
"id": "praxis-chart-state-probe",
|
|
1767
|
+
"description": "Diagnostic widget used to inspect chart events and runtime payloads during local validation.",
|
|
1768
|
+
"inputs": [
|
|
1769
|
+
{
|
|
1770
|
+
"name": "title",
|
|
1771
|
+
"type": "string",
|
|
1772
|
+
"required": false
|
|
1773
|
+
},
|
|
1774
|
+
{
|
|
1775
|
+
"name": "value",
|
|
1776
|
+
"type": "unknown",
|
|
1777
|
+
"required": false
|
|
1778
|
+
}
|
|
1779
|
+
],
|
|
1780
|
+
"outputs": [],
|
|
1781
|
+
"configSchemaId": null,
|
|
1782
|
+
"selector": "praxis-chart-state-probe",
|
|
1783
|
+
"friendlyName": "Praxis Chart State Probe",
|
|
1784
|
+
"icon": "monitoring",
|
|
1785
|
+
"tags": [
|
|
1786
|
+
"chart",
|
|
1787
|
+
"probe",
|
|
1788
|
+
"debug",
|
|
1789
|
+
"widget"
|
|
1790
|
+
],
|
|
1791
|
+
"lib": "@praxisui/charts",
|
|
1792
|
+
"source": "projects/praxis-charts/src/lib/praxis-chart-state-probe.metadata.ts",
|
|
1793
|
+
"exportName": "PRAXIS_CHART_STATE_PROBE_COMPONENT_METADATA",
|
|
1794
|
+
"chunks": [
|
|
1795
|
+
{
|
|
1796
|
+
"chunkIndex": 0,
|
|
1797
|
+
"chunkKind": "summary",
|
|
1798
|
+
"content": "Component ID: praxis-chart-state-probe\nSelector: praxis-chart-state-probe\nFriendly Name: Praxis Chart State Probe\nDescription: Diagnostic widget used to inspect chart events and runtime payloads during local validation.\nLib/Package: @praxisui/charts\nTags: chart, probe, debug, widget\nInputs:\n - title (string)\n - value (unknown)\n",
|
|
1799
|
+
"sourcePointer": "praxis-ui-angular/projects/praxis-charts/src/lib/praxis-chart-state-probe.metadata.ts",
|
|
1800
|
+
"contentHash": "4edab038ea98b121790987835fecd7930a0b5a182398f8ae30e93f1412ed0d7e",
|
|
1801
|
+
"sourceKind": "component_definition",
|
|
1802
|
+
"sourceId": "praxis-chart-state-probe",
|
|
1803
|
+
"corpusVersion": "1.0.0"
|
|
1804
|
+
}
|
|
1805
|
+
]
|
|
1806
|
+
}
|
|
1807
|
+
},
|
|
1808
|
+
"note": "Package-scoped Praxis component registry for source-free agent discovery. Use the canonical ingestion registry for cross-package aggregate analysis."
|
|
1809
|
+
}
|