logitude-dashboard-library 3.2.65 → 3.2.67

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.
@@ -926,23 +926,71 @@ $dark-grey: #717585;
926
926
  font-family: "Manrope", sans-serif;
927
927
  }
928
928
 
929
+ /* Match DevExtreme pivot typography / colors (custom DX overrides above). */
930
+ .dl-ag-pivot-grid.ag-theme-balham {
931
+ font-family: "Manrope", sans-serif;
932
+ font-size: 12px;
933
+ color: #46494A;
934
+ --ag-font-family: "Manrope", sans-serif;
935
+ --ag-font-size: 12px;
936
+ --ag-foreground-color: #46494A;
937
+ --ag-secondary-foreground-color: #46494A;
938
+ --ag-disabled-foreground-color: #46494A;
939
+ --ag-header-foreground-color: #222222;
940
+ --ag-header-background-color: #ffffff;
941
+ --ag-background-color: #ffffff;
942
+ --ag-odd-row-background-color: #ffffff;
943
+ --ag-selected-row-background-color: rgba(221, 221, 221, 0.35);
944
+ --ag-row-hover-color: rgba(221, 221, 221, 0.15);
945
+ --ag-border-color: #DFE1E3;
946
+ --ag-row-border-color: #DFE1E3;
947
+ --ag-header-column-separator-color: #DFE1E3;
948
+ --ag-header-column-resize-handle-color: #DFE1E3;
949
+ }
950
+
929
951
  .dl-ag-pivot-grid .ag-root-wrapper {
930
- border: 1px solid #e0e0e0;
952
+ border: 1px solid #DFE1E3;
953
+ font-family: "Manrope", sans-serif;
931
954
  }
932
955
 
933
956
  .dl-ag-pivot-grid {
934
- --ag-border-color: #e0e0e0;
935
- --ag-row-border-color: #e0e0e0;
957
+ --ag-border-color: #DFE1E3;
958
+ --ag-row-border-color: #DFE1E3;
959
+ --ag-header-column-separator-color: #DFE1E3;
960
+ --ag-header-column-resize-handle-color: #DFE1E3;
936
961
  --ag-header-background-color: #ffffff;
937
962
  }
938
963
 
964
+ /* Force every Ag Grid structural border to the same color. */
965
+ .dl-ag-pivot-grid.ag-theme-balham .ag-root-wrapper,
966
+ .dl-ag-pivot-grid.ag-theme-balham .ag-root,
967
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header,
968
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-row,
969
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-cell,
970
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-group-cell,
971
+ .dl-ag-pivot-grid.ag-theme-balham .ag-pinned-left-header,
972
+ .dl-ag-pivot-grid.ag-theme-balham .ag-pinned-right-header,
973
+ .dl-ag-pivot-grid.ag-theme-balham .ag-row,
974
+ .dl-ag-pivot-grid.ag-theme-balham .ag-cell,
975
+ .dl-ag-pivot-grid.ag-theme-balham .ag-body-viewport,
976
+ .dl-ag-pivot-grid.ag-theme-balham .ag-center-cols-viewport,
977
+ .dl-ag-pivot-grid.ag-theme-balham .ag-center-cols-container,
978
+ .dl-ag-pivot-grid.ag-theme-balham .ag-floating-top,
979
+ .dl-ag-pivot-grid.ag-theme-balham .ag-floating-bottom,
980
+ .dl-ag-pivot-grid.ag-theme-balham .ag-side-bar,
981
+ .dl-ag-pivot-grid.ag-theme-balham .ag-status-bar {
982
+ border-color: #DFE1E3 !important;
983
+ }
984
+
939
985
  .dl-ag-pivot-grid.ag-theme-balham .ag-header {
940
986
  background-color: #ffffff !important;
987
+ font-family: "Manrope", sans-serif;
988
+ color: #222222;
941
989
  }
942
990
 
943
991
  .dl-ag-pivot-grid.ag-theme-balham .ag-header-cell,
944
992
  .dl-ag-pivot-grid.ag-theme-balham .ag-header-group-cell {
945
- font-family: "Manrope";
993
+ font-family: "Manrope", sans-serif;
946
994
  font-size: 12px;
947
995
  font-weight: 600;
948
996
  text-align: center;
@@ -950,29 +998,88 @@ $dark-grey: #717585;
950
998
  background-color: #ffffff !important;
951
999
  }
952
1000
 
