@praxisui/charts 9.0.33 → 9.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -1
- package/ai/component-registry.json +335 -51
- package/fesm2022/praxisui-charts.mjs +556 -44
- package/package.json +3 -3
- package/types/praxisui-charts.d.ts +107 -58
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-08-
|
|
3
|
+
"generatedAt": "2026-08-29T01:52:55.015Z",
|
|
4
4
|
"packageName": "@praxisui/charts",
|
|
5
|
-
"packageVersion": "9.0.
|
|
5
|
+
"packageVersion": "9.0.34",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 3,
|
|
@@ -877,7 +877,7 @@
|
|
|
877
877
|
"componentId": "praxis-chart",
|
|
878
878
|
"ownerPackage": "@praxisui/charts",
|
|
879
879
|
"configSchemaId": "PraxisXUiChartContract",
|
|
880
|
-
"manifestVersion": "1.
|
|
880
|
+
"manifestVersion": "1.4.0",
|
|
881
881
|
"runtimeInputs": [
|
|
882
882
|
{
|
|
883
883
|
"name": "chartDocument",
|
|
@@ -970,6 +970,11 @@
|
|
|
970
970
|
"kind": "tooltip",
|
|
971
971
|
"resolver": "x-ui-chart-tooltip-feature",
|
|
972
972
|
"description": "Tooltip visibility through boolean or toggleable feature object."
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
"kind": "gaugeScale",
|
|
976
|
+
"resolver": "x-ui-chart-gauge-scale",
|
|
977
|
+
"description": "Canonical scalar gauge scale at `chartDocument.gauge.scale`, with finite `min` and `max` bounds."
|
|
973
978
|
}
|
|
974
979
|
],
|
|
975
980
|
"operations": [
|
|
@@ -1020,6 +1025,108 @@
|
|
|
1020
1025
|
}
|
|
1021
1026
|
}
|
|
1022
1027
|
}
|
|
1028
|
+
},
|
|
1029
|
+
{
|
|
1030
|
+
"if": {
|
|
1031
|
+
"properties": {
|
|
1032
|
+
"kind": {
|
|
1033
|
+
"const": "gauge"
|
|
1034
|
+
}
|
|
1035
|
+
},
|
|
1036
|
+
"required": [
|
|
1037
|
+
"kind"
|
|
1038
|
+
]
|
|
1039
|
+
},
|
|
1040
|
+
"then": {
|
|
1041
|
+
"required": [
|
|
1042
|
+
"dimensions",
|
|
1043
|
+
"metrics",
|
|
1044
|
+
"gauge"
|
|
1045
|
+
],
|
|
1046
|
+
"properties": {
|
|
1047
|
+
"dimensions": {
|
|
1048
|
+
"type": "array",
|
|
1049
|
+
"minItems": 1
|
|
1050
|
+
},
|
|
1051
|
+
"metrics": {
|
|
1052
|
+
"type": "array",
|
|
1053
|
+
"minItems": 1,
|
|
1054
|
+
"maxItems": 1
|
|
1055
|
+
},
|
|
1056
|
+
"gauge": {
|
|
1057
|
+
"type": "object",
|
|
1058
|
+
"required": [
|
|
1059
|
+
"scale"
|
|
1060
|
+
],
|
|
1061
|
+
"properties": {
|
|
1062
|
+
"scale": {
|
|
1063
|
+
"type": "object",
|
|
1064
|
+
"required": [
|
|
1065
|
+
"min",
|
|
1066
|
+
"max"
|
|
1067
|
+
],
|
|
1068
|
+
"properties": {
|
|
1069
|
+
"min": {
|
|
1070
|
+
"type": "number"
|
|
1071
|
+
},
|
|
1072
|
+
"max": {
|
|
1073
|
+
"type": "number"
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
}
|
|
1081
|
+
},
|
|
1082
|
+
{
|
|
1083
|
+
"if": {
|
|
1084
|
+
"properties": {
|
|
1085
|
+
"kind": {
|
|
1086
|
+
"const": "gauge"
|
|
1087
|
+
},
|
|
1088
|
+
"source": {
|
|
1089
|
+
"properties": {
|
|
1090
|
+
"kind": {
|
|
1091
|
+
"const": "praxis.stats"
|
|
1092
|
+
}
|
|
1093
|
+
},
|
|
1094
|
+
"required": [
|
|
1095
|
+
"kind"
|
|
1096
|
+
]
|
|
1097
|
+
}
|
|
1098
|
+
},
|
|
1099
|
+
"required": [
|
|
1100
|
+
"kind",
|
|
1101
|
+
"source"
|
|
1102
|
+
]
|
|
1103
|
+
},
|
|
1104
|
+
"then": {
|
|
1105
|
+
"properties": {
|
|
1106
|
+
"source": {
|
|
1107
|
+
"required": [
|
|
1108
|
+
"operation",
|
|
1109
|
+
"options"
|
|
1110
|
+
],
|
|
1111
|
+
"properties": {
|
|
1112
|
+
"operation": {
|
|
1113
|
+
"const": "group-by"
|
|
1114
|
+
},
|
|
1115
|
+
"options": {
|
|
1116
|
+
"type": "object",
|
|
1117
|
+
"required": [
|
|
1118
|
+
"limit"
|
|
1119
|
+
],
|
|
1120
|
+
"properties": {
|
|
1121
|
+
"limit": {
|
|
1122
|
+
"const": 1
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1023
1130
|
}
|
|
1024
1131
|
],
|
|
1025
1132
|
"properties": {
|
|
@@ -1040,7 +1147,8 @@
|
|
|
1040
1147
|
"scatter",
|
|
1041
1148
|
"funnel",
|
|
1042
1149
|
"pyramid",
|
|
1043
|
-
"treemap"
|
|
1150
|
+
"treemap",
|
|
1151
|
+
"gauge"
|
|
1044
1152
|
]
|
|
1045
1153
|
},
|
|
1046
1154
|
"chartId": {
|
|
@@ -1143,6 +1251,29 @@
|
|
|
1143
1251
|
"type": "object"
|
|
1144
1252
|
}
|
|
1145
1253
|
},
|
|
1254
|
+
"gauge": {
|
|
1255
|
+
"type": "object",
|
|
1256
|
+
"required": [
|
|
1257
|
+
"scale"
|
|
1258
|
+
],
|
|
1259
|
+
"properties": {
|
|
1260
|
+
"scale": {
|
|
1261
|
+
"type": "object",
|
|
1262
|
+
"required": [
|
|
1263
|
+
"min",
|
|
1264
|
+
"max"
|
|
1265
|
+
],
|
|
1266
|
+
"properties": {
|
|
1267
|
+
"min": {
|
|
1268
|
+
"type": "number"
|
|
1269
|
+
},
|
|
1270
|
+
"max": {
|
|
1271
|
+
"type": "number"
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
},
|
|
1146
1277
|
"events": {
|
|
1147
1278
|
"type": "object"
|
|
1148
1279
|
}
|
|
@@ -1160,6 +1291,8 @@
|
|
|
1160
1291
|
"chart-document-shape",
|
|
1161
1292
|
"chart-version-supported",
|
|
1162
1293
|
"chart-type-series-axis-compatible",
|
|
1294
|
+
"gauge-scalar-contract",
|
|
1295
|
+
"gauge-scale-valid",
|
|
1163
1296
|
"editor-runtime-round-trip"
|
|
1164
1297
|
],
|
|
1165
1298
|
"affectedPaths": [
|
|
@@ -1186,6 +1319,25 @@
|
|
|
1186
1319
|
"required": [
|
|
1187
1320
|
"kind"
|
|
1188
1321
|
],
|
|
1322
|
+
"allOf": [
|
|
1323
|
+
{
|
|
1324
|
+
"if": {
|
|
1325
|
+
"properties": {
|
|
1326
|
+
"kind": {
|
|
1327
|
+
"const": "gauge"
|
|
1328
|
+
}
|
|
1329
|
+
},
|
|
1330
|
+
"required": [
|
|
1331
|
+
"kind"
|
|
1332
|
+
]
|
|
1333
|
+
},
|
|
1334
|
+
"then": {
|
|
1335
|
+
"required": [
|
|
1336
|
+
"gauge"
|
|
1337
|
+
]
|
|
1338
|
+
}
|
|
1339
|
+
}
|
|
1340
|
+
],
|
|
1189
1341
|
"properties": {
|
|
1190
1342
|
"kind": {
|
|
1191
1343
|
"enum": [
|
|
@@ -1201,7 +1353,8 @@
|
|
|
1201
1353
|
"scatter",
|
|
1202
1354
|
"funnel",
|
|
1203
1355
|
"pyramid",
|
|
1204
|
-
"treemap"
|
|
1356
|
+
"treemap",
|
|
1357
|
+
"gauge"
|
|
1205
1358
|
]
|
|
1206
1359
|
},
|
|
1207
1360
|
"orientation": {
|
|
@@ -1209,6 +1362,29 @@
|
|
|
1209
1362
|
"vertical",
|
|
1210
1363
|
"horizontal"
|
|
1211
1364
|
]
|
|
1365
|
+
},
|
|
1366
|
+
"gauge": {
|
|
1367
|
+
"type": "object",
|
|
1368
|
+
"required": [
|
|
1369
|
+
"scale"
|
|
1370
|
+
],
|
|
1371
|
+
"properties": {
|
|
1372
|
+
"scale": {
|
|
1373
|
+
"type": "object",
|
|
1374
|
+
"required": [
|
|
1375
|
+
"min",
|
|
1376
|
+
"max"
|
|
1377
|
+
],
|
|
1378
|
+
"properties": {
|
|
1379
|
+
"min": {
|
|
1380
|
+
"type": "number"
|
|
1381
|
+
},
|
|
1382
|
+
"max": {
|
|
1383
|
+
"type": "number"
|
|
1384
|
+
}
|
|
1385
|
+
}
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1212
1388
|
}
|
|
1213
1389
|
}
|
|
1214
1390
|
},
|
|
@@ -1225,13 +1401,16 @@
|
|
|
1225
1401
|
"chart-type-series-axis-compatible",
|
|
1226
1402
|
"category-slice-single-metric",
|
|
1227
1403
|
"combo-minimum-series",
|
|
1404
|
+
"gauge-scalar-contract",
|
|
1405
|
+
"gauge-scale-valid",
|
|
1228
1406
|
"editor-runtime-round-trip"
|
|
1229
1407
|
],
|
|
1230
1408
|
"affectedPaths": [
|
|
1231
1409
|
"chartDocument.kind",
|
|
1232
1410
|
"chartDocument.orientation",
|
|
1233
1411
|
"chartDocument.metrics[]",
|
|
1234
|
-
"chartDocument.dimensions[]"
|
|
1412
|
+
"chartDocument.dimensions[]",
|
|
1413
|
+
"chartDocument.gauge.scale"
|
|
1235
1414
|
],
|
|
1236
1415
|
"submissionImpact": "config-only",
|
|
1237
1416
|
"preconditions": [
|
|
@@ -1388,6 +1567,7 @@
|
|
|
1388
1567
|
"series-field-aggregable",
|
|
1389
1568
|
"series-id-unique",
|
|
1390
1569
|
"chart-type-series-axis-compatible",
|
|
1570
|
+
"gauge-scalar-contract",
|
|
1391
1571
|
"editor-runtime-round-trip"
|
|
1392
1572
|
],
|
|
1393
1573
|
"affectedPaths": [
|
|
@@ -1606,6 +1786,10 @@
|
|
|
1606
1786
|
"comparison"
|
|
1607
1787
|
]
|
|
1608
1788
|
},
|
|
1789
|
+
"limit": {
|
|
1790
|
+
"type": "integer",
|
|
1791
|
+
"minimum": 1
|
|
1792
|
+
},
|
|
1609
1793
|
"comparisonPeriod": {
|
|
1610
1794
|
"type": "object",
|
|
1611
1795
|
"required": [
|
|
@@ -1725,11 +1909,13 @@
|
|
|
1725
1909
|
"availableResources[]",
|
|
1726
1910
|
"availableFields[]",
|
|
1727
1911
|
"chartDocument.source",
|
|
1912
|
+
"chartDocument.source.options.limit",
|
|
1728
1913
|
"chartDocument.dimensions[]",
|
|
1729
1914
|
"chartDocument.metrics[]"
|
|
1730
1915
|
],
|
|
1731
1916
|
"writes": [
|
|
1732
1917
|
"chartDocument.source",
|
|
1918
|
+
"chartDocument.source.options.limit",
|
|
1733
1919
|
"chartDocument.source.options.comparisonPeriod",
|
|
1734
1920
|
"chartDocument.dimensions[]",
|
|
1735
1921
|
"chartDocument.metrics[]"
|
|
@@ -1762,6 +1948,10 @@
|
|
|
1762
1948
|
"comparison"
|
|
1763
1949
|
]
|
|
1764
1950
|
},
|
|
1951
|
+
"limit": {
|
|
1952
|
+
"type": "integer",
|
|
1953
|
+
"minimum": 1
|
|
1954
|
+
},
|
|
1765
1955
|
"comparisonPeriod": {
|
|
1766
1956
|
"type": "object",
|
|
1767
1957
|
"required": [
|
|
@@ -1809,11 +1999,12 @@
|
|
|
1809
1999
|
"resource-not-in-api-metadata",
|
|
1810
2000
|
"field-not-in-schema",
|
|
1811
2001
|
"stats-operation-not-supported",
|
|
2002
|
+
"gauge-limit-required",
|
|
1812
2003
|
"comparison-period-incomplete",
|
|
1813
2004
|
"comparison-metric-unsupported",
|
|
1814
2005
|
"remote-binding-incomplete"
|
|
1815
2006
|
],
|
|
1816
|
-
"description": "Binds a derived or praxis.stats source using governed resource, capability and field catalogs. For praxis.stats, availableResources[].id is discovery-only: validation requires the matching availableResources[].path and compilation persists that path.
|
|
2007
|
+
"description": "Binds a derived or praxis.stats source using governed resource, capability and field catalogs. For praxis.stats, availableResources[].id is discovery-only: validation requires the matching availableResources[].path and compilation persists that path. Gauge bindings preserve the canonical scalar limit; comparison requires one canonical operation, metrics[] and an eligible period field."
|
|
1817
2008
|
}
|
|
1818
2009
|
}
|
|
1819
2010
|
],
|
|
@@ -1826,10 +2017,12 @@
|
|
|
1826
2017
|
"chart-type-series-axis-compatible",
|
|
1827
2018
|
"comparison-period-complete",
|
|
1828
2019
|
"comparison-metrics-supported",
|
|
2020
|
+
"gauge-scalar-contract",
|
|
1829
2021
|
"editor-runtime-round-trip"
|
|
1830
2022
|
],
|
|
1831
2023
|
"affectedPaths": [
|
|
1832
2024
|
"chartDocument.source",
|
|
2025
|
+
"chartDocument.source.options.limit",
|
|
1833
2026
|
"chartDocument.source.options.comparisonPeriod",
|
|
1834
2027
|
"chartDocument.dimensions[]",
|
|
1835
2028
|
"chartDocument.metrics[]"
|
|
@@ -1899,6 +2092,54 @@
|
|
|
1899
2092
|
"config-initialized"
|
|
1900
2093
|
]
|
|
1901
2094
|
},
|
|
2095
|
+
{
|
|
2096
|
+
"operationId": "gauge.scale.configure",
|
|
2097
|
+
"title": "Configure gauge scale",
|
|
2098
|
+
"scope": "layout",
|
|
2099
|
+
"targetKind": "gaugeScale",
|
|
2100
|
+
"target": {
|
|
2101
|
+
"kind": "gaugeScale",
|
|
2102
|
+
"resolver": "x-ui-chart-gauge-scale",
|
|
2103
|
+
"ambiguityPolicy": "fail",
|
|
2104
|
+
"required": false
|
|
2105
|
+
},
|
|
2106
|
+
"inputSchema": {
|
|
2107
|
+
"type": "object",
|
|
2108
|
+
"required": [
|
|
2109
|
+
"min",
|
|
2110
|
+
"max"
|
|
2111
|
+
],
|
|
2112
|
+
"properties": {
|
|
2113
|
+
"min": {
|
|
2114
|
+
"type": "number"
|
|
2115
|
+
},
|
|
2116
|
+
"max": {
|
|
2117
|
+
"type": "number"
|
|
2118
|
+
}
|
|
2119
|
+
}
|
|
2120
|
+
},
|
|
2121
|
+
"effects": [
|
|
2122
|
+
{
|
|
2123
|
+
"kind": "set-value",
|
|
2124
|
+
"path": "chartDocument.gauge.scale"
|
|
2125
|
+
}
|
|
2126
|
+
],
|
|
2127
|
+
"destructive": false,
|
|
2128
|
+
"requiresConfirmation": false,
|
|
2129
|
+
"validators": [
|
|
2130
|
+
"gauge-scale-valid",
|
|
2131
|
+
"gauge-scalar-contract",
|
|
2132
|
+
"editor-runtime-round-trip"
|
|
2133
|
+
],
|
|
2134
|
+
"affectedPaths": [
|
|
2135
|
+
"chartDocument.gauge.scale"
|
|
2136
|
+
],
|
|
2137
|
+
"submissionImpact": "config-only",
|
|
2138
|
+
"preconditions": [
|
|
2139
|
+
"config-initialized",
|
|
2140
|
+
"chart-kind-gauge"
|
|
2141
|
+
]
|
|
2142
|
+
},
|
|
1902
2143
|
{
|
|
1903
2144
|
"operationId": "pointClick.configure",
|
|
1904
2145
|
"title": "Configure chart point click",
|
|
@@ -2442,6 +2683,18 @@
|
|
|
2442
2683
|
"code": "COMBO_MINIMUM_SERIES",
|
|
2443
2684
|
"description": "Combo charts require at least two metrics."
|
|
2444
2685
|
},
|
|
2686
|
+
{
|
|
2687
|
+
"validatorId": "gauge-scalar-contract",
|
|
2688
|
+
"level": "error",
|
|
2689
|
+
"code": "GAUGE_SCALAR_CONTRACT",
|
|
2690
|
+
"description": "Gauge charts require one dimension, exactly one metric and, for praxis.stats, one group-by bucket selected with source.options.limit=1."
|
|
2691
|
+
},
|
|
2692
|
+
{
|
|
2693
|
+
"validatorId": "gauge-scale-valid",
|
|
2694
|
+
"level": "error",
|
|
2695
|
+
"code": "GAUGE_SCALE_VALID",
|
|
2696
|
+
"description": "Gauge scale requires finite min and max values with max greater than min; runtime rejects values outside the declared scale without clamping."
|
|
2697
|
+
},
|
|
2445
2698
|
{
|
|
2446
2699
|
"validatorId": "series-field-exists",
|
|
2447
2700
|
"level": "error",
|
|
@@ -2611,6 +2864,7 @@
|
|
|
2611
2864
|
"Remote bindings persist availableResources[].path; availableResources[].id remains discovery identity, and transient resource/field/target catalogs and diagnostics are never persisted in widget inputs.",
|
|
2612
2865
|
"Comparison must preserve one canonical /stats/comparison request with metrics[] and a complete comparisonPeriod; it must not downgrade into independent group-by calls.",
|
|
2613
2866
|
"Scatter with one metric preserves dimension-X/metric-Y semantics; scatter with two metrics preserves the dimension as grouped bucket identity and ordered metrics as X/Y.",
|
|
2867
|
+
"Gauge preserves one dimension, exactly one metric, finite gauge.scale bounds and, for praxis.stats, the canonical group-by request with source.options.limit=1.",
|
|
2614
2868
|
"Cross-filter, drilldown and selection authoring must persist structured event actions, not prompt examples or command strings.",
|
|
2615
2869
|
"[P1] Backend handler, resolver and validators now execute directly; end-to-end Page Builder parity remains open until assistant requests project the transient availableTargets[].events catalog through validationContext and expose its fail-closed diagnostics.",
|
|
2616
2870
|
"[P2] Transform-output semantics and target input-schema/port fields must be materialized and validated by Core; local transform.output inspection and backend-enriched inputFields are not substitutes for those canonical projections.",
|
|
@@ -2780,6 +3034,16 @@
|
|
|
2780
3034
|
},
|
|
2781
3035
|
"isPositive": true
|
|
2782
3036
|
},
|
|
3037
|
+
{
|
|
3038
|
+
"id": "configure-gauge-scale",
|
|
3039
|
+
"request": "Set the gauge scale from zero to one.",
|
|
3040
|
+
"operationId": "gauge.scale.configure",
|
|
3041
|
+
"params": {
|
|
3042
|
+
"min": 0,
|
|
3043
|
+
"max": 1
|
|
3044
|
+
},
|
|
3045
|
+
"isPositive": true
|
|
3046
|
+
},
|
|
2783
3047
|
{
|
|
2784
3048
|
"id": "round-trip-editor-runtime",
|
|
2785
3049
|
"request": "Save this chart in the editor and reopen it without changing the runtime chart document.",
|
|
@@ -2851,9 +3115,9 @@
|
|
|
2851
3115
|
{
|
|
2852
3116
|
"chunkIndex": 1,
|
|
2853
3117
|
"chunkKind": "authoring_manifest",
|
|
2854
|
-
"content": "{\"operationId\":\"chart.document.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3118
|
+
"content": "{\"operationId\":\"chart.document.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set chart document Effects: set-value. Save this chart in the editor and reopen it without changing the runtime chart document.\",\"scope\":\"global\",\"target\":{\"kind\":\"dataBinding\",\"resolver\":\"x-ui-chart-document-root\",\"required\":false},\"inputContract\":{\"required\":[\"version\",\"kind\",\"source\"],\"properties\":[\"version\",\"kind\",\"chartId\",\"title\",\"subtitle\",\"source\",\"dimensions\",\"metrics\",\"gauge\",\"events\"],\"semanticTerms\":[\"version\",\"kind\",\"chartId\",\"title\",\"subtitle\",\"source\",\"dimensions\",\"metrics\",\"gauge\",\"events\",\"0.1.0\",\"bar\",\"combo\",\"horizontal-bar\",\"line\",\"pie\",\"donut\",\"area\",\"stacked-bar\",\"stacked-area\",\"scatter\",\"funnel\",\"pyramid\",\"treemap\",\"source.kind\",\"source.resource\",\"source.operation\",\"source.options\",\"gauge.scale\",\"praxis.stats\",\"derived\",\"group-by\",\"timeseries\",\"distribution\",\"comparison\",\"source.options.comparisonPeriod\",\"gauge.scale.min\",\"gauge.scale.max\",\"source.options.comparisonPeriod.field\",\"source.options.comparisonPeriod.timezone\",\"source.options.comparisonPeriod.preset\",\"source.options.comparisonPeriod.mode\",\"TODAY\",\"YESTERDAY\",\"LAST_7_DAYS\",\"LAST_30_DAYS\",\"THIS_MONTH\",\"LAST_MONTH\",\"THIS_QUARTER\",\"THIS_YEAR\",\"PREVIOUS_ALIGNED\",\"PREVIOUS_CALENDAR_PERIOD\",\"source.options.limit\",\"1\"]},\"effects\":[\"set-value\"],\"affectedPaths\":[\"chartDocument\"],\"validators\":[{\"validatorId\":\"chart-document-shape\",\"level\":\"error\",\"code\":\"CHART_DOCUMENT_SHAPE\",\"description\":\"Document must conform to PraxisXUiChartContract.\"},{\"validatorId\":\"chart-version-supported\",\"level\":\"error\",\"code\":\"CHART_VERSION_SUPPORTED\"},{\"validatorId\":\"chart-type-series-axis-compatible\",\"level\":\"error\",\"code\":\"CHART_TYPE_SERIES_AXIS_COMPATIBLE\",\"description\":\"Chart kind, dimensions, metrics and axes must be compatible.\"},{\"validatorId\":\"gauge-scalar-contract\",\"level\":\"error\",\"code\":\"GAUGE_SCALAR_CONTRACT\",\"description\":\"Gauge charts require one dimension, exactly one metric and, for praxis.stats, one group-by bucket selected with source.options.limit=1.\"},{\"validatorId\":\"gauge-scale-valid\",\"level\":\"error\",\"code\":\"GAUGE_SCALE_VALID\",\"description\":\"Gauge scale requires finite min and max values with max greater than min; runtime rejects values outside the declared scale without clamping.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"round-trip-editor-runtime\",\"request\":\"Save this chart in the editor and reopen it without changing the runtime chart document.\",\"operationId\":\"chart.document.set\",\"params\":{\"version\":\"0.1.0\",\"kind\":\"bar\",\"source\":{\"kind\":\"derived\"},\"dimensions\":[{\"field\":\"department\"}],\"metrics\":[{\"field\":\"total\",\"aggregation\":\"count\"}]},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2855
3119
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2856
|
-
"contentHash": "
|
|
3120
|
+
"contentHash": "effda98284e7645f53c2b0185b52459adfc18615f590ad19866d62225acb7ef0",
|
|
2857
3121
|
"sourceKind": "component_definition",
|
|
2858
3122
|
"sourceId": "praxis-chart",
|
|
2859
3123
|
"corpusVersion": "1.0.0"
|
|
@@ -2861,9 +3125,9 @@
|
|
|
2861
3125
|
{
|
|
2862
3126
|
"chunkIndex": 2,
|
|
2863
3127
|
"chunkKind": "authoring_manifest",
|
|
2864
|
-
"content": "{\"operationId\":\"chart.type.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3128
|
+
"content": "{\"operationId\":\"chart.type.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set chart type Effects: merge-object. Use a bar chart for employees by department.\",\"scope\":\"global\",\"target\":{\"kind\":\"chartType\",\"resolver\":\"x-ui-chart-kind\",\"required\":false},\"inputContract\":{\"required\":[\"kind\"],\"properties\":[\"kind\",\"orientation\",\"gauge\"],\"semanticTerms\":[\"kind\",\"orientation\",\"gauge\",\"bar\",\"combo\",\"horizontal-bar\",\"line\",\"pie\",\"donut\",\"area\",\"stacked-bar\",\"stacked-area\",\"scatter\",\"funnel\",\"pyramid\",\"treemap\",\"vertical\",\"horizontal\",\"gauge.scale\",\"gauge.scale.min\",\"gauge.scale.max\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"chartDocument.kind\",\"chartDocument.orientation\",\"chartDocument.metrics[]\",\"chartDocument.dimensions[]\",\"chartDocument.gauge.scale\"],\"validators\":[{\"validatorId\":\"chart-type-supported\",\"level\":\"error\",\"code\":\"CHART_TYPE_SUPPORTED\",\"description\":\"Chart kind must be supported by @praxisui/charts.\"},{\"validatorId\":\"chart-type-series-axis-compatible\",\"level\":\"error\",\"code\":\"CHART_TYPE_SERIES_AXIS_COMPATIBLE\",\"description\":\"Chart kind, dimensions, metrics and axes must be compatible.\"},{\"validatorId\":\"category-slice-single-metric\",\"level\":\"error\",\"code\":\"CATEGORY_SLICE_SINGLE_METRIC\",\"description\":\"Pie, donut, funnel, pyramid and treemap charts require exactly one metric.\"},{\"validatorId\":\"combo-minimum-series\",\"level\":\"error\",\"code\":\"COMBO_MINIMUM_SERIES\",\"description\":\"Combo charts require at least two metrics.\"},{\"validatorId\":\"gauge-scalar-contract\",\"level\":\"error\",\"code\":\"GAUGE_SCALAR_CONTRACT\",\"description\":\"Gauge charts require one dimension, exactly one metric and, for praxis.stats, one group-by bucket selected with source.options.limit=1.\"},{\"validatorId\":\"gauge-scale-valid\",\"level\":\"error\",\"code\":\"GAUGE_SCALE_VALID\",\"description\":\"Gauge scale requires finite min and max values with max greater than min; runtime rejects values outside the declared scale without clamping.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-bar-chart\",\"request\":\"Use a bar chart for employees by department.\",\"operationId\":\"chart.type.set\",\"params\":{\"kind\":\"bar\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2865
3129
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2866
|
-
"contentHash": "
|
|
3130
|
+
"contentHash": "29dc0f93641ce56d216bba6e9ba78b3d28fcae012ea50a68d55678eae221bcbf",
|
|
2867
3131
|
"sourceKind": "component_definition",
|
|
2868
3132
|
"sourceId": "praxis-chart",
|
|
2869
3133
|
"corpusVersion": "1.0.0"
|
|
@@ -2871,9 +3135,9 @@
|
|
|
2871
3135
|
{
|
|
2872
3136
|
"chunkIndex": 3,
|
|
2873
3137
|
"chunkKind": "authoring_manifest",
|
|
2874
|
-
"content": "{\"operationId\":\"series.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3138
|
+
"content": "{\"operationId\":\"series.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Add chart series Effects: compile-domain-patch. Add salary as a summed metric.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"series\",\"resolver\":\"x-ui-chart-metric-by-field\",\"required\":false},\"inputContract\":{\"required\":[\"field\"],\"properties\":[\"field\",\"label\",\"aggregation\",\"seriesKind\",\"axis\",\"color\",\"format\",\"afterField\"],\"semanticTerms\":[\"field\",\"label\",\"aggregation\",\"seriesKind\",\"axis\",\"color\",\"format\",\"afterField\",\"sum\",\"avg\",\"min\",\"max\",\"count\",\"distinct-count\",\"bar\",\"line\",\"area\",\"primary\",\"secondary\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"chartDocument.metrics[]\"],\"validators\":[{\"validatorId\":\"series-field-exists\",\"level\":\"error\",\"code\":\"SERIES_FIELD_EXISTS\",\"description\":\"Series field must exist in availableFields or schema context.\"},{\"validatorId\":\"series-field-aggregable\",\"level\":\"error\",\"code\":\"SERIES_FIELD_AGGREGABLE\",\"description\":\"Metric fields must support the requested aggregation.\"},{\"validatorId\":\"series-id-unique\",\"level\":\"error\",\"code\":\"SERIES_ID_UNIQUE\",\"description\":\"Metric/series identity must be stable and unique by field.\"},{\"validatorId\":\"chart-type-series-axis-compatible\",\"level\":\"error\",\"code\":\"CHART_TYPE_SERIES_AXIS_COMPATIBLE\",\"description\":\"Chart kind, dimensions, metrics and axes must be compatible.\"},{\"validatorId\":\"gauge-scalar-contract\",\"level\":\"error\",\"code\":\"GAUGE_SCALAR_CONTRACT\",\"description\":\"Gauge charts require one dimension, exactly one metric and, for praxis.stats, one group-by bucket selected with source.options.limit=1.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-salary-series\",\"request\":\"Add salary as a summed metric.\",\"operationId\":\"series.add\",\"params\":{\"field\":\"salary\",\"aggregation\":\"sum\",\"label\":\"Salary\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2875
3139
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2876
|
-
"contentHash": "
|
|
3140
|
+
"contentHash": "b7e160adb1ffe43130d408e4d68804ad1ee840c0b70a8b0321b2c70f42b49476",
|
|
2877
3141
|
"sourceKind": "component_definition",
|
|
2878
3142
|
"sourceId": "praxis-chart",
|
|
2879
3143
|
"corpusVersion": "1.0.0"
|
|
@@ -2881,9 +3145,9 @@
|
|
|
2881
3145
|
{
|
|
2882
3146
|
"chunkIndex": 4,
|
|
2883
3147
|
"chunkKind": "authoring_manifest",
|
|
2884
|
-
"content": "{\"operationId\":\"series.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3148
|
+
"content": "{\"operationId\":\"series.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remove chart series Effects: remove-by-key. Remove the old cost series. Remove total when more than one chart series resolves to total.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"series\",\"resolver\":\"x-ui-chart-metric-by-field\",\"required\":true},\"inputContract\":{\"required\":[\"field\"],\"properties\":[\"field\",\"replacementField\"],\"semanticTerms\":[\"field\",\"replacementField\"]},\"effects\":[\"remove-by-key\"],\"affectedPaths\":[\"chartDocument.metrics[]\"],\"validators\":[{\"validatorId\":\"series-exists\",\"level\":\"error\",\"code\":\"SERIES_EXISTS\",\"description\":\"Series removal target must exist.\"},{\"validatorId\":\"destructive-series-removal-confirmed\",\"level\":\"error\",\"code\":\"DESTRUCTIVE_SERIES_REMOVAL_CONFIRMED\",\"description\":\"Removing a series requires explicit confirmation.\"},{\"validatorId\":\"chart-keeps-required-metric\",\"level\":\"error\",\"code\":\"CHART_KEEPS_REQUIRED_METRIC\",\"description\":\"A chart cannot be left without required metrics.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\",\"target-series-exists\",\"confirmation-collected\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"remove-old-series\",\"request\":\"Remove the old cost series.\",\"operationId\":\"series.remove\",\"target\":\"cost\",\"params\":{\"field\":\"cost\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-ambiguous-series-target\",\"request\":\"Remove total when more than one chart series resolves to total.\",\"operationId\":\"series.remove\",\"target\":\"total\",\"params\":{\"field\":\"total\"},\"isPositive\":false}]}",
|
|
2885
3149
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2886
|
-
"contentHash": "
|
|
3150
|
+
"contentHash": "dc26a72e6225e6379e7b4421960af7d2351c9d16e9377bb9e45d28d3639faa25",
|
|
2887
3151
|
"sourceKind": "component_definition",
|
|
2888
3152
|
"sourceId": "praxis-chart",
|
|
2889
3153
|
"corpusVersion": "1.0.0"
|
|
@@ -2891,9 +3155,9 @@
|
|
|
2891
3155
|
{
|
|
2892
3156
|
"chunkIndex": 5,
|
|
2893
3157
|
"chunkKind": "authoring_manifest",
|
|
2894
|
-
"content": "{\"operationId\":\"axis.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3158
|
+
"content": "{\"operationId\":\"axis.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure chart axis Effects: compile-domain-patch. Put margin on a secondary axis for the combo chart.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"axis\",\"resolver\":\"x-ui-chart-dimension-or-metric-axis\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"dimensionField\",\"dimensionRole\",\"metricField\",\"metricAxis\",\"orientation\"],\"semanticTerms\":[\"dimensionField\",\"dimensionRole\",\"metricField\",\"metricAxis\",\"orientation\",\"category\",\"series\",\"segment\",\"time\",\"value\",\"primary\",\"secondary\",\"vertical\",\"horizontal\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"chartDocument.dimensions[]\",\"chartDocument.metrics[].axis\",\"chartDocument.orientation\"],\"validators\":[{\"validatorId\":\"axis-field-exists\",\"level\":\"error\",\"code\":\"AXIS_FIELD_EXISTS\",\"description\":\"Axis/dimension fields must exist in availableFields or schema context.\"},{\"validatorId\":\"secondary-axis-combo-only\",\"level\":\"error\",\"code\":\"SECONDARY_AXIS_COMBO_ONLY\",\"description\":\"Secondary axis is supported only for combo charts.\"},{\"validatorId\":\"cartesian-dimension-required\",\"level\":\"error\",\"code\":\"CARTESIAN_DIMENSION_REQUIRED\",\"description\":\"Cartesian charts require at least one dimension.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-secondary-axis\",\"request\":\"Put margin on a secondary axis for the combo chart.\",\"operationId\":\"axis.configure\",\"params\":{\"metricField\":\"margin\",\"metricAxis\":\"secondary\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2895
3159
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2896
|
-
"contentHash": "
|
|
3160
|
+
"contentHash": "705d82719a638f4c1eec06c777fd1c85a477525faae57c2579d23d2436a49222",
|
|
2897
3161
|
"sourceKind": "component_definition",
|
|
2898
3162
|
"sourceId": "praxis-chart",
|
|
2899
3163
|
"corpusVersion": "1.0.0"
|
|
@@ -2901,9 +3165,9 @@
|
|
|
2901
3165
|
{
|
|
2902
3166
|
"chunkIndex": 6,
|
|
2903
3167
|
"chunkKind": "authoring_manifest",
|
|
2904
|
-
"content": "{\"operationId\":\"data.resource.bind\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3168
|
+
"content": "{\"operationId\":\"data.resource.bind\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Bind chart data resource Effects: compile-domain-patch. Bind this chart to payroll stats grouped by department. Compare active employees by department with the previous aligned 30-day period. Use the prompt example text to decide which backend endpoint to call.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"dataBinding\",\"resolver\":\"x-ui-chart-source-and-field-catalog\",\"required\":false},\"inputContract\":{\"required\":[\"sourceKind\"],\"properties\":[\"sourceKind\",\"resource\",\"operation\",\"limit\",\"comparisonPeriod\",\"dimensions\",\"metrics\"],\"semanticTerms\":[\"sourceKind\",\"resource\",\"operation\",\"limit\",\"comparisonPeriod\",\"dimensions\",\"metrics\",\"praxis.stats\",\"derived\",\"group-by\",\"timeseries\",\"distribution\",\"comparison\",\"comparisonPeriod.field\",\"comparisonPeriod.timezone\",\"comparisonPeriod.preset\",\"comparisonPeriod.mode\",\"TODAY\",\"YESTERDAY\",\"LAST_7_DAYS\",\"LAST_30_DAYS\",\"THIS_MONTH\",\"LAST_MONTH\",\"THIS_QUARTER\",\"THIS_YEAR\",\"PREVIOUS_ALIGNED\",\"PREVIOUS_CALENDAR_PERIOD\",\"dimensions.field\",\"dimensions.role\",\"metrics.field\",\"metrics.label\",\"metrics.aggregation\",\"metrics.seriesKind\",\"metrics.axis\",\"metrics.color\",\"metrics.format\",\"metrics.afterField\",\"sum\",\"avg\",\"min\",\"max\",\"count\",\"distinct-count\",\"bar\",\"line\",\"area\",\"primary\",\"secondary\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"chartDocument.source\",\"chartDocument.source.options.limit\",\"chartDocument.source.options.comparisonPeriod\",\"chartDocument.dimensions[]\",\"chartDocument.metrics[]\"],\"validators\":[{\"validatorId\":\"remote-resource-in-api-metadata\",\"level\":\"error\",\"code\":\"REMOTE_RESOURCE_IN_API_METADATA\",\"description\":\"Remote praxis.stats resource must equal a governed root-relative availableResources[].path beginning with exactly one slash; a discovery id is not an executable resource path.\"},{\"validatorId\":\"bound-fields-exist\",\"level\":\"error\",\"code\":\"BOUND_FIELDS_EXIST\",\"description\":\"Bound dimensions and metrics must exist in the capability-backed field context and satisfy its operation, aggregation and distribution-mode eligibility.\"},{\"validatorId\":\"stats-operation-supported\",\"level\":\"error\",\"code\":\"STATS_OPERATION_SUPPORTED\",\"description\":\"Remote datasource operation must be supported by the stats backend.\"},{\"validatorId\":\"chart-type-series-axis-compatible\",\"level\":\"error\",\"code\":\"CHART_TYPE_SERIES_AXIS_COMPATIBLE\",\"description\":\"Chart kind, dimensions, metrics and axes must be compatible.\"},{\"validatorId\":\"comparison-period-complete\",\"level\":\"error\",\"code\":\"COMPARISON_PERIOD_COMPLETE\",\"description\":\"Comparison requires a time-series eligible period field, timezone, preset and mode grounded in the governed resource capabilities.\"},{\"validatorId\":\"comparison-metrics-supported\",\"level\":\"error\",\"code\":\"COMPARISON_METRICS_SUPPORTED\",\"description\":\"Comparison requires unique metrics[] aliases using only COUNT, DISTINCT_COUNT or SUM capabilities; singular metric payloads are not authorable.\"},{\"validatorId\":\"gauge-scalar-contract\",\"level\":\"error\",\"code\":\"GAUGE_SCALAR_CONTRACT\",\"description\":\"Gauge charts require one dimension, exactly one metric and, for praxis.stats, one group-by bucket selected with source.options.limit=1.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"bind-stats-resource\",\"request\":\"Bind this chart to payroll stats grouped by department.\",\"operationId\":\"data.resource.bind\",\"params\":{\"sourceKind\":\"praxis.stats\",\"resource\":\"/api/stats/payroll\",\"operation\":\"group-by\"},\"isPositive\":true},{\"id\":\"bind-comparison-resource\",\"request\":\"Compare active employees by department with the previous aligned 30-day period.\",\"operationId\":\"data.resource.bind\",\"params\":{\"sourceKind\":\"praxis.stats\",\"resource\":\"/api/human-resources/employees\",\"operation\":\"comparison\",\"comparisonPeriod\":{\"field\":\"admissionDate\",\"timezone\":\"America/Sao_Paulo\",\"preset\":\"LAST_30_DAYS\",\"mode\":\"PREVIOUS_ALIGNED\"},\"dimensions\":[{\"field\":\"department\"}],\"metrics\":[{\"field\":\"employeeId\",\"aggregation\":\"distinct-count\"}]},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-prompt-routing\",\"request\":\"Use the prompt example text to decide which backend endpoint to call.\",\"operationId\":\"data.resource.bind\",\"params\":{\"sourceKind\":\"praxis.stats\",\"resource\":\"from prompt example\"},\"isPositive\":false}]}",
|
|
2905
3169
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2906
|
-
"contentHash": "
|
|
3170
|
+
"contentHash": "b1e6b29f787d87defa10adab9c6c24e87b77e9511bc40cb1696f32ae1f933ede",
|
|
2907
3171
|
"sourceKind": "component_definition",
|
|
2908
3172
|
"sourceId": "praxis-chart",
|
|
2909
3173
|
"corpusVersion": "1.0.0"
|
|
@@ -2911,9 +3175,9 @@
|
|
|
2911
3175
|
{
|
|
2912
3176
|
"chunkIndex": 7,
|
|
2913
3177
|
"chunkKind": "authoring_manifest",
|
|
2914
|
-
"content": "{\"operationId\":\"queryContext.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3178
|
+
"content": "{\"operationId\":\"queryContext.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set chart query context Effects: set-value. Limit the chart to active employees and sort by total descending.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"queryContext\",\"resolver\":\"praxis-chart-query-context\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"filters\",\"filterExpression\",\"sort\",\"limit\",\"page\",\"meta\"],\"semanticTerms\":[\"filters\",\"filterExpression\",\"sort\",\"limit\",\"page\",\"meta\"]},\"effects\":[\"set-value\"],\"affectedPaths\":[\"queryContext\"],\"validators\":[{\"validatorId\":\"query-context-structured\",\"level\":\"error\",\"code\":\"QUERY_CONTEXT_STRUCTURED\",\"description\":\"queryContext must use the canonical @praxisui/core structure for filters, filterExpression, sort, limit, page and meta.\"},{\"validatorId\":\"query-context-filter-expression-stats-unsupported\",\"level\":\"error\",\"code\":\"QUERY_CONTEXT_FILTER_EXPRESSION_STATS_UNSUPPORTED\",\"description\":\"praxis.stats currently executes only flat queryContext.filters; governed filterExpression must be preserved for diagnostics and rejected until backend expression support is declared.\"},{\"validatorId\":\"query-context-fields-exist\",\"level\":\"warning\",\"code\":\"QUERY_CONTEXT_FIELDS_EXIST\",\"description\":\"queryContext filter fields should exist in the schema/data context.\"},{\"validatorId\":\"query-context-safe-values\",\"level\":\"error\",\"code\":\"QUERY_CONTEXT_SAFE_VALUES\",\"description\":\"queryContext values must be serializable safe data.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-query-context\",\"request\":\"Limit the chart to active employees and sort by total descending.\",\"operationId\":\"queryContext.set\",\"params\":{\"filters\":{\"status\":\"ACTIVE\"},\"sort\":[\"total,desc\"],\"limit\":10},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2915
3179
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2916
|
-
"contentHash": "
|
|
3180
|
+
"contentHash": "3d8b2cdde8d57dbc0367baa540c0e2759fe8327b10503fe31fd790e3f42dc2f4",
|
|
2917
3181
|
"sourceKind": "component_definition",
|
|
2918
3182
|
"sourceId": "praxis-chart",
|
|
2919
3183
|
"corpusVersion": "1.0.0"
|
|
@@ -2921,9 +3185,9 @@
|
|
|
2921
3185
|
{
|
|
2922
3186
|
"chunkIndex": 8,
|
|
2923
3187
|
"chunkKind": "authoring_manifest",
|
|
2924
|
-
"content": "{\"operationId\":\"
|
|
3188
|
+
"content": "{\"operationId\":\"gauge.scale.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure gauge scale Effects: set-value. Set the gauge scale from zero to one.\",\"scope\":\"layout\",\"target\":{\"kind\":\"gaugeScale\",\"resolver\":\"x-ui-chart-gauge-scale\",\"required\":false},\"inputContract\":{\"required\":[\"min\",\"max\"],\"properties\":[\"min\",\"max\"],\"semanticTerms\":[\"min\",\"max\"]},\"effects\":[\"set-value\"],\"affectedPaths\":[\"chartDocument.gauge.scale\"],\"validators\":[{\"validatorId\":\"gauge-scale-valid\",\"level\":\"error\",\"code\":\"GAUGE_SCALE_VALID\",\"description\":\"Gauge scale requires finite min and max values with max greater than min; runtime rejects values outside the declared scale without clamping.\"},{\"validatorId\":\"gauge-scalar-contract\",\"level\":\"error\",\"code\":\"GAUGE_SCALAR_CONTRACT\",\"description\":\"Gauge charts require one dimension, exactly one metric and, for praxis.stats, one group-by bucket selected with source.options.limit=1.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\",\"chart-kind-gauge\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-gauge-scale\",\"request\":\"Set the gauge scale from zero to one.\",\"operationId\":\"gauge.scale.configure\",\"params\":{\"min\":0,\"max\":1},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2925
3189
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2926
|
-
"contentHash": "
|
|
3190
|
+
"contentHash": "4ee7d826cd9b90e8ced4be5a59cca3137fde20e021c0c82a3ac4a19a6745c148",
|
|
2927
3191
|
"sourceKind": "component_definition",
|
|
2928
3192
|
"sourceId": "praxis-chart",
|
|
2929
3193
|
"corpusVersion": "1.0.0"
|
|
@@ -2931,9 +3195,9 @@
|
|
|
2931
3195
|
{
|
|
2932
3196
|
"chunkIndex": 9,
|
|
2933
3197
|
"chunkKind": "authoring_manifest",
|
|
2934
|
-
"content": "{\"operationId\":\"
|
|
3198
|
+
"content": "{\"operationId\":\"pointClick.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure chart point click Effects: compile-domain-patch.\",\"scope\":\"eventMapping\",\"target\":{\"kind\":\"pointClick\",\"resolver\":\"x-ui-chart-events-point-click\",\"required\":false},\"inputContract\":{\"required\":[\"action\"],\"properties\":[\"action\",\"target\",\"mapping\"],\"semanticTerms\":[\"action\",\"target\",\"mapping\",\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"chartDocument.events.pointClick\"],\"validators\":[{\"validatorId\":\"point-click-action-structured\",\"level\":\"error\",\"code\":\"POINT_CLICK_ACTION_STRUCTURED\",\"description\":\"Configured pointClick actions must be emitted through pointAction while pointClick remains raw point evidence.\"},{\"validatorId\":\"event-target-governed\",\"level\":\"error\",\"code\":\"EVENT_TARGET_GOVERNED\",\"description\":\"Event targets must resolve to exactly one availableTargets[].id and declare the authored event plus action; missing, duplicate or cross-event identities fail closed.\"},{\"validatorId\":\"event-mapping-fields-exist\",\"level\":\"error\",\"code\":\"EVENT_MAPPING_FIELDS_EXIST\",\"description\":\"Event mapping source fields must exist in chart data context; praxis.stats reserves key for bucket identity and label for presentation.\"},{\"validatorId\":\"event-action-supported\",\"level\":\"error\",\"code\":\"EVENT_ACTION_SUPPORTED\",\"description\":\"Event action must be one of the supported structured action kinds.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
2935
3199
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2936
|
-
"contentHash": "
|
|
3200
|
+
"contentHash": "0a0d2b7f843762aad6b2b53ead8a8dfbec3639604c63260a9d92242535751a40",
|
|
2937
3201
|
"sourceKind": "component_definition",
|
|
2938
3202
|
"sourceId": "praxis-chart",
|
|
2939
3203
|
"corpusVersion": "1.0.0"
|
|
@@ -2941,9 +3205,9 @@
|
|
|
2941
3205
|
{
|
|
2942
3206
|
"chunkIndex": 10,
|
|
2943
3207
|
"chunkKind": "authoring_manifest",
|
|
2944
|
-
"content": "{\"operationId\":\"
|
|
3208
|
+
"content": "{\"operationId\":\"crossFilter.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure chart cross-filter Effects: compile-domain-patch. Use selected department to filter the employee table. Use the governed department bucket identity to filter the employee table.\",\"scope\":\"eventMapping\",\"target\":{\"kind\":\"crossFilter\",\"resolver\":\"x-ui-chart-events-cross-filter\",\"required\":false},\"inputContract\":{\"required\":[\"action\"],\"properties\":[\"action\",\"target\",\"mapping\"],\"semanticTerms\":[\"action\",\"target\",\"mapping\",\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"chartDocument.events.crossFilter\"],\"validators\":[{\"validatorId\":\"cross-filter-output-structured\",\"level\":\"error\",\"code\":\"CROSS_FILTER_OUTPUT_STRUCTURED\",\"description\":\"Cross-filter output must be structured as query-context filters.\"},{\"validatorId\":\"event-target-governed\",\"level\":\"error\",\"code\":\"EVENT_TARGET_GOVERNED\",\"description\":\"Event targets must resolve to exactly one availableTargets[].id and declare the authored event plus action; missing, duplicate or cross-event identities fail closed.\"},{\"validatorId\":\"event-mapping-fields-exist\",\"level\":\"error\",\"code\":\"EVENT_MAPPING_FIELDS_EXIST\",\"description\":\"Event mapping source fields must exist in chart data context; praxis.stats reserves key for bucket identity and label for presentation.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-cross-filter\",\"request\":\"Use selected department to filter the employee table.\",\"operationId\":\"crossFilter.configure\",\"params\":{\"action\":\"filter-widget\",\"target\":\"employeesTable\",\"mapping\":{\"department\":\"department\"}},\"isPositive\":true},{\"id\":\"configure-stats-key-cross-filter\",\"request\":\"Use the governed department bucket identity to filter the employee table.\",\"operationId\":\"crossFilter.configure\",\"params\":{\"action\":\"filter-widget\",\"target\":\"employeesTable\",\"mapping\":{\"key\":\"departmentIdsIn\"}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2945
3209
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2946
|
-
"contentHash": "
|
|
3210
|
+
"contentHash": "dc25ff8754966d64e2041b209e28027d3defaff1f054ee2fab453a7ed8ae6c4e",
|
|
2947
3211
|
"sourceKind": "component_definition",
|
|
2948
3212
|
"sourceId": "praxis-chart",
|
|
2949
3213
|
"corpusVersion": "1.0.0"
|
|
@@ -2951,9 +3215,9 @@
|
|
|
2951
3215
|
{
|
|
2952
3216
|
"chunkIndex": 11,
|
|
2953
3217
|
"chunkKind": "authoring_manifest",
|
|
2954
|
-
"content": "{\"operationId\":\"
|
|
3218
|
+
"content": "{\"operationId\":\"drilldown.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure chart drilldown Effects: compile-domain-patch. Open the department detail when a point is clicked. Navigate to javascript:alert(1) on drilldown.\",\"scope\":\"eventMapping\",\"target\":{\"kind\":\"drilldown\",\"resolver\":\"x-ui-chart-events-drill-down\",\"required\":false},\"inputContract\":{\"required\":[\"action\"],\"properties\":[\"action\",\"target\",\"mapping\"],\"semanticTerms\":[\"action\",\"target\",\"mapping\",\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"chartDocument.events.drillDown\"],\"validators\":[{\"validatorId\":\"drilldown-target-governed\",\"level\":\"error\",\"code\":\"DRILLDOWN_TARGET_GOVERNED\",\"description\":\"Drilldown target must be a governed route or widget target.\"},{\"validatorId\":\"event-mapping-fields-exist\",\"level\":\"error\",\"code\":\"EVENT_MAPPING_FIELDS_EXIST\",\"description\":\"Event mapping source fields must exist in chart data context; praxis.stats reserves key for bucket identity and label for presentation.\"},{\"validatorId\":\"event-action-supported\",\"level\":\"error\",\"code\":\"EVENT_ACTION_SUPPORTED\",\"description\":\"Event action must be one of the supported structured action kinds.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-drilldown\",\"request\":\"Open the department detail when a point is clicked.\",\"operationId\":\"drilldown.configure\",\"params\":{\"action\":\"navigate\",\"target\":\"/departments/detail\",\"mapping\":{\"department\":\"departmentId\"}},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-unsafe-target\",\"request\":\"Navigate to javascript:alert(1) on drilldown.\",\"operationId\":\"drilldown.configure\",\"params\":{\"event\":\"drillDown\",\"action\":\"navigate\",\"target\":\"javascript:alert(1)\"},\"isPositive\":false}]}",
|
|
2955
3219
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2956
|
-
"contentHash": "
|
|
3220
|
+
"contentHash": "f5ee289805282d79fb872970622eb5f3efd778e472d0feba8120fd6ac6aec546",
|
|
2957
3221
|
"sourceKind": "component_definition",
|
|
2958
3222
|
"sourceId": "praxis-chart",
|
|
2959
3223
|
"corpusVersion": "1.0.0"
|
|
@@ -2961,9 +3225,9 @@
|
|
|
2961
3225
|
{
|
|
2962
3226
|
"chunkIndex": 12,
|
|
2963
3227
|
"chunkKind": "authoring_manifest",
|
|
2964
|
-
"content": "{\"operationId\":\"
|
|
3228
|
+
"content": "{\"operationId\":\"selection.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure chart selection Effects: compile-domain-patch. Emit selected department as a structured selection event.\",\"scope\":\"selection\",\"target\":{\"kind\":\"selection\",\"resolver\":\"x-ui-chart-events-selection-change\",\"required\":false},\"inputContract\":{\"required\":[\"action\"],\"properties\":[\"action\",\"target\",\"mapping\"],\"semanticTerms\":[\"action\",\"target\",\"mapping\",\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"chartDocument.events.selectionChange\"],\"validators\":[{\"validatorId\":\"selection-output-structured\",\"level\":\"error\",\"code\":\"SELECTION_OUTPUT_STRUCTURED\",\"description\":\"Selection output must resolve selected point filters deterministically.\"},{\"validatorId\":\"event-target-governed\",\"level\":\"error\",\"code\":\"EVENT_TARGET_GOVERNED\",\"description\":\"Event targets must resolve to exactly one availableTargets[].id and declare the authored event plus action; missing, duplicate or cross-event identities fail closed.\"},{\"validatorId\":\"event-mapping-fields-exist\",\"level\":\"error\",\"code\":\"EVENT_MAPPING_FIELDS_EXIST\",\"description\":\"Event mapping source fields must exist in chart data context; praxis.stats reserves key for bucket identity and label for presentation.\"},{\"validatorId\":\"event-action-supported\",\"level\":\"error\",\"code\":\"EVENT_ACTION_SUPPORTED\",\"description\":\"Event action must be one of the supported structured action kinds.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-selection\",\"request\":\"Emit selected department as a structured selection event.\",\"operationId\":\"selection.configure\",\"params\":{\"action\":\"emit\",\"mapping\":{\"department\":\"department\"}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2965
3229
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2966
|
-
"contentHash": "
|
|
3230
|
+
"contentHash": "286bd609ffa24943ffc7c74a39bad7fc50a35d60c16558c3dc512826877a4fdd",
|
|
2967
3231
|
"sourceKind": "component_definition",
|
|
2968
3232
|
"sourceId": "praxis-chart",
|
|
2969
3233
|
"corpusVersion": "1.0.0"
|
|
@@ -2971,9 +3235,9 @@
|
|
|
2971
3235
|
{
|
|
2972
3236
|
"chunkIndex": 13,
|
|
2973
3237
|
"chunkKind": "authoring_manifest",
|
|
2974
|
-
"content": "{\"operationId\":\"
|
|
3238
|
+
"content": "{\"operationId\":\"legend.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure chart legend Effects: set-value. Show the legend.\",\"scope\":\"skin\",\"target\":{\"kind\":\"legend\",\"resolver\":\"x-ui-chart-legend-feature\",\"required\":false},\"inputContract\":{\"required\":[\"enabled\"],\"properties\":[\"enabled\"],\"semanticTerms\":[\"enabled\"]},\"effects\":[\"set-value\"],\"affectedPaths\":[\"chartDocument.legend\"],\"validators\":[{\"validatorId\":\"feature-toggle-valid\",\"level\":\"error\",\"code\":\"FEATURE_TOGGLE_VALID\",\"description\":\"Legend and tooltip feature values must be boolean or toggleable feature objects.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"toggle-legend\",\"request\":\"Show the legend.\",\"operationId\":\"legend.configure\",\"params\":{\"enabled\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2975
3239
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2976
|
-
"contentHash": "
|
|
3240
|
+
"contentHash": "5042304daa3c0eae393bc60045ff64b862ebd573e20ee81fa8dd273619fbb866",
|
|
2977
3241
|
"sourceKind": "component_definition",
|
|
2978
3242
|
"sourceId": "praxis-chart",
|
|
2979
3243
|
"corpusVersion": "1.0.0"
|
|
@@ -2981,9 +3245,9 @@
|
|
|
2981
3245
|
{
|
|
2982
3246
|
"chunkIndex": 14,
|
|
2983
3247
|
"chunkKind": "authoring_manifest",
|
|
2984
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3248
|
+
"content": "{\"operationId\":\"tooltip.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure chart tooltip Effects: set-value. Disable tooltips.\",\"scope\":\"skin\",\"target\":{\"kind\":\"tooltip\",\"resolver\":\"x-ui-chart-tooltip-feature\",\"required\":false},\"inputContract\":{\"required\":[\"enabled\"],\"properties\":[\"enabled\"],\"semanticTerms\":[\"enabled\"]},\"effects\":[\"set-value\"],\"affectedPaths\":[\"chartDocument.tooltip\"],\"validators\":[{\"validatorId\":\"feature-toggle-valid\",\"level\":\"error\",\"code\":\"FEATURE_TOGGLE_VALID\",\"description\":\"Legend and tooltip feature values must be boolean or toggleable feature objects.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"toggle-tooltip\",\"request\":\"Disable tooltips.\",\"operationId\":\"tooltip.configure\",\"params\":{\"enabled\":false},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2985
3249
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2986
|
-
"contentHash": "
|
|
3250
|
+
"contentHash": "ab1d0b0419b046e8fdf76a016d2c2c1b4a525bbf43865bc7d76305a26635d4b1",
|
|
2987
3251
|
"sourceKind": "component_definition",
|
|
2988
3252
|
"sourceId": "praxis-chart",
|
|
2989
3253
|
"corpusVersion": "1.0.0"
|
|
@@ -2991,9 +3255,9 @@
|
|
|
2991
3255
|
{
|
|
2992
3256
|
"chunkIndex": 15,
|
|
2993
3257
|
"chunkKind": "authoring_manifest",
|
|
2994
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3258
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"identity\"}",
|
|
2995
3259
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2996
|
-
"contentHash": "
|
|
3260
|
+
"contentHash": "a4ccd766fb453b7909cbc0b2a7ffebb583bc38be6c3772a658c9d147b09373a3",
|
|
2997
3261
|
"sourceKind": "component_definition",
|
|
2998
3262
|
"sourceId": "praxis-chart",
|
|
2999
3263
|
"corpusVersion": "1.0.0"
|
|
@@ -3001,9 +3265,9 @@
|
|
|
3001
3265
|
{
|
|
3002
3266
|
"chunkIndex": 16,
|
|
3003
3267
|
"chunkKind": "authoring_manifest",
|
|
3004
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3268
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"chartDocument\",\"type\":\"PraxisXUiChartContract | null\",\"description\":\"Canonical x-ui.chart document used as the authoring source of truth.\"},{\"name\":\"config\",\"type\":\"PraxisChartConfig\",\"description\":\"Runtime chart configuration mapped from or supplied beside the canonical chart document.\"},{\"name\":\"queryContext\",\"type\":\"PraxisChartQueryContext | null\",\"description\":\"Canonical @praxisui/core query context observed by remote datasource requests; flat filters execute in praxis.stats and governed filterExpression is preserved but rejected until stats expression support is proven.\"},{\"name\":\"remoteDataResolver\",\"type\":\"PraxisChartRemoteDataResolver | null\",\"description\":\"Host-governed remote row resolver for integrations outside the default praxis.stats client.\"},{\"name\":\"availableResources\",\"type\":\"ChartEditorResourceOption[]\",\"description\":\"Transient authoring catalog: id is the stable /schemas/catalog discovery identity, while path is the governed root-relative operational value persisted to chartDocument.source.resource.\"},{\"name\":\"availableFields\",\"type\":\"ChartEditorFieldOption[]\",\"description\":\"Transient capability-backed field catalog. operations, aggregations and distributionModes declare exact group-by, timeseries, distribution/terms and distribution/histogram eligibility.\"},{\"name\":\"availableTargets\",\"type\":\"ChartEditorTargetOption[]\",\"description\":\"Transient visual-authoring targets derived from existing top-level composition links to public, non-deprecated widget ports or explicitly writable declared page state; id is the unique authoring identity and events[] declares the exact structured Chart events authorized by compatible links. Raw pointClick evidence never authorizes events.pointClick, which is emitted through pointAction. Local transform.output semantic-kind inspection does not replace a Core-validated transform-output projection (P2), and the visual catalog does not yet publish the target input-schema/port projection required for end-to-end mapping validation.\"}]}",
|
|
3005
3269
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3006
|
-
"contentHash": "
|
|
3270
|
+
"contentHash": "05a92054985fbf50f143b5066dcfda9d19df80139fda418c18cc33f5aed231a8",
|
|
3007
3271
|
"sourceKind": "component_definition",
|
|
3008
3272
|
"sourceId": "praxis-chart",
|
|
3009
3273
|
"corpusVersion": "1.0.0"
|
|
@@ -3011,9 +3275,9 @@
|
|
|
3011
3275
|
{
|
|
3012
3276
|
"chunkIndex": 17,
|
|
3013
3277
|
"chunkKind": "authoring_manifest",
|
|
3014
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3278
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"chartType\",\"resolver\":\"x-ui-chart-kind\",\"description\":\"Canonical `kind` field in PraxisXUiChartContract.\"},{\"kind\":\"series\",\"resolver\":\"x-ui-chart-metric-by-field\",\"description\":\"Metric-backed series definition in `metrics[]`, keyed by field.\"},{\"kind\":\"axis\",\"resolver\":\"x-ui-chart-dimension-or-metric-axis\",\"description\":\"Dimension role, metric axis and chart orientation semantics.\"},{\"kind\":\"dataBinding\",\"resolver\":\"x-ui-chart-source-and-field-catalog\",\"description\":\"Source, dimensions, metrics and resource/field bindings.\"},{\"kind\":\"queryContext\",\"resolver\":\"praxis-chart-query-context\",\"description\":\"Runtime @praxisui/core queryContext contract for filters, filterExpression, sort, limit, page and governance metadata.\"},{\"kind\":\"pointClick\",\"resolver\":\"x-ui-chart-events-point-click\",\"description\":\"Raw pointClick evidence plus a separate pointAction output for configured pointClick actions.\"},{\"kind\":\"crossFilter\",\"resolver\":\"x-ui-chart-events-cross-filter\",\"description\":\"Cross-filter event mapping emitted as structured query-context filters.\"},{\"kind\":\"drilldown\",\"resolver\":\"x-ui-chart-events-drill-down\",\"description\":\"Drilldown event mapping and governed target.\"},{\"kind\":\"selection\",\"resolver\":\"x-ui-chart-events-selection-change\",\"description\":\"Single-point selection event enablement and mapping semantics; toggle and multi-select are intentionally not advertised.\"},{\"kind\":\"legend\",\"resolver\":\"x-ui-chart-legend-feature\",\"description\":\"Legend visibility through boolean or toggleable feature object.\"},{\"kind\":\"tooltip\",\"resolver\":\"x-ui-chart-tooltip-feature\",\"description\":\"Tooltip visibility through boolean or toggleable feature object.\"},{\"kind\":\"gaugeScale\",\"resolver\":\"x-ui-chart-gauge-scale\",\"description\":\"Canonical scalar gauge scale at `chartDocument.gauge.scale`, with finite `min` and `max` bounds.\"}]}",
|
|
3015
3279
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3016
|
-
"contentHash": "
|
|
3280
|
+
"contentHash": "58c72862bbadde3633d00198f667e23cb278d55e8b38f2e08128a024b4d0eb57",
|
|
3017
3281
|
"sourceKind": "component_definition",
|
|
3018
3282
|
"sourceId": "praxis-chart",
|
|
3019
3283
|
"corpusVersion": "1.0.0"
|
|
@@ -3021,9 +3285,9 @@
|
|
|
3021
3285
|
{
|
|
3022
3286
|
"chunkIndex": 18,
|
|
3023
3287
|
"chunkKind": "authoring_manifest",
|
|
3024
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3288
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"chart.document.set\",\"title\":\"Set chart document\",\"scope\":\"global\",\"targetKind\":\"dataBinding\",\"target\":{\"kind\":\"dataBinding\",\"resolver\":\"x-ui-chart-document-root\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"version\",\"kind\",\"source\"],\"allOf\":[{\"if\":{\"properties\":{\"kind\":{\"const\":\"scatter\"}},\"required\":[\"kind\"]},\"then\":{\"required\":[\"dimensions\",\"metrics\"],\"properties\":{\"dimensions\":{\"type\":\"array\",\"minItems\":1},\"metrics\":{\"type\":\"array\",\"minItems\":1,\"maxItems\":2}}}},{\"if\":{\"properties\":{\"kind\":{\"const\":\"gauge\"}},\"required\":[\"kind\"]},\"then\":{\"required\":[\"dimensions\",\"metrics\",\"gauge\"],\"properties\":{\"dimensions\":{\"type\":\"array\",\"minItems\":1},\"metrics\":{\"type\":\"array\",\"minItems\":1,\"maxItems\":1},\"gauge\":{\"type\":\"object\",\"required\":[\"scale\"],\"properties\":{\"scale\":{\"type\":\"object\",\"required\":[\"min\",\"max\"],\"properties\":{\"min\":{\"type\":\"number\"},\"max\":{\"type\":\"number\"}}}}}}}},{\"if\":{\"properties\":{\"kind\":{\"const\":\"gauge\"},\"source\":{\"properties\":{\"kind\":{\"const\":\"praxis.stats\"}},\"required\":[\"kind\"]}},\"required\":[\"kind\",\"source\"]},\"then\":{\"properties\":{\"source\":{\"required\":[\"operation\",\"options\"],\"properties\":{\"operation\":{\"const\":\"group-by\"},\"options\":{\"type\":\"object\",\"required\":[\"limit\"],\"properties\":{\"limit\":{\"const\":1}}}}}}}}],\"properties\":{\"version\":{\"const\":\"0.1.0\"},\"kind\":{\"enum\":[\"bar\",\"combo\",\"horizontal-bar\",\"line\",\"pie\",\"donut\",\"area\",\"stacked-bar\",\"stacked-area\",\"scatter\",\"funnel\",\"pyramid\",\"treemap\",\"gauge\"]},\"chartId\":{\"type\":\"string\"},\"title\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"subtitle\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"source\":{\"type\":\"object\",\"required\":[\"kind\"],\"properties\":{\"kind\":{\"enum\":[\"praxis.stats\",\"derived\"]},\"resource\":{\"type\":\"string\"},\"operation\":{\"enum\":[\"group-by\",\"timeseries\",\"distribution\",\"comparison\"]},\"options\":{\"type\":\"object\",\"properties\":{\"comparisonPeriod\":{\"type\":\"object\",\"required\":[\"field\",\"timezone\",\"preset\",\"mode\"],\"properties\":{\"field\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"},\"preset\":{\"enum\":[\"TODAY\",\"YESTERDAY\",\"LAST_7_DAYS\",\"LAST_30_DAYS\",\"THIS_MONTH\",\"LAST_MONTH\",\"THIS_QUARTER\",\"THIS_YEAR\"]},\"mode\":{\"enum\":[\"PREVIOUS_ALIGNED\",\"PREVIOUS_CALENDAR_PERIOD\"]}}}}}}},\"dimensions\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"metrics\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"gauge\":{\"type\":\"object\",\"required\":[\"scale\"],\"properties\":{\"scale\":{\"type\":\"object\",\"required\":[\"min\",\"max\"],\"properties\":{\"min\":{\"type\":\"number\"},\"max\":{\"type\":\"number\"}}}}},\"events\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"chartDocument\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"chart-document-shape\",\"chart-version-supported\",\"chart-type-series-axis-compatible\",\"gauge-scalar-contract\",\"gauge-scale-valid\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"chart.type.set\",\"title\":\"Set chart type\",\"scope\":\"global\",\"targetKind\":\"chartType\",\"target\":{\"kind\":\"chartType\",\"resolver\":\"x-ui-chart-kind\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"kind\"],\"allOf\":[{\"if\":{\"properties\":{\"kind\":{\"const\":\"gauge\"}},\"required\":[\"kind\"]},\"then\":{\"required\":[\"gauge\"]}}],\"properties\":{\"kind\":{\"enum\":[\"bar\",\"combo\",\"horizontal-bar\",\"line\",\"pie\",\"donut\",\"area\",\"stacked-bar\",\"stacked-area\",\"scatter\",\"funnel\",\"pyramid\",\"treemap\",\"gauge\"]},\"orientation\":{\"enum\":[\"vertical\",\"horizontal\"]},\"gauge\":{\"type\":\"object\",\"required\":[\"scale\"],\"properties\":{\"scale\":{\"type\":\"object\",\"required\":[\"min\",\"max\"],\"properties\":{\"min\":{\"type\":\"number\"},\"max\":{\"type\":\"number\"}}}}}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"chartDocument\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"chart-type-supported\",\"chart-type-series-axis-compatible\",\"category-slice-single-metric\",\"combo-minimum-series\",\"gauge-scalar-contract\",\"gauge-scale-valid\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.kind\",\"chartDocument.orientation\",\"chartDocument.metrics[]\",\"chartDocument.dimensions[]\",\"chartDocument.gauge.scale\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"series.add\",\"title\":\"Add chart series\",\"scope\":\"dataBinding\",\"targetKind\":\"series\",\"target\":{\"kind\":\"series\",\"resolver\":\"x-ui-chart-metric-by-field\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"field\"],\"properties\":{\"field\":{\"type\":\"string\"},\"label\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"aggregation\":{\"enum\":[\"sum\",\"avg\",\"min\",\"max\",\"count\",\"distinct-count\"]},\"seriesKind\":{\"enum\":[\"bar\",\"line\",\"area\"]},\"axis\":{\"enum\":[\"primary\",\"secondary\"]},\"color\":{\"type\":\"string\"},\"format\":{\"type\":\"string\"},\"afterField\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"chart-series-add\",\"handlerContract\":{\"reads\":[\"chartDocument.kind\",\"chartDocument.metrics[]\",\"availableFields[]\"],\"writes\":[\"chartDocument.metrics[]\"],\"identityKeys\":[\"chartDocument.metrics[].field\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"field\"],\"properties\":{\"field\":{\"type\":\"string\"},\"label\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"aggregation\":{\"enum\":[\"sum\",\"avg\",\"min\",\"max\",\"count\",\"distinct-count\"]},\"seriesKind\":{\"enum\":[\"bar\",\"line\",\"area\"]},\"axis\":{\"enum\":[\"primary\",\"secondary\"]},\"color\":{\"type\":\"string\"},\"format\":{\"type\":\"string\"},\"afterField\":{\"type\":\"string\"}}},\"failureModes\":[\"field-not-in-catalog\",\"duplicate-series-field\",\"aggregation-not-supported\",\"chart-type-series-incompatible\"],\"description\":\"Adds a metric-backed series by semantic field, validating it against availableFields and chart kind compatibility before patching metrics[]. Scatter accepts at most two ordered metrics, mapped to X and Y in the dual-measure mode.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"series-field-exists\",\"series-field-aggregable\",\"series-id-unique\",\"chart-type-series-axis-compatible\",\"gauge-scalar-contract\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.metrics[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"series.remove\",\"title\":\"Remove chart series\",\"scope\":\"dataBinding\",\"targetKind\":\"series\",\"target\":{\"kind\":\"series\",\"resolver\":\"x-ui-chart-metric-by-field\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"field\"],\"properties\":{\"field\":{\"type\":\"string\"},\"replacementField\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"chartDocument.metrics[]\",\"key\":\"field\"}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"series-exists\",\"destructive-series-removal-confirmed\",\"chart-keeps-required-metric\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.metrics[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-series-exists\",\"confirmation-collected\"]}]}",
|
|
3025
3289
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3026
|
-
"contentHash": "
|
|
3290
|
+
"contentHash": "6e5bac49df69a4a4c878b10f2dc2ae184dfecd36d2aa2850febbf1339fdbcd60",
|
|
3027
3291
|
"sourceKind": "component_definition",
|
|
3028
3292
|
"sourceId": "praxis-chart",
|
|
3029
3293
|
"corpusVersion": "1.0.0"
|
|
@@ -3031,9 +3295,9 @@
|
|
|
3031
3295
|
{
|
|
3032
3296
|
"chunkIndex": 19,
|
|
3033
3297
|
"chunkKind": "authoring_manifest",
|
|
3034
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3298
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"axis.configure\",\"title\":\"Configure chart axis\",\"scope\":\"dataBinding\",\"targetKind\":\"axis\",\"target\":{\"kind\":\"axis\",\"resolver\":\"x-ui-chart-dimension-or-metric-axis\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"dimensionField\":{\"type\":\"string\"},\"dimensionRole\":{\"enum\":[\"category\",\"series\",\"segment\",\"time\",\"value\"]},\"metricField\":{\"type\":\"string\"},\"metricAxis\":{\"enum\":[\"primary\",\"secondary\"]},\"orientation\":{\"enum\":[\"vertical\",\"horizontal\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"chart-axis-configure\",\"handlerContract\":{\"reads\":[\"chartDocument.kind\",\"chartDocument.dimensions[]\",\"chartDocument.metrics[]\",\"availableFields[]\"],\"writes\":[\"chartDocument.dimensions[]\",\"chartDocument.metrics[]\",\"chartDocument.orientation\"],\"identityKeys\":[\"chartDocument.dimensions[].field\",\"chartDocument.metrics[].field\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"dimensionField\":{\"type\":\"string\"},\"dimensionRole\":{\"enum\":[\"category\",\"series\",\"segment\",\"time\",\"value\"]},\"metricField\":{\"type\":\"string\"},\"metricAxis\":{\"enum\":[\"primary\",\"secondary\"]},\"orientation\":{\"enum\":[\"vertical\",\"horizontal\"]}}},\"failureModes\":[\"field-not-in-catalog\",\"secondary-axis-non-combo\",\"missing-required-dimension\",\"axis-role-incompatible\"],\"description\":\"Configures dimensions and metric axes using semantic fields, preserving combo-only secondary axis constraints.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"axis-field-exists\",\"secondary-axis-combo-only\",\"cartesian-dimension-required\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.dimensions[]\",\"chartDocument.metrics[].axis\",\"chartDocument.orientation\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"data.resource.bind\",\"title\":\"Bind chart data resource\",\"scope\":\"dataBinding\",\"targetKind\":\"dataBinding\",\"target\":{\"kind\":\"dataBinding\",\"resolver\":\"x-ui-chart-source-and-field-catalog\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"sourceKind\"],\"properties\":{\"sourceKind\":{\"enum\":[\"praxis.stats\",\"derived\"]},\"resource\":{\"type\":\"string\",\"pattern\":\"^/(?!/)\"},\"operation\":{\"enum\":[\"group-by\",\"timeseries\",\"distribution\",\"comparison\"]},\"limit\":{\"type\":\"integer\",\"minimum\":1},\"comparisonPeriod\":{\"type\":\"object\",\"required\":[\"field\",\"timezone\",\"preset\",\"mode\"],\"properties\":{\"field\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"},\"preset\":{\"enum\":[\"TODAY\",\"YESTERDAY\",\"LAST_7_DAYS\",\"LAST_30_DAYS\",\"THIS_MONTH\",\"LAST_MONTH\",\"THIS_QUARTER\",\"THIS_YEAR\"]},\"mode\":{\"enum\":[\"PREVIOUS_ALIGNED\",\"PREVIOUS_CALENDAR_PERIOD\"]}}},\"dimensions\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"field\"],\"properties\":{\"field\":{\"type\":\"string\"},\"role\":{\"type\":\"string\"}}}},\"metrics\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"field\"],\"properties\":{\"field\":{\"type\":\"string\"},\"label\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"object\"}]},\"aggregation\":{\"enum\":[\"sum\",\"avg\",\"min\",\"max\",\"count\",\"distinct-count\"]},\"seriesKind\":{\"enum\":[\"bar\",\"line\",\"area\"]},\"axis\":{\"enum\":[\"primary\",\"secondary\"]},\"color\":{\"type\":\"string\"},\"format\":{\"type\":\"string\"},\"afterField\":{\"type\":\"string\"}}}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"chart-data-resource-bind\",\"handlerContract\":{\"reads\":[\"availableResources[]\",\"availableFields[]\",\"chartDocument.source\",\"chartDocument.source.options.limit\",\"chartDocument.dimensions[]\",\"chartDocument.metrics[]\"],\"writes\":[\"chartDocument.source\",\"chartDocument.source.options.limit\",\"chartDocument.source.options.comparisonPeriod\",\"chartDocument.dimensions[]\",\"chartDocument.metrics[]\"],\"identityKeys\":[\"availableResources[].path\",\"availableFields[].field\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"sourceKind\"],\"properties\":{\"sourceKind\":{\"enum\":[\"praxis.stats\",\"derived\"]},\"resource\":{\"type\":\"string\",\"pattern\":\"^/(?!/)\"},\"operation\":{\"enum\":[\"group-by\",\"timeseries\",\"distribution\",\"comparison\"]},\"limit\":{\"type\":\"integer\",\"minimum\":1},\"comparisonPeriod\":{\"type\":\"object\",\"required\":[\"field\",\"timezone\",\"preset\",\"mode\"],\"properties\":{\"field\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"},\"preset\":{\"enum\":[\"TODAY\",\"YESTERDAY\",\"LAST_7_DAYS\",\"LAST_30_DAYS\",\"THIS_MONTH\",\"LAST_MONTH\",\"THIS_QUARTER\",\"THIS_YEAR\"]},\"mode\":{\"enum\":[\"PREVIOUS_ALIGNED\",\"PREVIOUS_CALENDAR_PERIOD\"]}}},\"dimensions\":{\"type\":\"array\"},\"metrics\":{\"type\":\"array\"}}},\"failureModes\":[\"resource-not-in-api-metadata\",\"field-not-in-schema\",\"stats-operation-not-supported\",\"gauge-limit-required\",\"comparison-period-incomplete\",\"comparison-metric-unsupported\",\"remote-binding-incomplete\"],\"description\":\"Binds a derived or praxis.stats source using governed resource, capability and field catalogs. For praxis.stats, availableResources[].id is discovery-only: validation requires the matching availableResources[].path and compilation persists that path. Gauge bindings preserve the canonical scalar limit; comparison requires one canonical operation, metrics[] and an eligible period field.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"remote-resource-in-api-metadata\",\"bound-fields-exist\",\"stats-operation-supported\",\"chart-type-series-axis-compatible\",\"comparison-period-complete\",\"comparison-metrics-supported\",\"gauge-scalar-contract\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.source\",\"chartDocument.source.options.limit\",\"chartDocument.source.options.comparisonPeriod\",\"chartDocument.dimensions[]\",\"chartDocument.metrics[]\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"queryContext.set\",\"title\":\"Set chart query context\",\"scope\":\"dataBinding\",\"targetKind\":\"queryContext\",\"target\":{\"kind\":\"queryContext\",\"resolver\":\"praxis-chart-query-context\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"filters\":{\"type\":\"object\"},\"filterExpression\":{\"type\":\"object\"},\"sort\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"limit\":{\"type\":\"number\"},\"page\":{\"type\":\"object\"},\"meta\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"queryContext\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"query-context-structured\",\"query-context-filter-expression-stats-unsupported\",\"query-context-fields-exist\",\"query-context-safe-values\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"queryContext\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"gauge.scale.configure\",\"title\":\"Configure gauge scale\",\"scope\":\"layout\",\"targetKind\":\"gaugeScale\",\"target\":{\"kind\":\"gaugeScale\",\"resolver\":\"x-ui-chart-gauge-scale\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"min\",\"max\"],\"properties\":{\"min\":{\"type\":\"number\"},\"max\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"chartDocument.gauge.scale\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"gauge-scale-valid\",\"gauge-scalar-contract\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.gauge.scale\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"chart-kind-gauge\"]}]}",
|
|
3035
3299
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3036
|
-
"contentHash": "
|
|
3300
|
+
"contentHash": "f8d754acb8de75e8f2ee643d176b3a02d502f9e488c6192ea7f714d321c21fdc",
|
|
3037
3301
|
"sourceKind": "component_definition",
|
|
3038
3302
|
"sourceId": "praxis-chart",
|
|
3039
3303
|
"corpusVersion": "1.0.0"
|
|
@@ -3041,9 +3305,9 @@
|
|
|
3041
3305
|
{
|
|
3042
3306
|
"chunkIndex": 20,
|
|
3043
3307
|
"chunkKind": "authoring_manifest",
|
|
3044
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3308
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"pointClick.configure\",\"title\":\"Configure chart point click\",\"scope\":\"eventMapping\",\"targetKind\":\"pointClick\",\"target\":{\"kind\":\"pointClick\",\"resolver\":\"x-ui-chart-events-point-click\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"action\"],\"properties\":{\"action\":{\"enum\":[\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"target\":{\"type\":\"string\"},\"mapping\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"chart-event-point-click-configure\",\"handlerContract\":{\"reads\":[\"chartDocument.events.pointClick\",\"chartDocument.dimensions[]\",\"availableTargets[]\"],\"writes\":[\"chartDocument.events.pointClick\"],\"identityKeys\":[\"availableTargets[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"action\"],\"properties\":{\"action\":{\"enum\":[\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"target\":{\"type\":\"string\"},\"mapping\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}},\"failureModes\":[\"target-not-in-catalog\",\"mapping-source-field-missing\",\"mapping-target-invalid\",\"unsafe-event-action\"],\"description\":\"Configures pointClick through the pointAction output while keeping pointClick as raw point evidence.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"point-click-action-structured\",\"event-target-governed\",\"event-mapping-fields-exist\",\"event-action-supported\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.events.pointClick\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"crossFilter.configure\",\"title\":\"Configure chart cross-filter\",\"scope\":\"eventMapping\",\"targetKind\":\"crossFilter\",\"target\":{\"kind\":\"crossFilter\",\"resolver\":\"x-ui-chart-events-cross-filter\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"action\"],\"properties\":{\"action\":{\"enum\":[\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"target\":{\"type\":\"string\"},\"mapping\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"chart-event-cross-filter-configure\",\"handlerContract\":{\"reads\":[\"chartDocument.events.crossFilter\",\"chartDocument.dimensions[]\",\"availableTargets[]\"],\"writes\":[\"chartDocument.events.crossFilter\"],\"identityKeys\":[\"availableTargets[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"action\"],\"properties\":{\"action\":{\"enum\":[\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"target\":{\"type\":\"string\"},\"mapping\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}},\"failureModes\":[\"target-not-in-catalog\",\"mapping-source-field-missing\",\"mapping-target-invalid\",\"unsafe-event-action\"],\"description\":\"Configures crossFilter as a structured event action emitted through the crossFilter output with safe query-context filters to a governed target. For praxis.stats rows, key is governed bucket identity and label is presentation evidence; mappings may use key when the target schema accepts that identity.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"cross-filter-output-structured\",\"event-target-governed\",\"event-mapping-fields-exist\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.events.crossFilter\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"drilldown.configure\",\"title\":\"Configure chart drilldown\",\"scope\":\"eventMapping\",\"targetKind\":\"drilldown\",\"target\":{\"kind\":\"drilldown\",\"resolver\":\"x-ui-chart-events-drill-down\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"action\"],\"properties\":{\"action\":{\"enum\":[\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"target\":{\"type\":\"string\"},\"mapping\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"chart-event-drilldown-configure\",\"handlerContract\":{\"reads\":[\"chartDocument.events.drillDown\",\"chartDocument.dimensions[]\",\"availableTargets[]\"],\"writes\":[\"chartDocument.events.drillDown\"],\"identityKeys\":[\"availableTargets[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"action\"],\"properties\":{\"action\":{\"enum\":[\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"target\":{\"type\":\"string\"},\"mapping\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}},\"failureModes\":[\"target-not-in-catalog\",\"mapping-source-field-missing\",\"drilldown-target-invalid\",\"unsafe-event-action\"],\"description\":\"Configures drillDown through the dedicated drillDown output with governed route/widget targets and structured field mappings.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"drilldown-target-governed\",\"event-mapping-fields-exist\",\"event-action-supported\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.events.drillDown\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"selection.configure\",\"title\":\"Configure chart selection\",\"scope\":\"selection\",\"targetKind\":\"selection\",\"target\":{\"kind\":\"selection\",\"resolver\":\"x-ui-chart-events-selection-change\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"action\"],\"properties\":{\"action\":{\"enum\":[\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"target\":{\"type\":\"string\"},\"mapping\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"chart-event-selection-configure\",\"handlerContract\":{\"reads\":[\"chartDocument.events.selectionChange\",\"chartDocument.dimensions[]\",\"availableTargets[]\"],\"writes\":[\"chartDocument.events.selectionChange\"],\"identityKeys\":[\"availableTargets[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"action\"],\"properties\":{\"action\":{\"enum\":[\"filter-widget\",\"open-detail\",\"navigate\",\"update-context\",\"emit\"]},\"target\":{\"type\":\"string\"},\"mapping\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}}}},\"failureModes\":[\"target-not-in-catalog\",\"mapping-source-field-missing\",\"mapping-target-invalid\",\"unsafe-event-action\"],\"description\":\"Configures selectionChange as single-point selection evidence whose event key is governed by the operation.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"selection-output-structured\",\"event-target-governed\",\"event-mapping-fields-exist\",\"event-action-supported\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.events.selectionChange\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"legend.configure\",\"title\":\"Configure chart legend\",\"scope\":\"skin\",\"targetKind\":\"legend\",\"target\":{\"kind\":\"legend\",\"resolver\":\"x-ui-chart-legend-feature\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"enabled\"],\"properties\":{\"enabled\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"chartDocument.legend\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"feature-toggle-valid\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.legend\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
3045
3309
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3046
|
-
"contentHash": "
|
|
3310
|
+
"contentHash": "293a0ff43d1ec235b6f145ed522fb38f769f9e458ffdd316df7a062d9e52e2d7",
|
|
3047
3311
|
"sourceKind": "component_definition",
|
|
3048
3312
|
"sourceId": "praxis-chart",
|
|
3049
3313
|
"corpusVersion": "1.0.0"
|
|
@@ -3051,9 +3315,9 @@
|
|
|
3051
3315
|
{
|
|
3052
3316
|
"chunkIndex": 21,
|
|
3053
3317
|
"chunkKind": "authoring_manifest",
|
|
3054
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3318
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"tooltip.configure\",\"title\":\"Configure chart tooltip\",\"scope\":\"skin\",\"targetKind\":\"tooltip\",\"target\":{\"kind\":\"tooltip\",\"resolver\":\"x-ui-chart-tooltip-feature\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"enabled\"],\"properties\":{\"enabled\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"chartDocument.tooltip\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"feature-toggle-valid\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"chartDocument.tooltip\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
3055
3319
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3056
|
-
"contentHash": "
|
|
3320
|
+
"contentHash": "d6e576bfe3dfd6753d8677b7fb7307ccddbae8e06549765c3ebe05fcc2f3df9f",
|
|
3057
3321
|
"sourceKind": "component_definition",
|
|
3058
3322
|
"sourceId": "praxis-chart",
|
|
3059
3323
|
"corpusVersion": "1.0.0"
|
|
@@ -3061,9 +3325,29 @@
|
|
|
3061
3325
|
{
|
|
3062
3326
|
"chunkIndex": 22,
|
|
3063
3327
|
"chunkKind": "authoring_manifest",
|
|
3064
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.
|
|
3328
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"chart-document-shape\",\"level\":\"error\",\"code\":\"CHART_DOCUMENT_SHAPE\",\"description\":\"Document must conform to PraxisXUiChartContract.\"},{\"validatorId\":\"chart-version-supported\",\"level\":\"error\",\"code\":\"CHART_VERSION_SUPPORTED\"},{\"validatorId\":\"chart-type-supported\",\"level\":\"error\",\"code\":\"CHART_TYPE_SUPPORTED\",\"description\":\"Chart kind must be supported by @praxisui/charts.\"},{\"validatorId\":\"chart-type-series-axis-compatible\",\"level\":\"error\",\"code\":\"CHART_TYPE_SERIES_AXIS_COMPATIBLE\",\"description\":\"Chart kind, dimensions, metrics and axes must be compatible.\"},{\"validatorId\":\"category-slice-single-metric\",\"level\":\"error\",\"code\":\"CATEGORY_SLICE_SINGLE_METRIC\",\"description\":\"Pie, donut, funnel, pyramid and treemap charts require exactly one metric.\"},{\"validatorId\":\"combo-minimum-series\",\"level\":\"error\",\"code\":\"COMBO_MINIMUM_SERIES\",\"description\":\"Combo charts require at least two metrics.\"},{\"validatorId\":\"gauge-scalar-contract\",\"level\":\"error\",\"code\":\"GAUGE_SCALAR_CONTRACT\",\"description\":\"Gauge charts require one dimension, exactly one metric and, for praxis.stats, one group-by bucket selected with source.options.limit=1.\"},{\"validatorId\":\"gauge-scale-valid\",\"level\":\"error\",\"code\":\"GAUGE_SCALE_VALID\",\"description\":\"Gauge scale requires finite min and max values with max greater than min; runtime rejects values outside the declared scale without clamping.\"},{\"validatorId\":\"series-field-exists\",\"level\":\"error\",\"code\":\"SERIES_FIELD_EXISTS\",\"description\":\"Series field must exist in availableFields or schema context.\"},{\"validatorId\":\"series-field-aggregable\",\"level\":\"error\",\"code\":\"SERIES_FIELD_AGGREGABLE\",\"description\":\"Metric fields must support the requested aggregation.\"},{\"validatorId\":\"series-id-unique\",\"level\":\"error\",\"code\":\"SERIES_ID_UNIQUE\",\"description\":\"Metric/series identity must be stable and unique by field.\"},{\"validatorId\":\"series-exists\",\"level\":\"error\",\"code\":\"SERIES_EXISTS\",\"description\":\"Series removal target must exist.\"},{\"validatorId\":\"destructive-series-removal-confirmed\",\"level\":\"error\",\"code\":\"DESTRUCTIVE_SERIES_REMOVAL_CONFIRMED\",\"description\":\"Removing a series requires explicit confirmation.\"},{\"validatorId\":\"chart-keeps-required-metric\",\"level\":\"error\",\"code\":\"CHART_KEEPS_REQUIRED_METRIC\",\"description\":\"A chart cannot be left without required metrics.\"},{\"validatorId\":\"axis-field-exists\",\"level\":\"error\",\"code\":\"AXIS_FIELD_EXISTS\",\"description\":\"Axis/dimension fields must exist in availableFields or schema context.\"},{\"validatorId\":\"secondary-axis-combo-only\",\"level\":\"error\",\"code\":\"SECONDARY_AXIS_COMBO_ONLY\",\"description\":\"Secondary axis is supported only for combo charts.\"},{\"validatorId\":\"cartesian-dimension-required\",\"level\":\"error\",\"code\":\"CARTESIAN_DIMENSION_REQUIRED\",\"description\":\"Cartesian charts require at least one dimension.\"},{\"validatorId\":\"remote-resource-in-api-metadata\",\"level\":\"error\",\"code\":\"REMOTE_RESOURCE_IN_API_METADATA\",\"description\":\"Remote praxis.stats resource must equal a governed root-relative availableResources[].path beginning with exactly one slash; a discovery id is not an executable resource path.\"},{\"validatorId\":\"bound-fields-exist\",\"level\":\"error\",\"code\":\"BOUND_FIELDS_EXIST\",\"description\":\"Bound dimensions and metrics must exist in the capability-backed field context and satisfy its operation, aggregation and distribution-mode eligibility.\"},{\"validatorId\":\"stats-operation-supported\",\"level\":\"error\",\"code\":\"STATS_OPERATION_SUPPORTED\",\"description\":\"Remote datasource operation must be supported by the stats backend.\"},{\"validatorId\":\"comparison-period-complete\",\"level\":\"error\",\"code\":\"COMPARISON_PERIOD_COMPLETE\",\"description\":\"Comparison requires a time-series eligible period field, timezone, preset and mode grounded in the governed resource capabilities.\"},{\"validatorId\":\"comparison-metrics-supported\",\"level\":\"error\",\"code\":\"COMPARISON_METRICS_SUPPORTED\",\"description\":\"Comparison requires unique metrics[] aliases using only COUNT, DISTINCT_COUNT or SUM capabilities; singular metric payloads are not authorable.\"},{\"validatorId\":\"query-context-structured\",\"level\":\"error\",\"code\":\"QUERY_CONTEXT_STRUCTURED\",\"description\":\"queryContext must use the canonical @praxisui/core structure for filters, filterExpression, sort, limit, page and meta.\"},{\"validatorId\":\"query-context-filter-expression-stats-unsupported\",\"level\":\"error\",\"code\":\"QUERY_CONTEXT_FILTER_EXPRESSION_STATS_UNSUPPORTED\",\"description\":\"praxis.stats currently executes only flat queryContext.filters; governed filterExpression must be preserved for diagnostics and rejected until backend expression support is declared.\"},{\"validatorId\":\"query-context-fields-exist\",\"level\":\"warning\",\"code\":\"QUERY_CONTEXT_FIELDS_EXIST\",\"description\":\"queryContext filter fields should exist in the schema/data context.\"},{\"validatorId\":\"query-context-safe-values\",\"level\":\"error\",\"code\":\"QUERY_CONTEXT_SAFE_VALUES\",\"description\":\"queryContext values must be serializable safe data.\"},{\"validatorId\":\"point-click-action-structured\",\"level\":\"error\",\"code\":\"POINT_CLICK_ACTION_STRUCTURED\",\"description\":\"Configured pointClick actions must be emitted through pointAction while pointClick remains raw point evidence.\"},{\"validatorId\":\"cross-filter-output-structured\",\"level\":\"error\",\"code\":\"CROSS_FILTER_OUTPUT_STRUCTURED\",\"description\":\"Cross-filter output must be structured as query-context filters.\"},{\"validatorId\":\"event-target-governed\",\"level\":\"error\",\"code\":\"EVENT_TARGET_GOVERNED\",\"description\":\"Event targets must resolve to exactly one availableTargets[].id and declare the authored event plus action; missing, duplicate or cross-event identities fail closed.\"},{\"validatorId\":\"event-mapping-fields-exist\",\"level\":\"error\",\"code\":\"EVENT_MAPPING_FIELDS_EXIST\",\"description\":\"Event mapping source fields must exist in chart data context; praxis.stats reserves key for bucket identity and label for presentation.\"},{\"validatorId\":\"event-action-supported\",\"level\":\"error\",\"code\":\"EVENT_ACTION_SUPPORTED\",\"description\":\"Event action must be one of the supported structured action kinds.\"},{\"validatorId\":\"drilldown-target-governed\",\"level\":\"error\",\"code\":\"DRILLDOWN_TARGET_GOVERNED\",\"description\":\"Drilldown target must be a governed route or widget target.\"},{\"validatorId\":\"selection-output-structured\",\"level\":\"error\",\"code\":\"SELECTION_OUTPUT_STRUCTURED\",\"description\":\"Selection output must resolve selected point filters deterministically.\"},{\"validatorId\":\"feature-toggle-valid\",\"level\":\"error\",\"code\":\"FEATURE_TOGGLE_VALID\",\"description\":\"Legend and tooltip feature values must be boolean or toggleable feature objects.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"EDITOR_RUNTIME_ROUND_TRIP\",\"description\":\"PraxisChartConfigEditor must save/reopen the same canonical document that runtime consumes.\"}]}",
|
|
3329
|
+
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3330
|
+
"contentHash": "52fd4adaa19ae3ac8287751dc74457c63b9e21c93d7e104d57d61e8a9097c516",
|
|
3331
|
+
"sourceKind": "component_definition",
|
|
3332
|
+
"sourceId": "praxis-chart",
|
|
3333
|
+
"corpusVersion": "1.0.0"
|
|
3334
|
+
},
|
|
3335
|
+
{
|
|
3336
|
+
"chunkIndex": 23,
|
|
3337
|
+
"chunkKind": "authoring_manifest",
|
|
3338
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"The canonical saved shape is PraxisXUiChartContract, not raw ECharts options.\",\"PraxisChartConfigEditor must preserve chart kind, source, dimensions, metrics, events, legend and tooltip across apply/save/reset/reopen.\",\"Remote bindings persist availableResources[].path; availableResources[].id remains discovery identity, and transient resource/field/target catalogs and diagnostics are never persisted in widget inputs.\",\"Comparison must preserve one canonical /stats/comparison request with metrics[] and a complete comparisonPeriod; it must not downgrade into independent group-by calls.\",\"Scatter with one metric preserves dimension-X/metric-Y semantics; scatter with two metrics preserves the dimension as grouped bucket identity and ordered metrics as X/Y.\",\"Gauge preserves one dimension, exactly one metric, finite gauge.scale bounds and, for praxis.stats, the canonical group-by request with source.options.limit=1.\",\"Cross-filter, drilldown and selection authoring must persist structured event actions, not prompt examples or command strings.\",\"[P1] Backend handler, resolver and validators now execute directly; end-to-end Page Builder parity remains open until assistant requests project the transient availableTargets[].events catalog through validationContext and expose its fail-closed diagnostics.\",\"[P2] Transform-output semantics and target input-schema/port fields must be materialized and validated by Core; local transform.output inspection and backend-enriched inputFields are not substitutes for those canonical projections.\",\"Enrichment of capability-backed availableFields with /schemas/filtered property metadata remains a later schema-flow gate.\"]}",
|
|
3339
|
+
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3340
|
+
"contentHash": "fba4883d22b24dec3afc3860232ef04a310e3e481e5bef81d4b141957d835310",
|
|
3341
|
+
"sourceKind": "component_definition",
|
|
3342
|
+
"sourceId": "praxis-chart",
|
|
3343
|
+
"corpusVersion": "1.0.0"
|
|
3344
|
+
},
|
|
3345
|
+
{
|
|
3346
|
+
"chunkIndex": 24,
|
|
3347
|
+
"chunkKind": "authoring_manifest",
|
|
3348
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.4.0\",\"componentId\":\"praxis-chart\",\"ownerPackage\":\"@praxisui/charts\",\"configSchemaId\":\"PraxisXUiChartContract\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"set-bar-chart\",\"request\":\"Use a bar chart for employees by department.\",\"operationId\":\"chart.type.set\",\"params\":{\"kind\":\"bar\"},\"isPositive\":true},{\"id\":\"add-salary-series\",\"request\":\"Add salary as a summed metric.\",\"operationId\":\"series.add\",\"params\":{\"field\":\"salary\",\"aggregation\":\"sum\",\"label\":\"Salary\"},\"isPositive\":true},{\"id\":\"remove-old-series\",\"request\":\"Remove the old cost series.\",\"operationId\":\"series.remove\",\"target\":\"cost\",\"params\":{\"field\":\"cost\"},\"isPositive\":true},{\"id\":\"configure-secondary-axis\",\"request\":\"Put margin on a secondary axis for the combo chart.\",\"operationId\":\"axis.configure\",\"params\":{\"metricField\":\"margin\",\"metricAxis\":\"secondary\"},\"isPositive\":true},{\"id\":\"bind-stats-resource\",\"request\":\"Bind this chart to payroll stats grouped by department.\",\"operationId\":\"data.resource.bind\",\"params\":{\"sourceKind\":\"praxis.stats\",\"resource\":\"/api/stats/payroll\",\"operation\":\"group-by\"},\"isPositive\":true},{\"id\":\"bind-comparison-resource\",\"request\":\"Compare active employees by department with the previous aligned 30-day period.\",\"operationId\":\"data.resource.bind\",\"params\":{\"sourceKind\":\"praxis.stats\",\"resource\":\"/api/human-resources/employees\",\"operation\":\"comparison\",\"comparisonPeriod\":{\"field\":\"admissionDate\",\"timezone\":\"America/Sao_Paulo\",\"preset\":\"LAST_30_DAYS\",\"mode\":\"PREVIOUS_ALIGNED\"},\"dimensions\":[{\"field\":\"department\"}],\"metrics\":[{\"field\":\"employeeId\",\"aggregation\":\"distinct-count\"}]},\"isPositive\":true},{\"id\":\"set-query-context\",\"request\":\"Limit the chart to active employees and sort by total descending.\",\"operationId\":\"queryContext.set\",\"params\":{\"filters\":{\"status\":\"ACTIVE\"},\"sort\":[\"total,desc\"],\"limit\":10},\"isPositive\":true},{\"id\":\"configure-cross-filter\",\"request\":\"Use selected department to filter the employee table.\",\"operationId\":\"crossFilter.configure\",\"params\":{\"action\":\"filter-widget\",\"target\":\"employeesTable\",\"mapping\":{\"department\":\"department\"}},\"isPositive\":true},{\"id\":\"configure-stats-key-cross-filter\",\"request\":\"Use the governed department bucket identity to filter the employee table.\",\"operationId\":\"crossFilter.configure\",\"params\":{\"action\":\"filter-widget\",\"target\":\"employeesTable\",\"mapping\":{\"key\":\"departmentIdsIn\"}},\"isPositive\":true},{\"id\":\"configure-drilldown\",\"request\":\"Open the department detail when a point is clicked.\",\"operationId\":\"drilldown.configure\",\"params\":{\"action\":\"navigate\",\"target\":\"/departments/detail\",\"mapping\":{\"department\":\"departmentId\"}},\"isPositive\":true},{\"id\":\"configure-selection\",\"request\":\"Emit selected department as a structured selection event.\",\"operationId\":\"selection.configure\",\"params\":{\"action\":\"emit\",\"mapping\":{\"department\":\"department\"}},\"isPositive\":true},{\"id\":\"toggle-legend\",\"request\":\"Show the legend.\",\"operationId\":\"legend.configure\",\"params\":{\"enabled\":true},\"isPositive\":true},{\"id\":\"toggle-tooltip\",\"request\":\"Disable tooltips.\",\"operationId\":\"tooltip.configure\",\"params\":{\"enabled\":false},\"isPositive\":true},{\"id\":\"configure-gauge-scale\",\"request\":\"Set the gauge scale from zero to one.\",\"operationId\":\"gauge.scale.configure\",\"params\":{\"min\":0,\"max\":1},\"isPositive\":true},{\"id\":\"round-trip-editor-runtime\",\"request\":\"Save this chart in the editor and reopen it without changing the runtime chart document.\",\"operationId\":\"chart.document.set\",\"params\":{\"version\":\"0.1.0\",\"kind\":\"bar\",\"source\":{\"kind\":\"derived\"},\"dimensions\":[{\"field\":\"department\"}],\"metrics\":[{\"field\":\"total\",\"aggregation\":\"count\"}]},\"isPositive\":true},{\"id\":\"reject-ambiguous-series-target\",\"request\":\"Remove total when more than one chart series resolves to total.\",\"operationId\":\"series.remove\",\"target\":\"total\",\"params\":{\"field\":\"total\"},\"isPositive\":false},{\"id\":\"reject-prompt-routing\",\"request\":\"Use the prompt example text to decide which backend endpoint to call.\",\"operationId\":\"data.resource.bind\",\"params\":{\"sourceKind\":\"praxis.stats\",\"resource\":\"from prompt example\"},\"isPositive\":false},{\"id\":\"reject-unsafe-target\",\"request\":\"Navigate to javascript:alert(1) on drilldown.\",\"operationId\":\"drilldown.configure\",\"params\":{\"event\":\"drillDown\",\"action\":\"navigate\",\"target\":\"javascript:alert(1)\"},\"isPositive\":false}]}",
|
|
3065
3349
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3066
|
-
"contentHash": "
|
|
3350
|
+
"contentHash": "b24ee6d75c167a418d542ce80f9124a33cd471d1e8a0688efba54dc5d3f83f23",
|
|
3067
3351
|
"sourceKind": "component_definition",
|
|
3068
3352
|
"sourceId": "praxis-chart",
|
|
3069
3353
|
"corpusVersion": "1.0.0"
|