@praxisui/charts 9.0.32 → 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 +10 -3
- package/ai/component-registry.json +338 -52
- package/fesm2022/praxisui-charts.mjs +630 -54
- 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": {
|
|
@@ -1039,7 +1146,9 @@
|
|
|
1039
1146
|
"stacked-area",
|
|
1040
1147
|
"scatter",
|
|
1041
1148
|
"funnel",
|
|
1042
|
-
"pyramid"
|
|
1149
|
+
"pyramid",
|
|
1150
|
+
"treemap",
|
|
1151
|
+
"gauge"
|
|
1043
1152
|
]
|
|
1044
1153
|
},
|
|
1045
1154
|
"chartId": {
|
|
@@ -1142,6 +1251,29 @@
|
|
|
1142
1251
|
"type": "object"
|
|
1143
1252
|
}
|
|
1144
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
|
+
},
|
|
1145
1277
|
"events": {
|
|
1146
1278
|
"type": "object"
|
|
1147
1279
|
}
|
|
@@ -1159,6 +1291,8 @@
|
|
|
1159
1291
|
"chart-document-shape",
|
|
1160
1292
|
"chart-version-supported",
|
|
1161
1293
|
"chart-type-series-axis-compatible",
|
|
1294
|
+
"gauge-scalar-contract",
|
|
1295
|
+
"gauge-scale-valid",
|
|
1162
1296
|
"editor-runtime-round-trip"
|
|
1163
1297
|
],
|
|
1164
1298
|
"affectedPaths": [
|
|
@@ -1185,6 +1319,25 @@
|
|
|
1185
1319
|
"required": [
|
|
1186
1320
|
"kind"
|
|
1187
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
|
+
],
|
|
1188
1341
|
"properties": {
|
|
1189
1342
|
"kind": {
|
|
1190
1343
|
"enum": [
|
|
@@ -1199,7 +1352,9 @@
|
|
|
1199
1352
|
"stacked-area",
|
|
1200
1353
|
"scatter",
|
|
1201
1354
|
"funnel",
|
|
1202
|
-
"pyramid"
|
|
1355
|
+
"pyramid",
|
|
1356
|
+
"treemap",
|
|
1357
|
+
"gauge"
|
|
1203
1358
|
]
|
|
1204
1359
|
},
|
|
1205
1360
|
"orientation": {
|
|
@@ -1207,6 +1362,29 @@
|
|
|
1207
1362
|
"vertical",
|
|
1208
1363
|
"horizontal"
|
|
1209
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
|
+
}
|
|
1210
1388
|
}
|
|
1211
1389
|
}
|
|
1212
1390
|
},
|
|
@@ -1223,13 +1401,16 @@
|
|
|
1223
1401
|
"chart-type-series-axis-compatible",
|
|
1224
1402
|
"category-slice-single-metric",
|
|
1225
1403
|
"combo-minimum-series",
|
|
1404
|
+
"gauge-scalar-contract",
|
|
1405
|
+
"gauge-scale-valid",
|
|
1226
1406
|
"editor-runtime-round-trip"
|
|
1227
1407
|
],
|
|
1228
1408
|
"affectedPaths": [
|
|
1229
1409
|
"chartDocument.kind",
|
|
1230
1410
|
"chartDocument.orientation",
|
|
1231
1411
|
"chartDocument.metrics[]",
|
|
1232
|
-
"chartDocument.dimensions[]"
|
|
1412
|
+
"chartDocument.dimensions[]",
|
|
1413
|
+
"chartDocument.gauge.scale"
|
|
1233
1414
|
],
|
|
1234
1415
|
"submissionImpact": "config-only",
|
|
1235
1416
|
"preconditions": [
|
|
@@ -1386,6 +1567,7 @@
|
|
|
1386
1567
|
"series-field-aggregable",
|
|
1387
1568
|
"series-id-unique",
|
|
1388
1569
|
"chart-type-series-axis-compatible",
|
|
1570
|
+
"gauge-scalar-contract",
|
|
1389
1571
|
"editor-runtime-round-trip"
|
|
1390
1572
|
],
|
|
1391
1573
|
"affectedPaths": [
|
|
@@ -1604,6 +1786,10 @@
|
|
|
1604
1786
|
"comparison"
|
|
1605
1787
|
]
|
|
1606
1788
|
},
|
|
1789
|
+
"limit": {
|
|
1790
|
+
"type": "integer",
|
|
1791
|
+
"minimum": 1
|
|
1792
|
+
},
|
|
1607
1793
|
"comparisonPeriod": {
|
|
1608
1794
|
"type": "object",
|
|
1609
1795
|
"required": [
|
|
@@ -1723,11 +1909,13 @@
|
|
|
1723
1909
|
"availableResources[]",
|
|
1724
1910
|
"availableFields[]",
|
|
1725
1911
|
"chartDocument.source",
|
|
1912
|
+
"chartDocument.source.options.limit",
|
|
1726
1913
|
"chartDocument.dimensions[]",
|
|
1727
1914
|
"chartDocument.metrics[]"
|
|
1728
1915
|
],
|
|
1729
1916
|
"writes": [
|
|
1730
1917
|
"chartDocument.source",
|
|
1918
|
+
"chartDocument.source.options.limit",
|
|
1731
1919
|
"chartDocument.source.options.comparisonPeriod",
|
|
1732
1920
|
"chartDocument.dimensions[]",
|
|
1733
1921
|
"chartDocument.metrics[]"
|
|
@@ -1760,6 +1948,10 @@
|
|
|
1760
1948
|
"comparison"
|
|
1761
1949
|
]
|
|
1762
1950
|
},
|
|
1951
|
+
"limit": {
|
|
1952
|
+
"type": "integer",
|
|
1953
|
+
"minimum": 1
|
|
1954
|
+
},
|
|
1763
1955
|
"comparisonPeriod": {
|
|
1764
1956
|
"type": "object",
|
|
1765
1957
|
"required": [
|
|
@@ -1807,11 +1999,12 @@
|
|
|
1807
1999
|
"resource-not-in-api-metadata",
|
|
1808
2000
|
"field-not-in-schema",
|
|
1809
2001
|
"stats-operation-not-supported",
|
|
2002
|
+
"gauge-limit-required",
|
|
1810
2003
|
"comparison-period-incomplete",
|
|
1811
2004
|
"comparison-metric-unsupported",
|
|
1812
2005
|
"remote-binding-incomplete"
|
|
1813
2006
|
],
|
|
1814
|
-
"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."
|
|
1815
2008
|
}
|
|
1816
2009
|
}
|
|
1817
2010
|
],
|
|
@@ -1824,10 +2017,12 @@
|
|
|
1824
2017
|
"chart-type-series-axis-compatible",
|
|
1825
2018
|
"comparison-period-complete",
|
|
1826
2019
|
"comparison-metrics-supported",
|
|
2020
|
+
"gauge-scalar-contract",
|
|
1827
2021
|
"editor-runtime-round-trip"
|
|
1828
2022
|
],
|
|
1829
2023
|
"affectedPaths": [
|
|
1830
2024
|
"chartDocument.source",
|
|
2025
|
+
"chartDocument.source.options.limit",
|
|
1831
2026
|
"chartDocument.source.options.comparisonPeriod",
|
|
1832
2027
|
"chartDocument.dimensions[]",
|
|
1833
2028
|
"chartDocument.metrics[]"
|
|
@@ -1897,6 +2092,54 @@
|
|
|
1897
2092
|
"config-initialized"
|
|
1898
2093
|
]
|
|
1899
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
|
+
},
|
|
1900
2143
|
{
|
|
1901
2144
|
"operationId": "pointClick.configure",
|
|
1902
2145
|
"title": "Configure chart point click",
|
|
@@ -2432,7 +2675,7 @@
|
|
|
2432
2675
|
"validatorId": "category-slice-single-metric",
|
|
2433
2676
|
"level": "error",
|
|
2434
2677
|
"code": "CATEGORY_SLICE_SINGLE_METRIC",
|
|
2435
|
-
"description": "Pie, donut, funnel and
|
|
2678
|
+
"description": "Pie, donut, funnel, pyramid and treemap charts require exactly one metric."
|
|
2436
2679
|
},
|
|
2437
2680
|
{
|
|
2438
2681
|
"validatorId": "combo-minimum-series",
|
|
@@ -2440,6 +2683,18 @@
|
|
|
2440
2683
|
"code": "COMBO_MINIMUM_SERIES",
|
|
2441
2684
|
"description": "Combo charts require at least two metrics."
|
|
2442
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
|
+
},
|
|
2443
2698
|
{
|
|
2444
2699
|
"validatorId": "series-field-exists",
|
|
2445
2700
|
"level": "error",
|
|
@@ -2609,6 +2864,7 @@
|
|
|
2609
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.",
|
|
2610
2865
|
"Comparison must preserve one canonical /stats/comparison request with metrics[] and a complete comparisonPeriod; it must not downgrade into independent group-by calls.",
|
|
2611
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.",
|
|
2612
2868
|
"Cross-filter, drilldown and selection authoring must persist structured event actions, not prompt examples or command strings.",
|
|
2613
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.",
|
|
2614
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.",
|
|
@@ -2778,6 +3034,16 @@
|
|
|
2778
3034
|
},
|
|
2779
3035
|
"isPositive": true
|
|
2780
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
|
+
},
|
|
2781
3047
|
{
|
|
2782
3048
|
"id": "round-trip-editor-runtime",
|
|
2783
3049
|
"request": "Save this chart in the editor and reopen it without changing the runtime chart document.",
|
|
@@ -2849,9 +3115,9 @@
|
|
|
2849
3115
|
{
|
|
2850
3116
|
"chunkIndex": 1,
|
|
2851
3117
|
"chunkKind": "authoring_manifest",
|
|
2852
|
-
"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\":[]}",
|
|
2853
3119
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2854
|
-
"contentHash": "
|
|
3120
|
+
"contentHash": "effda98284e7645f53c2b0185b52459adfc18615f590ad19866d62225acb7ef0",
|
|
2855
3121
|
"sourceKind": "component_definition",
|
|
2856
3122
|
"sourceId": "praxis-chart",
|
|
2857
3123
|
"corpusVersion": "1.0.0"
|
|
@@ -2859,9 +3125,9 @@
|
|
|
2859
3125
|
{
|
|
2860
3126
|
"chunkIndex": 2,
|
|
2861
3127
|
"chunkKind": "authoring_manifest",
|
|
2862
|
-
"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\":[]}",
|
|
2863
3129
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2864
|
-
"contentHash": "
|
|
3130
|
+
"contentHash": "29dc0f93641ce56d216bba6e9ba78b3d28fcae012ea50a68d55678eae221bcbf",
|
|
2865
3131
|
"sourceKind": "component_definition",
|
|
2866
3132
|
"sourceId": "praxis-chart",
|
|
2867
3133
|
"corpusVersion": "1.0.0"
|
|
@@ -2869,9 +3135,9 @@
|
|
|
2869
3135
|
{
|
|
2870
3136
|
"chunkIndex": 3,
|
|
2871
3137
|
"chunkKind": "authoring_manifest",
|
|
2872
|
-
"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\":[]}",
|
|
2873
3139
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2874
|
-
"contentHash": "
|
|
3140
|
+
"contentHash": "b7e160adb1ffe43130d408e4d68804ad1ee840c0b70a8b0321b2c70f42b49476",
|
|
2875
3141
|
"sourceKind": "component_definition",
|
|
2876
3142
|
"sourceId": "praxis-chart",
|
|
2877
3143
|
"corpusVersion": "1.0.0"
|
|
@@ -2879,9 +3145,9 @@
|
|
|
2879
3145
|
{
|
|
2880
3146
|
"chunkIndex": 4,
|
|
2881
3147
|
"chunkKind": "authoring_manifest",
|
|
2882
|
-
"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}]}",
|
|
2883
3149
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2884
|
-
"contentHash": "
|
|
3150
|
+
"contentHash": "dc26a72e6225e6379e7b4421960af7d2351c9d16e9377bb9e45d28d3639faa25",
|
|
2885
3151
|
"sourceKind": "component_definition",
|
|
2886
3152
|
"sourceId": "praxis-chart",
|
|
2887
3153
|
"corpusVersion": "1.0.0"
|
|
@@ -2889,9 +3155,9 @@
|
|
|
2889
3155
|
{
|
|
2890
3156
|
"chunkIndex": 5,
|
|
2891
3157
|
"chunkKind": "authoring_manifest",
|
|
2892
|
-
"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\":[]}",
|
|
2893
3159
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2894
|
-
"contentHash": "
|
|
3160
|
+
"contentHash": "705d82719a638f4c1eec06c777fd1c85a477525faae57c2579d23d2436a49222",
|
|
2895
3161
|
"sourceKind": "component_definition",
|
|
2896
3162
|
"sourceId": "praxis-chart",
|
|
2897
3163
|
"corpusVersion": "1.0.0"
|
|
@@ -2899,9 +3165,9 @@
|
|
|
2899
3165
|
{
|
|
2900
3166
|
"chunkIndex": 6,
|
|
2901
3167
|
"chunkKind": "authoring_manifest",
|
|
2902
|
-
"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}]}",
|
|
2903
3169
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2904
|
-
"contentHash": "
|
|
3170
|
+
"contentHash": "b1e6b29f787d87defa10adab9c6c24e87b77e9511bc40cb1696f32ae1f933ede",
|
|
2905
3171
|
"sourceKind": "component_definition",
|
|
2906
3172
|
"sourceId": "praxis-chart",
|
|
2907
3173
|
"corpusVersion": "1.0.0"
|
|
@@ -2909,9 +3175,9 @@
|
|
|
2909
3175
|
{
|
|
2910
3176
|
"chunkIndex": 7,
|
|
2911
3177
|
"chunkKind": "authoring_manifest",
|
|
2912
|
-
"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\":[]}",
|
|
2913
3179
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2914
|
-
"contentHash": "
|
|
3180
|
+
"contentHash": "3d8b2cdde8d57dbc0367baa540c0e2759fe8327b10503fe31fd790e3f42dc2f4",
|
|
2915
3181
|
"sourceKind": "component_definition",
|
|
2916
3182
|
"sourceId": "praxis-chart",
|
|
2917
3183
|
"corpusVersion": "1.0.0"
|
|
@@ -2919,9 +3185,9 @@
|
|
|
2919
3185
|
{
|
|
2920
3186
|
"chunkIndex": 8,
|
|
2921
3187
|
"chunkKind": "authoring_manifest",
|
|
2922
|
-
"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\":[]}",
|
|
2923
3189
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2924
|
-
"contentHash": "
|
|
3190
|
+
"contentHash": "4ee7d826cd9b90e8ced4be5a59cca3137fde20e021c0c82a3ac4a19a6745c148",
|
|
2925
3191
|
"sourceKind": "component_definition",
|
|
2926
3192
|
"sourceId": "praxis-chart",
|
|
2927
3193
|
"corpusVersion": "1.0.0"
|
|
@@ -2929,9 +3195,9 @@
|
|
|
2929
3195
|
{
|
|
2930
3196
|
"chunkIndex": 9,
|
|
2931
3197
|
"chunkKind": "authoring_manifest",
|
|
2932
|
-
"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\":[]}",
|
|
2933
3199
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2934
|
-
"contentHash": "
|
|
3200
|
+
"contentHash": "0a0d2b7f843762aad6b2b53ead8a8dfbec3639604c63260a9d92242535751a40",
|
|
2935
3201
|
"sourceKind": "component_definition",
|
|
2936
3202
|
"sourceId": "praxis-chart",
|
|
2937
3203
|
"corpusVersion": "1.0.0"
|
|
@@ -2939,9 +3205,9 @@
|
|
|
2939
3205
|
{
|
|
2940
3206
|
"chunkIndex": 10,
|
|
2941
3207
|
"chunkKind": "authoring_manifest",
|
|
2942
|
-
"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\":[]}",
|
|
2943
3209
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2944
|
-
"contentHash": "
|
|
3210
|
+
"contentHash": "dc25ff8754966d64e2041b209e28027d3defaff1f054ee2fab453a7ed8ae6c4e",
|
|
2945
3211
|
"sourceKind": "component_definition",
|
|
2946
3212
|
"sourceId": "praxis-chart",
|
|
2947
3213
|
"corpusVersion": "1.0.0"
|
|
@@ -2949,9 +3215,9 @@
|
|
|
2949
3215
|
{
|
|
2950
3216
|
"chunkIndex": 11,
|
|
2951
3217
|
"chunkKind": "authoring_manifest",
|
|
2952
|
-
"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}]}",
|
|
2953
3219
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2954
|
-
"contentHash": "
|
|
3220
|
+
"contentHash": "f5ee289805282d79fb872970622eb5f3efd778e472d0feba8120fd6ac6aec546",
|
|
2955
3221
|
"sourceKind": "component_definition",
|
|
2956
3222
|
"sourceId": "praxis-chart",
|
|
2957
3223
|
"corpusVersion": "1.0.0"
|
|
@@ -2959,9 +3225,9 @@
|
|
|
2959
3225
|
{
|
|
2960
3226
|
"chunkIndex": 12,
|
|
2961
3227
|
"chunkKind": "authoring_manifest",
|
|
2962
|
-
"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\":[]}",
|
|
2963
3229
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2964
|
-
"contentHash": "
|
|
3230
|
+
"contentHash": "286bd609ffa24943ffc7c74a39bad7fc50a35d60c16558c3dc512826877a4fdd",
|
|
2965
3231
|
"sourceKind": "component_definition",
|
|
2966
3232
|
"sourceId": "praxis-chart",
|
|
2967
3233
|
"corpusVersion": "1.0.0"
|
|
@@ -2969,9 +3235,9 @@
|
|
|
2969
3235
|
{
|
|
2970
3236
|
"chunkIndex": 13,
|
|
2971
3237
|
"chunkKind": "authoring_manifest",
|
|
2972
|
-
"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\":[]}",
|
|
2973
3239
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2974
|
-
"contentHash": "
|
|
3240
|
+
"contentHash": "5042304daa3c0eae393bc60045ff64b862ebd573e20ee81fa8dd273619fbb866",
|
|
2975
3241
|
"sourceKind": "component_definition",
|
|
2976
3242
|
"sourceId": "praxis-chart",
|
|
2977
3243
|
"corpusVersion": "1.0.0"
|
|
@@ -2979,9 +3245,9 @@
|
|
|
2979
3245
|
{
|
|
2980
3246
|
"chunkIndex": 14,
|
|
2981
3247
|
"chunkKind": "authoring_manifest",
|
|
2982
|
-
"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\":[]}",
|
|
2983
3249
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2984
|
-
"contentHash": "
|
|
3250
|
+
"contentHash": "ab1d0b0419b046e8fdf76a016d2c2c1b4a525bbf43865bc7d76305a26635d4b1",
|
|
2985
3251
|
"sourceKind": "component_definition",
|
|
2986
3252
|
"sourceId": "praxis-chart",
|
|
2987
3253
|
"corpusVersion": "1.0.0"
|
|
@@ -2989,9 +3255,9 @@
|
|
|
2989
3255
|
{
|
|
2990
3256
|
"chunkIndex": 15,
|
|
2991
3257
|
"chunkKind": "authoring_manifest",
|
|
2992
|
-
"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\"}",
|
|
2993
3259
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
2994
|
-
"contentHash": "
|
|
3260
|
+
"contentHash": "a4ccd766fb453b7909cbc0b2a7ffebb583bc38be6c3772a658c9d147b09373a3",
|
|
2995
3261
|
"sourceKind": "component_definition",
|
|
2996
3262
|
"sourceId": "praxis-chart",
|
|
2997
3263
|
"corpusVersion": "1.0.0"
|
|
@@ -2999,9 +3265,9 @@
|
|
|
2999
3265
|
{
|
|
3000
3266
|
"chunkIndex": 16,
|
|
3001
3267
|
"chunkKind": "authoring_manifest",
|
|
3002
|
-
"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.\"}]}",
|
|
3003
3269
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3004
|
-
"contentHash": "
|
|
3270
|
+
"contentHash": "05a92054985fbf50f143b5066dcfda9d19df80139fda418c18cc33f5aed231a8",
|
|
3005
3271
|
"sourceKind": "component_definition",
|
|
3006
3272
|
"sourceId": "praxis-chart",
|
|
3007
3273
|
"corpusVersion": "1.0.0"
|
|
@@ -3009,9 +3275,9 @@
|
|
|
3009
3275
|
{
|
|
3010
3276
|
"chunkIndex": 17,
|
|
3011
3277
|
"chunkKind": "authoring_manifest",
|
|
3012
|
-
"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.\"}]}",
|
|
3013
3279
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3014
|
-
"contentHash": "
|
|
3280
|
+
"contentHash": "58c72862bbadde3633d00198f667e23cb278d55e8b38f2e08128a024b4d0eb57",
|
|
3015
3281
|
"sourceKind": "component_definition",
|
|
3016
3282
|
"sourceId": "praxis-chart",
|
|
3017
3283
|
"corpusVersion": "1.0.0"
|
|
@@ -3019,9 +3285,9 @@
|
|
|
3019
3285
|
{
|
|
3020
3286
|
"chunkIndex": 18,
|
|
3021
3287
|
"chunkKind": "authoring_manifest",
|
|
3022
|
-
"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\"]}]}",
|
|
3023
3289
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3024
|
-
"contentHash": "
|
|
3290
|
+
"contentHash": "6e5bac49df69a4a4c878b10f2dc2ae184dfecd36d2aa2850febbf1339fdbcd60",
|
|
3025
3291
|
"sourceKind": "component_definition",
|
|
3026
3292
|
"sourceId": "praxis-chart",
|
|
3027
3293
|
"corpusVersion": "1.0.0"
|
|
@@ -3029,9 +3295,9 @@
|
|
|
3029
3295
|
{
|
|
3030
3296
|
"chunkIndex": 19,
|
|
3031
3297
|
"chunkKind": "authoring_manifest",
|
|
3032
|
-
"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\"]}]}",
|
|
3033
3299
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3034
|
-
"contentHash": "
|
|
3300
|
+
"contentHash": "f8d754acb8de75e8f2ee643d176b3a02d502f9e488c6192ea7f714d321c21fdc",
|
|
3035
3301
|
"sourceKind": "component_definition",
|
|
3036
3302
|
"sourceId": "praxis-chart",
|
|
3037
3303
|
"corpusVersion": "1.0.0"
|
|
@@ -3039,9 +3305,9 @@
|
|
|
3039
3305
|
{
|
|
3040
3306
|
"chunkIndex": 20,
|
|
3041
3307
|
"chunkKind": "authoring_manifest",
|
|
3042
|
-
"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\"]}]}",
|
|
3043
3309
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3044
|
-
"contentHash": "
|
|
3310
|
+
"contentHash": "293a0ff43d1ec235b6f145ed522fb38f769f9e458ffdd316df7a062d9e52e2d7",
|
|
3045
3311
|
"sourceKind": "component_definition",
|
|
3046
3312
|
"sourceId": "praxis-chart",
|
|
3047
3313
|
"corpusVersion": "1.0.0"
|
|
@@ -3049,9 +3315,9 @@
|
|
|
3049
3315
|
{
|
|
3050
3316
|
"chunkIndex": 21,
|
|
3051
3317
|
"chunkKind": "authoring_manifest",
|
|
3052
|
-
"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\"]}]}",
|
|
3053
3319
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3054
|
-
"contentHash": "
|
|
3320
|
+
"contentHash": "d6e576bfe3dfd6753d8677b7fb7307ccddbae8e06549765c3ebe05fcc2f3df9f",
|
|
3055
3321
|
"sourceKind": "component_definition",
|
|
3056
3322
|
"sourceId": "praxis-chart",
|
|
3057
3323
|
"corpusVersion": "1.0.0"
|
|
@@ -3059,9 +3325,29 @@
|
|
|
3059
3325
|
{
|
|
3060
3326
|
"chunkIndex": 22,
|
|
3061
3327
|
"chunkKind": "authoring_manifest",
|
|
3062
|
-
"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}]}",
|
|
3063
3349
|
"sourcePointer": "projects/praxis-charts/src/lib/ai/praxis-charts-authoring-manifest.ts",
|
|
3064
|
-
"contentHash": "
|
|
3350
|
+
"contentHash": "b24ee6d75c167a418d542ce80f9124a33cd471d1e8a0688efba54dc5d3f83f23",
|
|
3065
3351
|
"sourceKind": "component_definition",
|
|
3066
3352
|
"sourceId": "praxis-chart",
|
|
3067
3353
|
"corpusVersion": "1.0.0"
|