1001
+ /* Balham defaults height:50% / inset top — force full-height separators. */
1002
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-cell::after,
1003
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-group-cell::after {
1004
+ height: 100%;
1005
+ top: 0;
1006
+ background-color: #DFE1E3;
1007
+ }
1008
+
1009
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-cell-text,
1010
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-group-text,
1011
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-cell-label,
1012
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-group-cell-label {
1013
+ font-family: "Manrope", sans-serif;
1014
+ font-size: 12px;
1015
+ font-weight: 600;
1016
+ color: #222222 !important;
1017
+ }
1018
+
1019
+ /*
1020
+ * Header wrap only (Ag Grid 27 / pre-v28). Leaf headers also get white-space via
1021
+ * headerComponentParams.template; group headers have no wrapHeaderText until v32.1.
1022
+ * Do not touch body .ag-cell here.
1023
+ */
1024
+ .dl-ag-pivot-grid .ag-header-cell-text,
1025
+ .dl-ag-pivot-grid .ag-header-group-text {
1026
+ white-space: normal !important;
1027
+ overflow: visible !important;
1028
+ text-overflow: clip !important;
1029
+ line-height: 1.25;
1030
+ }
1031
+
953
1032
  .dl-ag-pivot-grid .ag-header-cell[col-id^="ag-Grid-AutoColumn"] {
954
1033
  text-align: left;
955
1034
  }
956
1035
 
1036
+ .dl-ag-pivot-grid .ag-header-cell[col-id^="ag-Grid-AutoColumn"] .ag-header-cell-text,
1037
+ .dl-ag-pivot-grid .ag-header-cell[col-id^="ag-Grid-AutoColumn"] .ag-header-cell-label {
1038
+ text-align: left;
1039
+ }
1040
+
1041
+ /* Column grand totals — match DevExtreme .dx-grandtotal */
957
1042
  .dl-ag-pivot-grid .ag-header-cell[col-id^="PivotRowTotal_"],
958
1043
  .dl-ag-pivot-grid .ag-header-group-cell.dl-pivot-row-grand-total-group-header,
959
1044
  .dl-ag-pivot-grid .ag-header-group-cell.dl-pivot-row-grand-total-group-header-sibling {
960
1045
  background-color: #f5f5f5 !important;
961
1046
  }
962
1047
 
1048
+ .dl-ag-pivot-grid .ag-cell[col-id^="PivotRowTotal_"] {
1049
+ background-color: #f5f5f5 !important;
1050
+ }
1051
+
1052
+ /* Column group totals (e.g. "Dtest Total") — match DX .dx-total / row-footer totals */
1053
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-cell.dl-pivot-column-group-total-header,
1054
+ .dl-ag-pivot-grid.ag-theme-balham .ag-header-group-cell.dl-pivot-column-group-total-header,
1055
+ .dl-ag-pivot-grid .ag-header-cell.dl-pivot-column-group-total-header,
1056
+ .dl-ag-pivot-grid .ag-header-group-cell.dl-pivot-column-group-total-header {
1057
+ background-color: #dddddd33 !important;
1058
+ }
1059
+
1060
+ .dl-ag-pivot-grid .ag-cell.dl-pivot-column-group-total-cell,
1061
+ .dl-ag-pivot-grid .dl-pivot-column-group-total-cell {
1062
+ background-color: #dddddd33 !important;
1063
+ }
1064
+
963
1065
  .dl-ag-pivot-grid.ag-theme-balham .ag-cell {
964
1066
  border: none !important;
965
- border-right: 1px solid #e0e0e0 !important;
1067
+ border-right: 1px solid #DFE1E3 !important;
966
1068
  }
967
1069
 
968
1070
  .dl-ag-pivot-grid.ag-theme-balham .ag-row {
969
- border-bottom: 1px solid #e0e0e0 !important;
1071
+ border-bottom: 1px solid #DFE1E3 !important;
1072
+ background-color: #ffffff;
970
1073
  }
971
1074
 
972
1075
  .dl-ag-pivot-grid .dl-ag-pivot-data-cell,
973
1076
  .dl-ag-pivot-grid .ag-cell.dl-ag-pivot-data-cell {
974
1077
  text-align: right !important;
975
1078
  cursor: pointer;
1079
+ font-family: "Manrope", sans-serif;
1080
+ font-size: 12px;
1081
+ font-weight: 500;
1082
+ color: #46494A;
976
1083
  }
977
1084
 
978
1085
  .dl-ag-pivot-grid .dl-pivot-date-data-cell,
@@ -991,11 +1098,27 @@ $dark-grey: #717585;
991
1098
  text-align: left !important;
992
1099
  justify-content: flex-start;
993
1100
  background-color: #ffffff;
