@tellaro/tql 3.3.0 → 4.0.1

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.
@@ -573,22 +573,669 @@ export declare function pieChartOptions(vizParams?: Record<string, unknown>, don
573
573
  };
574
574
  };
575
575
  };
576
- /** Map TQL viz type to Chart.js type string */
577
- export declare function chartJsType(tqlType: string): string;
578
- /** Build Chart.js data for any chart type */
579
- export declare function buildChartData(result: TqlStatsResult, chartType: string): {
576
+ /** A grouped result's `group_by` entry, whichever spelling it arrived in. */
577
+ interface GroupLevel {
578
+ field: string | null;
579
+ key: string;
580
+ bucketType: string;
581
+ interval?: string;
582
+ }
583
+ /** The levels of a grouped result: metadata objects, or legacy field-name strings. */
584
+ export declare function groupLevels(stats: Record<string, unknown>): GroupLevel[];
585
+ type Row = Record<string, unknown>;
586
+ /**
587
+ * The numeric value a row charts: the first aggregate (the single-aggregation key, or the
588
+ * first entry of `aggregations`), else `value`/`count`, else `doc_count`. `null` when the
589
+ * aggregate is null (an empty bucket's avg/min/max), so a line shows a gap rather than a 0.
590
+ */
591
+ export declare function rowMetricValue(row: Row): number | null;
592
+ /** The level key of the time axis: a date_histogram level, or a level whose rows carry epochs. */
593
+ export declare function timeLevelKey(stats: Record<string, unknown>): string | null;
594
+ /** A time-axis point: `x` is epoch milliseconds. */
595
+ export interface TimePoint {
596
+ x: number;
597
+ y: number | null;
598
+ }
599
+ /** Chart.js time-axis data: no labels, one dataset per series of `{x, y}` points. */
600
+ export interface TimeSeriesData {
580
601
  labels: string[];
581
- datasets: unknown[];
602
+ datasets: Array<Record<string, unknown> & {
603
+ label: string;
604
+ data: TimePoint[];
605
+ }>;
606
+ }
607
+ /**
608
+ * Time-axis data for line/area/bar charts over a date_histogram level.
609
+ *
610
+ * Each series is one value of the first non-time level (the terms split of
611
+ * `by date_histogram(@timestamp, 1h), host.name`), or a single series. Points are sorted by
612
+ * time; a series missing at a time present elsewhere gets `y: null` (a gap, stacked as 0).
613
+ * The Other row of `with other` is its own grey series.
614
+ */
615
+ export declare function timeSeriesData(result: TqlStatsResult, chartType: string): TimeSeriesData | null;
616
+ /** Chart.js `time.unit` for a date_histogram interval (`1h` → `hour`, `week` → `week`). */
617
+ export declare function timeUnitForInterval(interval: string | undefined): string | undefined;
618
+ /**
619
+ * Options for a time x-axis (`scales.x.type = "time"`).
620
+ *
621
+ * Chart.js's time scale needs a DATE ADAPTER registered by the consumer -- e.g.
622
+ * `import "chartjs-adapter-luxon"` once at app start. This module never imports one, so it
623
+ * stays free of Chart.js and adapter dependencies; without an adapter Chart.js throws when the
624
+ * chart is created.
625
+ */
626
+ export declare function timeSeriesOptions(result: TqlStatsResult, chartType: string): {
627
+ interaction: {
628
+ mode: "index";
629
+ intersect: boolean;
630
+ };
631
+ plugins: {
632
+ legend: {
633
+ display: boolean;
634
+ labels: {
635
+ color: string;
636
+ font: {
637
+ size: number;
638
+ };
639
+ padding: number;
640
+ usePointStyle: boolean;
641
+ pointStyleWidth: number;
642
+ filter: ((item: {
643
+ text?: string;
644
+ }) => boolean) | undefined;
645
+ };
646
+ };
647
+ tooltip: {
648
+ displayColors: boolean;
649
+ callbacks: undefined;
650
+ enabled: boolean;
651
+ mode: "index" | "nearest";
652
+ intersect: boolean;
653
+ backgroundColor: string;
654
+ titleColor: string;
655
+ bodyColor: string;
656
+ borderColor: string;
657
+ borderWidth: number;
658
+ cornerRadius: number;
659
+ padding: number;
660
+ titleFont: {
661
+ size: number;
662
+ weight: "600";
663
+ };
664
+ bodyFont: {
665
+ size: number;
666
+ };
667
+ boxPadding: number;
668
+ };
669
+ title: {
670
+ display: boolean;
671
+ text: string;
672
+ color: string;
673
+ font: {
674
+ size: number;
675
+ weight: "600";
676
+ };
677
+ padding: {
678
+ top: number;
679
+ bottom: number;
680
+ };
681
+ };
682
+ datalabels: {
683
+ display: boolean;
684
+ color?: undefined;
685
+ font?: undefined;
686
+ anchor?: undefined;
687
+ align?: undefined;
688
+ offset?: undefined;
689
+ formatter?: undefined;
690
+ } | {
691
+ display: string | boolean;
692
+ color: string;
693
+ font: {
694
+ size: number;
695
+ weight: "500";
696
+ };
697
+ anchor: "end";
698
+ align: "top";
699
+ offset: number;
700
+ formatter: ((value: number) => string) | undefined;
701
+ };
702
+ };
703
+ scales: {
704
+ x: {
705
+ type: "time";
706
+ stacked: boolean;
707
+ offset: boolean;
708
+ time: {
709
+ unit: string;
710
+ } | {
711
+ unit?: undefined;
712
+ };
713
+ ticks: {
714
+ maxRotation: number;
715
+ autoSkip: boolean;
716
+ maxTicksLimit: number;
717
+ callback: undefined;
718
+ color: string;
719
+ font: {
720
+ size: number;
721
+ };
722
+ padding: number;
723
+ };
724
+ title: {
725
+ display: boolean;
726
+ text: string;
727
+ color: string;
728
+ font: {
729
+ size: number;
730
+ };
731
+ padding: {
732
+ top: number;
733
+ };
734
+ };
735
+ grid: {
736
+ color: string;
737
+ drawTicks: boolean;
738
+ };
739
+ border: {
740
+ color: string;
741
+ };
742
+ };
743
+ y: {
744
+ stacked: boolean;
745
+ beginAtZero: boolean;
746
+ min: number | undefined;
747
+ max: number | undefined;
748
+ title: {
749
+ display: boolean;
750
+ text: string;
751
+ color: string;
752
+ font: {
753
+ size: number;
754
+ };
755
+ padding: {
756
+ bottom: number;
757
+ };
758
+ };
759
+ ticks: {
760
+ stepSize?: number | undefined;
761
+ color: string;
762
+ font: {
763
+ size: number;
764
+ };
765
+ padding: number;
766
+ callback: ((value: number | string) => string) | undefined;
767
+ };
768
+ grid: {
769
+ color: string;
770
+ };
771
+ border: {
772
+ display: boolean;
773
+ };
774
+ };
775
+ };
776
+ responsive: boolean;
777
+ maintainAspectRatio: boolean;
778
+ indexAxis: "y" | "x";
779
+ animation: {
780
+ duration: number;
781
+ easing: "easeOutQuart";
782
+ };
783
+ layout: {
784
+ padding: {
785
+ top: number;
786
+ right: number;
787
+ bottom: number;
788
+ left: number;
789
+ };
790
+ };
582
791
  };
583
- /** Build Chart.js options for any chart type */
584
- export declare function buildChartOptions(result: TqlStatsResult, chartType: string): {
792
+ /** One cell of a `chartjs-chart-matrix` heatmap. */
793
+ export interface HeatmapCell {
794
+ x: string;
795
+ y: string;
796
+ v: number | null;
797
+ }
798
+ /**
799
+ * Heatmap data for `chartjs-chart-matrix`: x = the first group level, y = the second (or the
800
+ * metric's name when there is one level), v = the metric. Cell colour scales with `v / max`.
801
+ *
802
+ * Data only: the consumer registers `MatrixController` and `MatrixElement`.
803
+ */
804
+ export declare function heatmapData(result: TqlStatsResult): {
805
+ labels: string[];
806
+ xLabels: string[];
807
+ yLabels: string[];
808
+ datasets: {
809
+ label: string;
810
+ data: HeatmapCell[];
811
+ backgroundColor: (ctx: {
812
+ raw?: HeatmapCell;
813
+ }) => string;
814
+ borderColor: string;
815
+ borderWidth: number;
816
+ width: (ctx: {
817
+ chart: {
818
+ chartArea?: {
819
+ width: number;
820
+ };
821
+ };
822
+ }) => number;
823
+ height: (ctx: {
824
+ chart: {
825
+ chartArea?: {
826
+ height: number;
827
+ };
828
+ };
829
+ }) => number;
830
+ }[];
831
+ };
832
+ /** Options for the heatmap: two category axes in data order. */
833
+ export declare function heatmapOptions(result: TqlStatsResult): {
834
+ plugins: {
835
+ legend: {
836
+ display: boolean;
837
+ };
838
+ tooltip: {
839
+ callbacks: {
840
+ title: () => string;
841
+ label: (ctx: {
842
+ raw: HeatmapCell;
843
+ }) => string;
844
+ };
845
+ enabled: boolean;
846
+ mode: "index" | "nearest";
847
+ intersect: boolean;
848
+ backgroundColor: string;
849
+ titleColor: string;
850
+ bodyColor: string;
851
+ borderColor: string;
852
+ borderWidth: number;
853
+ cornerRadius: number;
854
+ padding: number;
855
+ titleFont: {
856
+ size: number;
857
+ weight: "600";
858
+ };
859
+ bodyFont: {
860
+ size: number;
861
+ };
862
+ displayColors: boolean;
863
+ boxPadding: number;
864
+ };
865
+ title: {
866
+ display: boolean;
867
+ text: string;
868
+ color: string;
869
+ font: {
870
+ size: number;
871
+ weight: "600";
872
+ };
873
+ padding: {
874
+ top: number;
875
+ bottom: number;
876
+ };
877
+ };
878
+ datalabels: {
879
+ display: boolean;
880
+ color?: undefined;
881
+ font?: undefined;
882
+ anchor?: undefined;
883
+ align?: undefined;
884
+ offset?: undefined;
885
+ formatter?: undefined;
886
+ } | {
887
+ display: string | boolean;
888
+ color: string;
889
+ font: {
890
+ size: number;
891
+ weight: "500";
892
+ };
893
+ anchor: "end";
894
+ align: "top";
895
+ offset: number;
896
+ formatter: ((value: number) => string) | undefined;
897
+ };
898
+ };
899
+ scales: {
900
+ x: {
901
+ type: "category";
902
+ labels: string[];
903
+ offset: boolean;
904
+ grid: {
905
+ display: boolean;
906
+ };
907
+ ticks: {
908
+ color: string;
909
+ font: {
910
+ size: number;
911
+ };
912
+ maxRotation: number;
913
+ autoSkip: boolean;
914
+ maxTicksLimit: number;
915
+ padding: number;
916
+ callback: ((value: number | string) => string) | undefined;
917
+ };
918
+ };
919
+ y: {
920
+ type: "category";
921
+ labels: string[];
922
+ offset: boolean;
923
+ grid: {
924
+ display: boolean;
925
+ };
926
+ ticks: {
927
+ color: string;
928
+ };
929
+ };
930
+ };
931
+ responsive: boolean;
932
+ maintainAspectRatio: boolean;
933
+ indexAxis: "y" | "x";
934
+ animation: {
935
+ duration: number;
936
+ easing: "easeOutQuart";
937
+ };
938
+ layout: {
939
+ padding: {
940
+ top: number;
941
+ right: number;
942
+ bottom: number;
943
+ left: number;
944
+ };
945
+ };
946
+ interaction: {
947
+ mode: "index" | "nearest";
948
+ intersect: boolean;
949
+ };
950
+ };
951
+ /** One bubble of a `chartjs-chart-geo` bubble map. */
952
+ export interface GeoPoint {
953
+ /** chartjs-chart-geo reads `latitude`/`longitude`; `lat`/`lon` are the same numbers */
954
+ latitude: number;
955
+ longitude: number;
956
+ lat: number;
957
+ lon: number;
958
+ value: number | null;
959
+ /** The cell key (`z/x/y` or a geohash) */
960
+ key: string;
961
+ }
962
+ /** Centre of a geotile (`z/x/y`) or geohash cell, for rows that carry no `bucket_meta`. */
963
+ export declare function decodeGeoCell(key: string): {
964
+ lat: number;
965
+ lon: number;
966
+ } | null;
967
+ /**
968
+ * Bubble-map data for `chartjs-chart-geo`: one point per geo cell at its centre, sized by the
969
+ * metric; one dataset per value of a second level when there is one.
970
+ *
971
+ * Data only: the consumer registers `BubbleMapController`, `GeoFeature`, `ProjectionScale`
972
+ * and `SizeScale`, and supplies the basemap `outline` (e.g. world-atlas countries) on the
973
+ * dataset before rendering.
974
+ */
975
+ export declare function mapData(result: TqlStatsResult): {
976
+ labels: string[];
977
+ datasets: {
978
+ label: string;
979
+ data: GeoPoint[];
980
+ backgroundColor: string;
981
+ borderColor: string;
982
+ borderWidth: number;
983
+ }[];
984
+ };
985
+ /** Options for the bubble map (chartjs-chart-geo's projection + size scales). */
986
+ export declare function mapOptions(result: TqlStatsResult): {
987
+ responsive: boolean;
988
+ maintainAspectRatio: boolean;
989
+ animation: {
990
+ duration: number;
991
+ easing: "easeOutQuart";
992
+ };
993
+ plugins: {
994
+ legend: {
995
+ display: boolean;
996
+ };
997
+ title: {
998
+ display: boolean;
999
+ text: string;
1000
+ color: string;
1001
+ };
1002
+ tooltip: {
1003
+ callbacks: {
1004
+ label: (ctx: {
1005
+ raw: GeoPoint;
1006
+ }) => string;
1007
+ };
1008
+ };
1009
+ };
1010
+ scales: {
1011
+ projection: {
1012
+ axis: "x";
1013
+ projection: string;
1014
+ };
1015
+ size: {
1016
+ axis: "x";
1017
+ size: [number, number];
1018
+ };
1019
+ };
1020
+ };
1021
+ /**
1022
+ * Chart types the mappers do NOT render. A request for one of these -- or for any type not in
1023
+ * {@link chartJsType}'s table -- gets an {@link UnsupportedChart} marker, never a bar chart.
1024
+ * `table`, `number` and `gauge` are rendered without Chart.js (TqlChart draws the last two).
1025
+ */
1026
+ export declare const UNSUPPORTED_CHART_TYPES: readonly ["treemap", "sunburst", "chord", "nested_pie", "nested_donut"];
1027
+ /** Returned instead of chart data/options for a type the mappers do not render. */
1028
+ export interface UnsupportedChart {
1029
+ unsupported: true;
1030
+ /** The TQL chart type that was requested */
1031
+ type: string;
1032
+ /** A sentence for the "not supported" state */
1033
+ reason: string;
1034
+ }
1035
+ /** Narrow a {@link buildChartData} / {@link buildChartOptions} result. */
1036
+ export declare function isUnsupportedChart(value: unknown): value is UnsupportedChart;
1037
+ /**
1038
+ * Map a TQL viz type to its Chart.js chart type, or `null` when the mappers do not render it.
1039
+ *
1040
+ * `heatmap` → `"matrix"` (chartjs-chart-matrix) and `map` → `"bubbleMap"` (chartjs-chart-geo):
1041
+ * both controllers are the CONSUMER's to register. Anything unmapped returns `null` — it used
1042
+ * to fall through to `"bar"`, which drew a treemap or a chord diagram as an unrelated bar chart.
1043
+ */
1044
+ export declare function chartJsType(tqlType: string): string | null;
1045
+ /** Options for {@link buildChartData} / {@link buildChartOptions}. */
1046
+ export interface BuildChartOptions {
1047
+ /**
1048
+ * Draw date_histogram results on a Chart.js time axis (default true). Pass `false` when no
1049
+ * date adapter is registered: the x axis is then categorical with the ISO keys as labels.
1050
+ */
1051
+ timeAxis?: boolean;
1052
+ }
1053
+ /** Build Chart.js data for any chart type, or an {@link UnsupportedChart} marker. */
1054
+ export declare function buildChartData(result: TqlStatsResult, chartType: string, opts?: BuildChartOptions): {
1055
+ labels: string[];
1056
+ datasets: unknown[];
1057
+ } | UnsupportedChart;
1058
+ /** Build Chart.js options for any chart type, or an {@link UnsupportedChart} marker. */
1059
+ export declare function buildChartOptions(result: TqlStatsResult, chartType: string, opts?: BuildChartOptions): {
1060
+ responsive: boolean;
1061
+ maintainAspectRatio: boolean;
1062
+ indexAxis: "y" | "x";
1063
+ animation: {
1064
+ duration: number;
1065
+ easing: "easeOutQuart";
1066
+ };
1067
+ layout: {
1068
+ padding: {
1069
+ top: number;
1070
+ right: number;
1071
+ bottom: number;
1072
+ left: number;
1073
+ };
1074
+ };
1075
+ interaction: {
1076
+ mode: "index" | "nearest";
1077
+ intersect: boolean;
1078
+ };
1079
+ plugins: {
1080
+ legend: {
1081
+ display: boolean;
1082
+ labels: {
1083
+ color: string;
1084
+ font: {
1085
+ size: number;
1086
+ };
1087
+ padding: number;
1088
+ usePointStyle: boolean;
1089
+ pointStyleWidth: number;
1090
+ filter: ((item: {
1091
+ text?: string;
1092
+ }) => boolean) | undefined;
1093
+ };
1094
+ };
1095
+ title: {
1096
+ display: boolean;
1097
+ text: string;
1098
+ color: string;
1099
+ font: {
1100
+ size: number;
1101
+ weight: "600";
1102
+ };
1103
+ padding: {
1104
+ top: number;
1105
+ bottom: number;
1106
+ };
1107
+ };
1108
+ tooltip: {
1109
+ enabled: boolean;
1110
+ mode: "index" | "nearest";
1111
+ intersect: boolean;
1112
+ backgroundColor: string;
1113
+ titleColor: string;
1114
+ bodyColor: string;
1115
+ borderColor: string;
1116
+ borderWidth: number;
1117
+ cornerRadius: number;
1118
+ padding: number;
1119
+ titleFont: {
1120
+ size: number;
1121
+ weight: "600";
1122
+ };
1123
+ bodyFont: {
1124
+ size: number;
1125
+ };
1126
+ displayColors: boolean;
1127
+ boxPadding: number;
1128
+ callbacks: {
1129
+ title: (items: Array<{
1130
+ label: string;
1131
+ }>) => string;
1132
+ label: (ctx: {
1133
+ dataset: {
1134
+ label?: string;
1135
+ };
1136
+ parsed: {
1137
+ y: number;
1138
+ x: number;
1139
+ };
1140
+ formattedValue: string;
1141
+ }) => string;
1142
+ };
1143
+ };
1144
+ datalabels: {
1145
+ display: boolean;
1146
+ color?: undefined;
1147
+ font?: undefined;
1148
+ anchor?: undefined;
1149
+ align?: undefined;
1150
+ offset?: undefined;
1151
+ formatter?: undefined;
1152
+ } | {
1153
+ display: string | boolean;
1154
+ color: string;
1155
+ font: {
1156
+ size: number;
1157
+ weight: "500";
1158
+ };
1159
+ anchor: "end";
1160
+ align: "top";
1161
+ offset: number;
1162
+ formatter: ((value: number) => string) | undefined;
1163
+ };
1164
+ };
1165
+ scales: {
1166
+ x: {
1167
+ stacked: boolean;
1168
+ title: {
1169
+ display: boolean;
1170
+ text: string;
1171
+ color: string;
1172
+ font: {
1173
+ size: number;
1174
+ };
1175
+ padding: {
1176
+ top: number;
1177
+ };
1178
+ };
1179
+ ticks: {
1180
+ color: string;
1181
+ font: {
1182
+ size: number;
1183
+ };
1184
+ maxRotation: number;
1185
+ autoSkip: boolean;
1186
+ maxTicksLimit: number;
1187
+ padding: number;
1188
+ callback: ((value: number | string) => string) | undefined;
1189
+ };
1190
+ grid: {
1191
+ color: string;
1192
+ drawTicks: boolean;
1193
+ };
1194
+ border: {
1195
+ color: string;
1196
+ };
1197
+ };
1198
+ y: {
1199
+ stacked: boolean;
1200
+ beginAtZero: boolean;
1201
+ min: number | undefined;
1202
+ max: number | undefined;
1203
+ title: {
1204
+ display: boolean;
1205
+ text: string;
1206
+ color: string;
1207
+ font: {
1208
+ size: number;
1209
+ };
1210
+ padding: {
1211
+ bottom: number;
1212
+ };
1213
+ };
1214
+ ticks: {
1215
+ stepSize?: number | undefined;
1216
+ color: string;
1217
+ font: {
1218
+ size: number;
1219
+ };
1220
+ padding: number;
1221
+ callback: ((value: number | string) => string) | undefined;
1222
+ };
1223
+ grid: {
1224
+ color: string;
1225
+ };
1226
+ border: {
1227
+ display: boolean;
1228
+ };
1229
+ };
1230
+ };
1231
+ } | {
585
1232
  responsive: boolean;
586
1233
  maintainAspectRatio: boolean;
587
- indexAxis: "y" | "x";
588
1234
  animation: {
589
1235
  duration: number;
590
1236
  easing: "easeOutQuart";
591
1237
  };
1238
+ cutout: string | number;
592
1239
  layout: {
593
1240
  padding: {
594
1241
  top: number;
@@ -597,13 +1244,10 @@ export declare function buildChartOptions(result: TqlStatsResult, chartType: str
597
1244
  left: number;
598
1245
  };
599
1246
  };
600
- interaction: {
601
- mode: "index" | "nearest";
602
- intersect: boolean;
603
- };
604
1247
  plugins: {
605
1248
  legend: {
606
1249
  display: boolean;
1250
+ position: "top" | "bottom" | "left" | "right";
607
1251
  labels: {
608
1252
  color: string;
609
1253
  font: {
@@ -612,9 +1256,7 @@ export declare function buildChartOptions(result: TqlStatsResult, chartType: str
612
1256
  padding: number;
613
1257
  usePointStyle: boolean;
614
1258
  pointStyleWidth: number;
615
- filter: ((item: {
616
- text?: string;
617
- }) => boolean) | undefined;
1259
+ boxHeight: number;
618
1260
  };
619
1261
  };
620
1262
  title: {
@@ -631,6 +1273,13 @@ export declare function buildChartOptions(result: TqlStatsResult, chartType: str
631
1273
  };
632
1274
  };
633
1275
  tooltip: {
1276
+ callbacks: {
1277
+ title: () => string;
1278
+ label: (ctx: {
1279
+ label: string;
1280
+ parsed: number;
1281
+ }) => string;
1282
+ };
634
1283
  enabled: boolean;
635
1284
  mode: "index" | "nearest";
636
1285
  intersect: boolean;
@@ -650,20 +1299,82 @@ export declare function buildChartOptions(result: TqlStatsResult, chartType: str
650
1299
  };
651
1300
  displayColors: boolean;
652
1301
  boxPadding: number;
653
- callbacks: {
654
- title: (items: Array<{
655
- label: string;
656
- }>) => string;
657
- label: (ctx: {
658
- dataset: {
659
- label?: string;
660
- };
661
- parsed: {
662
- y: number;
663
- x: number;
664
- };
665
- formattedValue: string;
666
- }) => string;
1302
+ };
1303
+ datalabels: {
1304
+ display: boolean;
1305
+ color?: undefined;
1306
+ font?: undefined;
1307
+ anchor?: undefined;
1308
+ align?: undefined;
1309
+ offset?: undefined;
1310
+ formatter?: undefined;
1311
+ } | {
1312
+ display: string | boolean;
1313
+ color: string;
1314
+ font: {
1315
+ size: number;
1316
+ weight: "500";
1317
+ };
1318
+ anchor: "end";
1319
+ align: "top";
1320
+ offset: number;
1321
+ formatter: ((value: number) => string) | undefined;
1322
+ };
1323
+ };
1324
+ } | {
1325
+ interaction: {
1326
+ mode: "index";
1327
+ intersect: boolean;
1328
+ };
1329
+ plugins: {
1330
+ legend: {
1331
+ display: boolean;
1332
+ labels: {
1333
+ color: string;
1334
+ font: {
1335
+ size: number;
1336
+ };
1337
+ padding: number;
1338
+ usePointStyle: boolean;
1339
+ pointStyleWidth: number;
1340
+ filter: ((item: {
1341
+ text?: string;
1342
+ }) => boolean) | undefined;
1343
+ };
1344
+ };
1345
+ tooltip: {
1346
+ displayColors: boolean;
1347
+ callbacks: undefined;
1348
+ enabled: boolean;
1349
+ mode: "index" | "nearest";
1350
+ intersect: boolean;
1351
+ backgroundColor: string;
1352
+ titleColor: string;
1353
+ bodyColor: string;
1354
+ borderColor: string;
1355
+ borderWidth: number;
1356
+ cornerRadius: number;
1357
+ padding: number;
1358
+ titleFont: {
1359
+ size: number;
1360
+ weight: "600";
1361
+ };
1362
+ bodyFont: {
1363
+ size: number;
1364
+ };
1365
+ boxPadding: number;
1366
+ };
1367
+ title: {
1368
+ display: boolean;
1369
+ text: string;
1370
+ color: string;
1371
+ font: {
1372
+ size: number;
1373
+ weight: "600";
1374
+ };
1375
+ padding: {
1376
+ top: number;
1377
+ bottom: number;
667
1378
  };
668
1379
  };
669
1380
  datalabels: {
@@ -689,7 +1400,25 @@ export declare function buildChartOptions(result: TqlStatsResult, chartType: str
689
1400
  };
690
1401
  scales: {
691
1402
  x: {
1403
+ type: "time";
692
1404
  stacked: boolean;
1405
+ offset: boolean;
1406
+ time: {
1407
+ unit: string;
1408
+ } | {
1409
+ unit?: undefined;
1410
+ };
1411
+ ticks: {
1412
+ maxRotation: number;
1413
+ autoSkip: boolean;
1414
+ maxTicksLimit: number;
1415
+ callback: undefined;
1416
+ color: string;
1417
+ font: {
1418
+ size: number;
1419
+ };
1420
+ padding: number;
1421
+ };
693
1422
  title: {
694
1423
  display: boolean;
695
1424
  text: string;
@@ -701,17 +1430,6 @@ export declare function buildChartOptions(result: TqlStatsResult, chartType: str
701
1430
  top: number;
702
1431
  };
703
1432
  };
704
- ticks: {
705
- color: string;
706
- font: {
707
- size: number;
708
- };
709
- maxRotation: number;
710
- autoSkip: boolean;
711
- maxTicksLimit: number;
712
- padding: number;
713
- callback: ((value: number | string) => string) | undefined;
714
- };
715
1433
  grid: {
716
1434
  color: string;
717
1435
  drawTicks: boolean;
@@ -753,14 +1471,13 @@ export declare function buildChartOptions(result: TqlStatsResult, chartType: str
753
1471
  };
754
1472
  };
755
1473
  };
756
- } | {
757
1474
  responsive: boolean;
758
1475
  maintainAspectRatio: boolean;
1476
+ indexAxis: "y" | "x";
759
1477
  animation: {
760
1478
  duration: number;
761
1479
  easing: "easeOutQuart";
762
1480
  };
763
- cutout: string | number;
764
1481
  layout: {
765
1482
  padding: {
766
1483
  top: number;
@@ -769,40 +1486,16 @@ export declare function buildChartOptions(result: TqlStatsResult, chartType: str
769
1486
  left: number;
770
1487
  };
771
1488
  };
1489
+ } | {
772
1490
  plugins: {
773
1491
  legend: {
774
1492
  display: boolean;
775
- position: "top" | "bottom" | "left" | "right";
776
- labels: {
777
- color: string;
778
- font: {
779
- size: number;
780
- };
781
- padding: number;
782
- usePointStyle: boolean;
783
- pointStyleWidth: number;
784
- boxHeight: number;
785
- };
786
- };
787
- title: {
788
- display: boolean;
789
- text: string;
790
- color: string;
791
- font: {
792
- size: number;
793
- weight: "600";
794
- };
795
- padding: {
796
- top: number;
797
- bottom: number;
798
- };
799
1493
  };
800
1494
  tooltip: {
801
1495
  callbacks: {
802
1496
  title: () => string;
803
1497
  label: (ctx: {
804
- label: string;
805
- parsed: number;
1498
+ raw: HeatmapCell;
806
1499
  }) => string;
807
1500
  };
808
1501
  enabled: boolean;
@@ -825,6 +1518,19 @@ export declare function buildChartOptions(result: TqlStatsResult, chartType: str
825
1518
  displayColors: boolean;
826
1519
  boxPadding: number;
827
1520
  };
1521
+ title: {
1522
+ display: boolean;
1523
+ text: string;
1524
+ color: string;
1525
+ font: {
1526
+ size: number;
1527
+ weight: "600";
1528
+ };
1529
+ padding: {
1530
+ top: number;
1531
+ bottom: number;
1532
+ };
1533
+ };
828
1534
  datalabels: {
829
1535
  display: boolean;
830
1536
  color?: undefined;
@@ -846,4 +1552,90 @@ export declare function buildChartOptions(result: TqlStatsResult, chartType: str
846
1552
  formatter: ((value: number) => string) | undefined;
847
1553
  };
848
1554
  };
849
- };
1555
+ scales: {
1556
+ x: {
1557
+ type: "category";
1558
+ labels: string[];
1559
+ offset: boolean;
1560
+ grid: {
1561
+ display: boolean;
1562
+ };
1563
+ ticks: {
1564
+ color: string;
1565
+ font: {
1566
+ size: number;
1567
+ };
1568
+ maxRotation: number;
1569
+ autoSkip: boolean;
1570
+ maxTicksLimit: number;
1571
+ padding: number;
1572
+ callback: ((value: number | string) => string) | undefined;
1573
+ };
1574
+ };
1575
+ y: {
1576
+ type: "category";
1577
+ labels: string[];
1578
+ offset: boolean;
1579
+ grid: {
1580
+ display: boolean;
1581
+ };
1582
+ ticks: {
1583
+ color: string;
1584
+ };
1585
+ };
1586
+ };
1587
+ responsive: boolean;
1588
+ maintainAspectRatio: boolean;
1589
+ indexAxis: "y" | "x";
1590
+ animation: {
1591
+ duration: number;
1592
+ easing: "easeOutQuart";
1593
+ };
1594
+ layout: {
1595
+ padding: {
1596
+ top: number;
1597
+ right: number;
1598
+ bottom: number;
1599
+ left: number;
1600
+ };
1601
+ };
1602
+ interaction: {
1603
+ mode: "index" | "nearest";
1604
+ intersect: boolean;
1605
+ };
1606
+ } | {
1607
+ responsive: boolean;
1608
+ maintainAspectRatio: boolean;
1609
+ animation: {
1610
+ duration: number;
1611
+ easing: "easeOutQuart";
1612
+ };
1613
+ plugins: {
1614
+ legend: {
1615
+ display: boolean;
1616
+ };
1617
+ title: {
1618
+ display: boolean;
1619
+ text: string;
1620
+ color: string;
1621
+ };
1622
+ tooltip: {
1623
+ callbacks: {
1624
+ label: (ctx: {
1625
+ raw: GeoPoint;
1626
+ }) => string;
1627
+ };
1628
+ };
1629
+ };
1630
+ scales: {
1631
+ projection: {
1632
+ axis: "x";
1633
+ projection: string;
1634
+ };
1635
+ size: {
1636
+ axis: "x";
1637
+ size: [number, number];
1638
+ };
1639
+ };
1640
+ } | UnsupportedChart;
1641
+ export {};