1101
+ font-family: "Manrope", sans-serif;
1102
+ font-size: 12px;
1103
+ font-weight: 500;
1104
+ color: #46494A;
1105
+ }
1106
+
1107
+ /* Parent row headers — match DevExtreme vertical-headers td div>span (weight 600) */
1108
+ .dl-ag-pivot-grid .ag-row-group.ag-row-group-expanded .dl-ag-pivot-row-label-cell,
1109
+ .dl-ag-pivot-grid .ag-row-group.ag-row-group-contracted .dl-ag-pivot-row-label-cell,
1110
+ .dl-ag-pivot-grid .ag-row-group.ag-row-group-expanded .ag-cell.dl-ag-pivot-row-label-cell,
1111
+ .dl-ag-pivot-grid .ag-row-group.ag-row-group-contracted .ag-cell.dl-ag-pivot-row-label-cell {
1112
+ font-weight: 600 !important;
1113
+ color: #46494A !important;
994
1114
  }
995
1115
 
996
1116
  .dl-ag-pivot-grid .ag-row-footer .ag-cell,
997
1117
  .dl-ag-pivot-grid .ag-row-group-footer .ag-cell {
1118
+ font-family: "Manrope", sans-serif;
1119
+ font-size: 12px;
998
1120
  font-weight: 500;
1121
+ color: #46494A;
999
1122
  }
1000
1123
 
1001
1124
  .dl-ag-pivot-grid .ag-row-footer .dl-ag-pivot-row-label-cell,
@@ -1004,11 +1127,24 @@ $dark-grey: #717585;
1004
1127
  }
1005
1128
 
1006
1129
  .dl-ag-pivot-grid .ag-cell {
1007
- font-family: "Manrope";
1130
+ font-family: "Manrope", sans-serif;
1008
1131
  font-size: 12px;
1009
1132
  font-weight: 500;
1010
1133
  color: #46494A;
1011
- padding: 6px 8px 5px 8px;
1134
+ /*
1135
+ * Ag Grid autoHeight = wrapperHeight + paddingTop + paddingBottom (CellCtrl.setupAutoHeight).
1136
+ * Balham cell line-height is 26px; with old padding 6+5 the row measured ~37px and beat rowHeight 30.
1137
+ * Vertical padding 2+2 => 26+4 = 30 for single-line cells; wrapped content can still grow.
1138
+ */
1139
+ padding: 2px 8px 2px 8px;
1140
+ }
1141
+
1142
+ .dl-ag-pivot-grid .ag-cell-value,
1143
+ .dl-ag-pivot-grid .ag-group-value,
1144
+ .dl-ag-pivot-grid .ag-group-child-count {
1145
+ font-family: "Manrope", sans-serif;
1146
+ font-size: 12px;
1147
+ color: #46494A;
1012
1148
  }
1013
1149
 
1014
1150
  .dl-ag-pivot-grid .ag-row-group .ag-cell {
@@ -1020,8 +1156,38 @@ $dark-grey: #717585;
1020
1156
  text-align: left;
1021
1157
  }
1022
1158
 
1159
+ /*
1160
+ * Ag Grid paints cell backgrounds, not the row. Footer row bg alone is invisible.
1161
+ * Match DevExtreme totals across the full total row (row label + measure cells).
1162
+ */
1023
1163
  .dl-ag-pivot-grid .ag-row-footer,
1024
1164
  .dl-ag-pivot-grid .ag-row-group-footer {
1165
+ background-color: #dddddd33 !important;
1166
+ }
1167
+
1168
+ .dl-ag-pivot-grid .ag-row-footer .ag-cell,
1169
+ .dl-ag-pivot-grid .ag-row-group-footer .ag-cell,
1170
+ .dl-ag-pivot-grid .ag-row-footer .dl-ag-pivot-row-label-cell,
1171
+ .dl-ag-pivot-grid .ag-row-group-footer .dl-ag-pivot-row-label-cell,
1172
+ .dl-ag-pivot-grid .ag-row-footer .dl-ag-pivot-data-cell,
1173
+ .dl-ag-pivot-grid .ag-row-group-footer .dl-ag-pivot-data-cell,
1174
+ .dl-ag-pivot-grid .ag-row-footer .ag-cell.dl-ag-pivot-row-label-cell,
1175
+ .dl-ag-pivot-grid .ag-row-group-footer .ag-cell.dl-ag-pivot-row-label-cell,
1176
+ .dl-ag-pivot-grid .ag-row-footer .ag-cell.dl-ag-pivot-data-cell,
1177
+ .dl-ag-pivot-grid .ag-row-group-footer .ag-cell.dl-ag-pivot-data-cell {
1178
+ background-color: #dddddd33 !important;
1179
+ }
1180
+
1181
+ /* Grand Total row */
1182
+ .dl-ag-pivot-grid .ag-row-footer.ag-row-level--1 {
1183
+ background-color: #f5f5f5 !important;
1184
+ }
1185
+
1186
+ .dl-ag-pivot-grid .ag-row-footer.ag-row-level--1 .ag-cell,
1187
+ .dl-ag-pivot-grid .ag-row-footer.ag-row-level--1 .dl-ag-pivot-row-label-cell,
1188
+ .dl-ag-pivot-grid .ag-row-footer.ag-row-level--1 .dl-ag-pivot-data-cell,
1189
+ .dl-ag-pivot-grid .ag-row-footer.ag-row-level--1 .ag-cell.dl-ag-pivot-row-label-cell,
1190
+ .dl-ag-pivot-grid .ag-row-footer.ag-row-level--1 .ag-cell.dl-ag-pivot-data-cell {
1025
1191
  background-color: #f5f5f5 !important;
1026
1192
  }
1027
1193
 
@@ -1033,6 +1199,10 @@ $dark-grey: #717585;
1033
1199
  visibility: hidden;
1034
1200
  }
1035
1201
 
1202
+ .dl-ag-pivot-grid .ag-icon {
1203
+ color: #46494A;
1204
+ }
1205
+
1036
1206
  .dx-scrollbar-hoverable .dx-scrollable-scroll.dx-state-invisible .dx-scrollable-scroll-content {
1037
1207
  background-color: rgba(191, 191, 191, .7);
1038
1208
  }
@@ -42,6 +42,25 @@ export declare const getPivotDisplayName: (pivotData: any[], fieldName: string,
42
42
  export declare const isPivotRowGrandTotalColumnDef: (colDef: any) => boolean;
43
43
  export declare const isPivotRowGrandTotalGroupDef: (colGroupDef: any) => boolean;
44
44
  export declare const resolvePivotGroupHeaderName: (colGroupDef: any, columnFields: PivotApiField[], lookupDisplayName: (field: PivotApiField, rawValue: any) => string) => string | null;
45
+ /**
46
+ * Ag Grid expandable pivot totals: leaf with pivotTotalColumnIds + columnGroupShow 'closed'.
47
+ * (Created by addExpandablePivotGroups — one column per measure.)
48
+ */
49
+ export declare const isAgGridExpandablePivotColumnTotalLeaf: (colDef: any) => boolean;
50
+ /** After DX promote: per-measure column-group total leaf (still has pivotTotalColumnIds). */
51
+ export declare const isAgGridPivotColumnGroupTotalColumn: (colDef: any) => boolean;
52
+ export declare const setAllAgGridColumnGroupsOpened: (columnApi: any, opened: boolean) => void;
53
+ /**
54
+ * Choice 2 (DX parity) on top of Ag Grid expandable pivot totals:
55
+ * - Keeps native per-measure total leaves (same colIds → aggregation unchanged).
56
+ * - Clears columnGroupShow so totals stay visible when expanded AND collapsed
57
+ * (Ag Grid docs: undefined/null = always shown; open+always-shown still expandable).
58
+ * - Wraps them in a "{Value} Total" group for DX header layout.
59
+ *
60
+ * Requires: pivotColumnGroupTotals OFF (otherwise addExpandablePivotGroups is skipped)
61
+ * and suppressExpandablePivotGroups OFF when column totals are enabled.
62
+ */
63
+ export declare const promoteExpandablePivotColumnTotalsForDx: (colGroupDef: any, columnFields: PivotApiField[], lookupDisplayName: (field: PivotApiField, rawValue: any) => string) => void;
45
64
  export declare const getPivotValueColumnId: (pivotValueColumn: any) => string | null;
46
65
  export declare const resolveMeasureFromPivotValueColumn: (colDef: any, measures: PivotApiMeasure[]) => PivotApiMeasure | undefined;
47
66
  export declare const resolvePivotLeafHeaderName: (colDef: any, columnFields: PivotApiField[], lookupDisplayName: (field: PivotApiField, rawValue: any) => string, measureCount: number, measures: PivotApiMeasure[]) => string | null;
@@ -52,6 +71,14 @@ export declare const collectPivotRowPath: (startNode: any) => {
52
71
  field: string;
53
72
  key: any;
54
73
  }[];
74
+ export declare const isAgGridPivotDrillDownMeasureColumn: (colDef: any, measures: PivotApiMeasure[]) => boolean;
75
+ /**
76
+ * Map Ag Grid blank dimension keys to what DrillDownDataProvider expects for IS NULL.
77
+ * - Row groups in pivot mode: null/undefined → single space ' ' (GroupStage).
78
+ * - Pivot column buckets: missing → '' (PivotStage.bucketChildren).
79
+ * Backend: string.IsNullOrEmpty(value) → `{field} IS NULL`.
80
+ */
81
+ export declare const normalizePivotDrillDownFieldValue: (value: any) => string | null;
55
82
  export declare const buildPivotDrillDownPivotFields: (colDef: any, startNode: any, apiFields: PivotApiField[]) => any[];
56
83
  export declare const getMeasureCaption: (measure: PivotApiMeasure) => string;
57
84
  export declare const parseJsonArray: (json: string | null | undefined) => any[];