@splunk/visualizations 28.0.0 → 28.1.0

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.
Files changed (63) hide show
  1. package/Area.js +3 -3
  2. package/Area.js.map +2 -2
  3. package/Bar.js +3 -3
  4. package/Bar.js.map +2 -2
  5. package/Bubble.js +3 -3
  6. package/Bubble.js.map +2 -2
  7. package/CHANGELOG.external.md +30 -2
  8. package/ChoroplethSvg.js +15 -11
  9. package/ChoroplethSvg.js.map +2 -2
  10. package/Column.js +3 -3
  11. package/Column.js.map +2 -2
  12. package/Ellipse.js +3 -3
  13. package/Ellipse.js.map +2 -2
  14. package/Events.js +3 -3
  15. package/Events.js.map +2 -2
  16. package/FillerGauge.config.js +124 -3
  17. package/FillerGauge.config.js.map +3 -3
  18. package/FillerGauge.js +816 -75
  19. package/FillerGauge.js.map +4 -4
  20. package/Image.js +3 -3
  21. package/Image.js.map +2 -2
  22. package/Line.js +3 -3
  23. package/Line.js.map +2 -2
  24. package/LinkGraph.js +4 -4
  25. package/LinkGraph.js.map +2 -2
  26. package/Map.config.js +47 -3
  27. package/Map.config.js.map +2 -2
  28. package/Map.js +50 -6
  29. package/Map.js.map +2 -2
  30. package/Markdown.js +7 -4
  31. package/Markdown.js.map +2 -2
  32. package/MarkerGauge.js +3 -3
  33. package/MarkerGauge.js.map +2 -2
  34. package/ParallelCoordinates.js +3 -3
  35. package/ParallelCoordinates.js.map +2 -2
  36. package/Pie.js +3 -3
  37. package/Pie.js.map +2 -2
  38. package/Punchcard.js +3 -3
  39. package/Punchcard.js.map +2 -2
  40. package/Rectangle.js +3 -3
  41. package/Rectangle.js.map +2 -2
  42. package/Sankey.js +3 -3
  43. package/Sankey.js.map +2 -2
  44. package/Scatter.js +3 -3
  45. package/Scatter.js.map +2 -2
  46. package/SingleValue.js +5 -3
  47. package/SingleValue.js.map +2 -2
  48. package/SingleValueIcon.js +3 -3
  49. package/SingleValueIcon.js.map +2 -2
  50. package/SingleValueRadial.js +3 -3
  51. package/SingleValueRadial.js.map +2 -2
  52. package/TRELLIS.md +2 -2
  53. package/Table.config.js +22 -1
  54. package/Table.config.js.map +2 -2
  55. package/Table.js +233 -59
  56. package/Table.js.map +4 -4
  57. package/Timeline.js +66 -26
  58. package/Timeline.js.map +2 -2
  59. package/common/utils/tableUtils.js +59 -0
  60. package/common/utils/tableUtils.js.map +7 -0
  61. package/common/withDashboardViz.js +3 -3
  62. package/common/withDashboardViz.js.map +2 -2
  63. package/package.json +25 -25
package/Table.js CHANGED
@@ -72,122 +72,131 @@ __export(Table_exports2, {
72
72
  });
73
73
  module.exports = __toCommonJS(Table_exports2);
74
74
 
75
+ // esm-externals:react
76
+ var react_exports = {};
77
+ __export(react_exports, {
78
+ default: () => react_default
79
+ });
80
+ var defaultImport = __toESM(require("react"));
81
+ __reExport(react_exports, require("react"));
82
+ var react_default = "default" in defaultImport ? defaultImport.default : defaultImport;
83
+
75
84
  // esm-externals:lodash
76
85
  var lodash_exports = {};
77
86
  __export(lodash_exports, {
78
87
  default: () => lodash_default
79
88
  });
80
- var defaultImport = __toESM(require("lodash"));
89
+ var defaultImport2 = __toESM(require("lodash"));
81
90
  __reExport(lodash_exports, require("lodash"));
82
- var lodash_default = "default" in defaultImport ? defaultImport.default : defaultImport;
91
+ var lodash_default = "default" in defaultImport2 ? defaultImport2.default : defaultImport2;
83
92
 
84
93
  // esm-externals:@splunk/visualizations-shared/colorUtils
85
94
  var colorUtils_exports = {};
86
95
  __export(colorUtils_exports, {
87
96
  default: () => colorUtils_default
88
97
  });
89
- var defaultImport2 = __toESM(require("@splunk/visualizations-shared/colorUtils"));
98
+ var defaultImport3 = __toESM(require("@splunk/visualizations-shared/colorUtils"));
90
99
  __reExport(colorUtils_exports, require("@splunk/visualizations-shared/colorUtils"));
91
- var colorUtils_default = "default" in defaultImport2 ? defaultImport2.default : defaultImport2;
100
+ var colorUtils_default = "default" in defaultImport3 ? defaultImport3.default : defaultImport3;
92
101
 
93
102
  // esm-externals:@splunk/ui-utils/i18n
94
103
  var i18n_exports = {};
95
104
  __export(i18n_exports, {
96
105
  default: () => i18n_default
97
106
  });
98
- var defaultImport3 = __toESM(require("@splunk/ui-utils/i18n"));
107
+ var defaultImport4 = __toESM(require("@splunk/ui-utils/i18n"));
99
108
  __reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
100
- var i18n_default = "default" in defaultImport3 ? defaultImport3.default : defaultImport3;
109
+ var i18n_default = "default" in defaultImport4 ? defaultImport4.default : defaultImport4;
101
110
 
102
111
  // esm-externals:@splunk/visualization-schemas
103
112
  var visualization_schemas_exports = {};
104
113
  __export(visualization_schemas_exports, {
105
114
  default: () => visualization_schemas_default
106
115
  });
107
- var defaultImport4 = __toESM(require("@splunk/visualization-schemas"));
116
+ var defaultImport5 = __toESM(require("@splunk/visualization-schemas"));
108
117
  __reExport(visualization_schemas_exports, require("@splunk/visualization-schemas"));
109
- var visualization_schemas_default = "default" in defaultImport4 ? defaultImport4.default : defaultImport4;
118
+ var visualization_schemas_default = "default" in defaultImport5 ? defaultImport5.default : defaultImport5;
110
119
 
111
120
  // esm-externals:@splunk/visualizations-shared/colorConstants
112
121
  var colorConstants_exports = {};
113
122
  __export(colorConstants_exports, {
114
123
  default: () => colorConstants_default
115
124
  });
116
- var defaultImport5 = __toESM(require("@splunk/visualizations-shared/colorConstants"));
125
+ var defaultImport6 = __toESM(require("@splunk/visualizations-shared/colorConstants"));
117
126
  __reExport(colorConstants_exports, require("@splunk/visualizations-shared/colorConstants"));
118
- var colorConstants_default = "default" in defaultImport5 ? defaultImport5.default : defaultImport5;
127
+ var colorConstants_default = "default" in defaultImport6 ? defaultImport6.default : defaultImport6;
119
128
 
120
129
  // esm-externals:@splunk/visualization-icons
121
130
  var visualization_icons_exports = {};
122
131
  __export(visualization_icons_exports, {
123
132
  default: () => visualization_icons_default
124
133
  });
125
- var defaultImport6 = __toESM(require("@splunk/visualization-icons"));
134
+ var defaultImport7 = __toESM(require("@splunk/visualization-icons"));
126
135
  __reExport(visualization_icons_exports, require("@splunk/visualization-icons"));
127
- var visualization_icons_default = "default" in defaultImport6 ? defaultImport6.default : defaultImport6;
136
+ var visualization_icons_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
128
137
 
129
138
  // esm-externals:@splunk/visualization-icons/placeholders
130
139
  var placeholders_exports = {};
131
140
  __export(placeholders_exports, {
132
141
  default: () => placeholders_default
133
142
  });
134
- var defaultImport7 = __toESM(require("@splunk/visualization-icons/placeholders"));
143
+ var defaultImport8 = __toESM(require("@splunk/visualization-icons/placeholders"));
135
144
  __reExport(placeholders_exports, require("@splunk/visualization-icons/placeholders"));
136
- var placeholders_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
145
+ var placeholders_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
137
146
 
138
147
  // esm-externals:@splunk/themes/variables
139
148
  var variables_exports = {};
140
149
  __export(variables_exports, {
141
150
  default: () => variables_default
142
151
  });
143
- var defaultImport8 = __toESM(require("@splunk/themes/variables"));
152
+ var defaultImport9 = __toESM(require("@splunk/themes/variables"));
144
153
  __reExport(variables_exports, require("@splunk/themes/variables"));
145
- var variables_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
154
+ var variables_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
146
155
 
147
156
  // esm-externals:@splunk/themes/pick
148
157
  var pick_exports = {};
149
158
  __export(pick_exports, {
150
159
  default: () => pick_default
151
160
  });
152
- var defaultImport9 = __toESM(require("@splunk/themes/pick"));
161
+ var defaultImport10 = __toESM(require("@splunk/themes/pick"));
153
162
  __reExport(pick_exports, require("@splunk/themes/pick"));
154
- var pick_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
163
+ var pick_default = "default" in defaultImport10 ? defaultImport10.default : defaultImport10;
155
164
 
156
165
  // esm-externals:@splunk/react-icons/TextAlignCenter
157
166
  var TextAlignCenter_exports = {};
158
167
  __export(TextAlignCenter_exports, {
159
168
  default: () => TextAlignCenter_default
160
169
  });
161
- var defaultImport10 = __toESM(require("@splunk/react-icons/TextAlignCenter"));
170
+ var defaultImport11 = __toESM(require("@splunk/react-icons/TextAlignCenter"));
162
171
  __reExport(TextAlignCenter_exports, require("@splunk/react-icons/TextAlignCenter"));
163
- var TextAlignCenter_default = "default" in defaultImport10 ? defaultImport10.default : defaultImport10;
172
+ var TextAlignCenter_default = "default" in defaultImport11 ? defaultImport11.default : defaultImport11;
164
173
 
165
174
  // esm-externals:@splunk/react-icons/TextAlignLeft
166
175
  var TextAlignLeft_exports = {};
167
176
  __export(TextAlignLeft_exports, {
168
177
  default: () => TextAlignLeft_default
169
178
  });
170
- var defaultImport11 = __toESM(require("@splunk/react-icons/TextAlignLeft"));
179
+ var defaultImport12 = __toESM(require("@splunk/react-icons/TextAlignLeft"));
171
180
  __reExport(TextAlignLeft_exports, require("@splunk/react-icons/TextAlignLeft"));
172
- var TextAlignLeft_default = "default" in defaultImport11 ? defaultImport11.default : defaultImport11;
181
+ var TextAlignLeft_default = "default" in defaultImport12 ? defaultImport12.default : defaultImport12;
173
182
 
174
183
  // esm-externals:@splunk/react-icons/TextAlignRight
175
184
  var TextAlignRight_exports = {};
176
185
  __export(TextAlignRight_exports, {
177
186
  default: () => TextAlignRight_default
178
187
  });
179
- var defaultImport12 = __toESM(require("@splunk/react-icons/TextAlignRight"));
188
+ var defaultImport13 = __toESM(require("@splunk/react-icons/TextAlignRight"));
180
189
  __reExport(TextAlignRight_exports, require("@splunk/react-icons/TextAlignRight"));
181
- var TextAlignRight_default = "default" in defaultImport12 ? defaultImport12.default : defaultImport12;
190
+ var TextAlignRight_default = "default" in defaultImport13 ? defaultImport13.default : defaultImport13;
182
191
 
183
192
  // esm-externals:@splunk/visualizations-shared/configUtils
184
193
  var configUtils_exports = {};
185
194
  __export(configUtils_exports, {
186
195
  default: () => configUtils_default
187
196
  });
188
- var defaultImport13 = __toESM(require("@splunk/visualizations-shared/configUtils"));
197
+ var defaultImport14 = __toESM(require("@splunk/visualizations-shared/configUtils"));
189
198
  __reExport(configUtils_exports, require("@splunk/visualizations-shared/configUtils"));
190
- var configUtils_default = "default" in defaultImport13 ? defaultImport13.default : defaultImport13;
199
+ var configUtils_default = "default" in defaultImport14 ? defaultImport14.default : defaultImport14;
191
200
 
192
201
  // src/common/utils/configUtils.ts
193
202
  function enhanceConfig(vizConfig) {
@@ -229,7 +238,8 @@ var dataContract = {
229
238
  primary: (options = {}) => ({
230
239
  offset: 0,
231
240
  count: options.count ? options.count : 10,
232
- requestTotalCount: true
241
+ requestTotalCount: true,
242
+ add_summary_to_metadata: true
233
243
  })
234
244
  }
235
245
  };
@@ -463,6 +473,26 @@ var editorConfig = [
463
473
  labelWidth: EDITOR_LABEL_WIDTH
464
474
  }
465
475
  }
476
+ ],
477
+ [
478
+ {
479
+ label: (0, i18n_exports._)("Footer totals row"),
480
+ option: "showFooterTotals",
481
+ editor: "editor.checkbox",
482
+ editorProps: {
483
+ labelWidth: EDITOR_LABEL_WIDTH
484
+ }
485
+ }
486
+ ],
487
+ [
488
+ {
489
+ label: (0, i18n_exports._)("Footer percentages row"),
490
+ option: "showFooterPercentages",
491
+ editor: "editor.checkbox",
492
+ editorProps: {
493
+ labelWidth: EDITOR_LABEL_WIDTH
494
+ }
495
+ }
466
496
  ]
467
497
  ]
468
498
  },
@@ -692,15 +722,6 @@ var config = {
692
722
  };
693
723
  var config_default = enhanceConfig(config);
694
724
 
695
- // esm-externals:react
696
- var react_exports = {};
697
- __export(react_exports, {
698
- default: () => react_default
699
- });
700
- var defaultImport14 = __toESM(require("react"));
701
- __reExport(react_exports, require("react"));
702
- var react_default = "default" in defaultImport14 ? defaultImport14.default : defaultImport14;
703
-
704
725
  // esm-externals:@splunk/themes/getSettingsFromThemedProps
705
726
  var getSettingsFromThemedProps_exports = {};
706
727
  __export(getSettingsFromThemedProps_exports, {
@@ -1087,7 +1108,7 @@ var withFixedSizeContainer = (Viz) => {
1087
1108
  FixSizeItem,
1088
1109
  {
1089
1110
  "data-test": "fix-size-item",
1090
- "data-splunk-visualization-version": "28.0.0 - 0c5f07712",
1111
+ "data-splunk-visualization-version": "28.1.0 - 4a1bff08b",
1091
1112
  width,
1092
1113
  height,
1093
1114
  backgroundColor
@@ -1153,7 +1174,7 @@ var Cover = styled_components_default.div`
1153
1174
  bottom: 0;
1154
1175
  `;
1155
1176
  var Blocker = styled_components_default.div.attrs({
1156
- "data-splunk-visualization-version": "28.0.0 - 0c5f07712"
1177
+ "data-splunk-visualization-version": "28.1.0 - 4a1bff08b"
1157
1178
  })`
1158
1179
  position: relative;
1159
1180
  width: 100%;
@@ -1867,7 +1888,7 @@ var withDashboardViz = (opts) => {
1867
1888
  }
1868
1889
  eventCallbackProps[eventCallbackPropName] = (ev) => {
1869
1890
  if (ev && ev.payload) {
1870
- payload = ev.payload;
1891
+ payload = __spreadValues({}, ev.payload);
1871
1892
  }
1872
1893
  return onEventTrigger({
1873
1894
  originalEvent: ev,
@@ -1970,6 +1991,36 @@ var defaultImport36 = __toESM(require("@splunk/react-ui/Message"));
1970
1991
  __reExport(Message_exports2, require("@splunk/react-ui/Message"));
1971
1992
  var Message_default2 = "default" in defaultImport36 ? defaultImport36.default : defaultImport36;
1972
1993
 
1994
+ // src/common/utils/tableUtils.ts
1995
+ var hasSummarySum = (fields) => {
1996
+ return fields.some((field) => typeof field === "object" && field["summary.sum"] !== void 0);
1997
+ };
1998
+ var updateSumTotalValues = (primaryDataSource) => {
1999
+ const { data } = primaryDataSource;
2000
+ const { columns, fields } = data;
2001
+ if (!data || !columns || !fields) {
2002
+ return primaryDataSource;
2003
+ }
2004
+ if (hasSummarySum(fields)) {
2005
+ fields.forEach((field, idx) => {
2006
+ let footerTotal = "";
2007
+ if (typeof field === "object" && field["summary.sum"] !== void 0) {
2008
+ footerTotal = field["summary.sum"];
2009
+ }
2010
+ if (columns[idx]) {
2011
+ columns[idx] = [...columns[idx], footerTotal];
2012
+ }
2013
+ });
2014
+ }
2015
+ return primaryDataSource;
2016
+ };
2017
+ var findFooterTotal = (headersMetadata) => {
2018
+ return headersMetadata.reduce((total, field) => {
2019
+ const value = field["summary.sum"] ? +field["summary.sum"] : 0;
2020
+ return total + value;
2021
+ }, 0);
2022
+ };
2023
+
1973
2024
  // src/Table/hooks.tsx
1974
2025
  var isArray = (v) => Array.isArray(v);
1975
2026
  var textOverflowStyles = {
@@ -2254,6 +2305,7 @@ var validValueSelector = (v1, v2, v3, defaultValue) => {
2254
2305
  };
2255
2306
  var useTable = (tableArgs = {}) => {
2256
2307
  let { table = [], headers = [], columnIds = [] } = tableArgs;
2308
+ const { headersMetadata = [] } = tableArgs;
2257
2309
  const {
2258
2310
  headerVisibility = "inline",
2259
2311
  showRowNumbers = false,
@@ -2345,6 +2397,9 @@ var useTable = (tableArgs = {}) => {
2345
2397
  const tableBody = {
2346
2398
  rows: []
2347
2399
  };
2400
+ const tableFooter = {
2401
+ rows: []
2402
+ };
2348
2403
  for (let currentRow = 0; currentRow < longestColumnLength; currentRow += 1) {
2349
2404
  const row = {
2350
2405
  key: `row-${currentRow}`,
@@ -2397,11 +2452,53 @@ var useTable = (tableArgs = {}) => {
2397
2452
  showCell
2398
2453
  });
2399
2454
  });
2400
- tableBody.rows.push(row);
2455
+ if (hasSummarySum(headersMetadata) && currentRow === longestColumnLength - 1) {
2456
+ row.key = "footer-totals";
2457
+ tableFooter.rows.push(row);
2458
+ row.cells = row.cells.map((cell, i) => {
2459
+ const headerCell = tableHeader.cells[i];
2460
+ let newCell = __spreadValues({}, cell);
2461
+ if (headerCell) {
2462
+ newCell = __spreadProps(__spreadValues({}, newCell), {
2463
+ style: __spreadProps(__spreadValues({}, newCell.style), {
2464
+ backgroundColor: tableFormat.headerBackgroundColor
2465
+ })
2466
+ });
2467
+ }
2468
+ if (i === 0 && showRowNumbers) {
2469
+ newCell = __spreadProps(__spreadValues({}, newCell), {
2470
+ value: "",
2471
+ rawValue: ""
2472
+ });
2473
+ }
2474
+ return newCell;
2475
+ });
2476
+ } else {
2477
+ tableBody.rows.push(row);
2478
+ }
2479
+ }
2480
+ if (tableFooter.rows.length === 1 && hasSummarySum(headersMetadata)) {
2481
+ const totalRowIndex = tableFooter.rows[0].index;
2482
+ const footerTotal = findFooterTotal(headersMetadata);
2483
+ const percentageRow = {
2484
+ key: "footer-percentage",
2485
+ index: totalRowIndex + 1,
2486
+ cells: tableFooter.rows[0].cells.map((cell) => {
2487
+ let percentageValue = "";
2488
+ if (cell.rawValue !== "") {
2489
+ percentageValue = footerTotal ? `${(0, numberUtils_exports.formatNumber)(+cell.rawValue / footerTotal * 100, 2)}%` : "";
2490
+ }
2491
+ return __spreadProps(__spreadValues({}, cell), {
2492
+ value: percentageValue
2493
+ });
2494
+ })
2495
+ };
2496
+ tableFooter.rows.push(percentageRow);
2401
2497
  }
2402
2498
  return {
2403
2499
  tableHeader,
2404
- tableBody
2500
+ tableBody,
2501
+ tableFooter
2405
2502
  };
2406
2503
  };
2407
2504
 
@@ -3091,6 +3188,19 @@ var VizTableContainer = styled_components_default.div`
3091
3188
  * > td:hover {
3092
3189
  color: ${({ isCellClickable }) => isCellClickable ? variables_default.linkColor : variables_default.textColor};
3093
3190
  }
3191
+
3192
+ /* footer totals row styling */
3193
+ tr[data-test='footer-row-totals'] td[data-test='cell'] {
3194
+ color: ${variables_default.contentColorActive} !important;
3195
+ cursor: default;
3196
+ font-weight: bold;
3197
+ }
3198
+
3199
+ /* footer percentage row styling */
3200
+ tr[data-test='footer-row-percentages'] td[data-test='cell'] {
3201
+ color: ${variables_default.contentColorDefault} !important;
3202
+ cursor: default;
3203
+ }
3094
3204
  `;
3095
3205
  VizTableContainer.displayName = "VizTableContainer";
3096
3206
  var PAGINATOR_CONTAINER_HEIGHT = 38;
@@ -3161,15 +3271,17 @@ var withEmptyTableMessage = (Viz) => {
3161
3271
  tableFormat,
3162
3272
  columnFormat,
3163
3273
  paginatorParams,
3164
- count
3274
+ count,
3275
+ headersMetadata
3165
3276
  } = props;
3166
- const { tableHeader, tableBody } = useTable({
3277
+ const { tableHeader, tableBody, tableFooter } = useTable({
3167
3278
  headers,
3168
3279
  columnIds,
3169
3280
  table,
3170
3281
  headerVisibility,
3171
3282
  showRowNumbers,
3172
3283
  showInternalFields,
3284
+ headersMetadata,
3173
3285
  tableFormat: __spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({}, tableFormat), (tableFormat == null ? void 0 : tableFormat.headerAlign) && {
3174
3286
  headerAlign: (0, lodash_exports.cloneDeep)(tableFormat.headerAlign)
3175
3287
  }), (tableFormat == null ? void 0 : tableFormat.align) && {
@@ -3184,7 +3296,7 @@ var withEmptyTableMessage = (Viz) => {
3184
3296
  if (tableBody.rows.length === 0) {
3185
3297
  return /* @__PURE__ */ react_exports.createElement(Message_default2, { type: "warning" }, (0, i18n_exports._)("No data!"));
3186
3298
  }
3187
- return /* @__PURE__ */ react_exports.createElement(Viz, __spreadProps(__spreadValues({}, props), { tableHeader, tableBody }));
3299
+ return /* @__PURE__ */ react_exports.createElement(Viz, __spreadProps(__spreadValues({}, props), { tableHeader, tableBody, tableFooter }));
3188
3300
  };
3189
3301
  Wrapper.displayName = "PureTableWrapper";
3190
3302
  return Wrapper;
@@ -3228,7 +3340,10 @@ var PureTable = (props) => {
3228
3340
  backgroundColor,
3229
3341
  tableHeader,
3230
3342
  tableBody,
3343
+ tableFooter,
3231
3344
  showRowNumbers,
3345
+ showFooterTotals,
3346
+ showFooterPercentages,
3232
3347
  sortParams: { currentSortKey, currentSortDir, onSort },
3233
3348
  paginatorParams: _b
3234
3349
  } = _a, _c = _b, { isPaging, onChange: paginatorOnChange } = _c, paginatorProps = __objRest(_c, ["isPaging", "onChange"]), {
@@ -3468,7 +3583,43 @@ var PureTable = (props) => {
3468
3583
  }
3469
3584
  ));
3470
3585
  }))
3471
- ))
3586
+ ), tableFooter && /* @__PURE__ */ react_exports.createElement(react_exports.Fragment, null, showFooterTotals && tableFooter.rows[0] && /* @__PURE__ */ react_exports.createElement(
3587
+ Table_default.Row,
3588
+ {
3589
+ key: tableFooter.rows[0].key,
3590
+ "data-test": "footer-row-totals",
3591
+ "data-row-index": "0"
3592
+ },
3593
+ tableFooter.rows[0].cells.filter((c) => c.showCell).map(
3594
+ (c) => /* @__PURE__ */ react_exports.createElement(
3595
+ TextCell,
3596
+ {
3597
+ key: `footer-total-cell-${c.key}`,
3598
+ cell: c,
3599
+ useMouseOverEffect: false,
3600
+ "data-test": "footer-total-cell"
3601
+ }
3602
+ )
3603
+ )
3604
+ ), showFooterPercentages && tableFooter.rows[1] && /* @__PURE__ */ react_exports.createElement(
3605
+ Table_default.Row,
3606
+ {
3607
+ key: tableFooter.rows[1].key,
3608
+ "data-test": "footer-row-percentages",
3609
+ "data-row-index": "1"
3610
+ },
3611
+ tableFooter.rows[1].cells.filter((c) => c.showCell).map(
3612
+ (c) => /* @__PURE__ */ react_exports.createElement(
3613
+ TextCell,
3614
+ {
3615
+ key: `footer-percent-cell-${c.key}`,
3616
+ cell: c,
3617
+ useMouseOverEffect: false,
3618
+ "data-test": "footer-percent-cell"
3619
+ }
3620
+ )
3621
+ )
3622
+ )))
3472
3623
  )
3473
3624
  ),
3474
3625
  isPaging ? /* @__PURE__ */ react_exports.createElement(PaginatorContainer, null, /* @__PURE__ */ react_exports.createElement(Paginator_default, __spreadValues({ onChange: paginatorOnChange }, paginatorProps))) : null
@@ -3498,6 +3649,7 @@ PureTable.propTypes = {
3498
3649
  onCellClick: prop_types_exports.func,
3499
3650
  paginatorParams: PaginatorParamsPropTypes,
3500
3651
  showRowNumbers: prop_types_exports.bool,
3652
+ showFooterTotals: prop_types_exports.bool,
3501
3653
  sortParams: SortParamsPropTypes,
3502
3654
  table: prop_types_exports.arrayOf(prop_types_exports.arrayOf(cellDataType)),
3503
3655
  tableFormat: prop_types_exports.shape({
@@ -3531,6 +3683,8 @@ PureTable.defaultProps = {
3531
3683
  onChange: lodash_exports.noop
3532
3684
  },
3533
3685
  showRowNumbers: false,
3686
+ showFooterTotals: false,
3687
+ showFooterPercentages: false,
3534
3688
  sortParams: {
3535
3689
  onSort: lodash_exports.noop
3536
3690
  },
@@ -3548,8 +3702,16 @@ var PureTable_default = withEmptyTableMessage(FixedSizeContainer_default(PureTab
3548
3702
  // src/Table/Table.tsx
3549
3703
  var computeVizProps = (_a) => {
3550
3704
  var props = __objRest(_a, []);
3551
- var _a2, _b, _c, _d;
3705
+ var _a2, _b, _c, _d, _e, _f, _g;
3552
3706
  const vizProps = __spreadValues({}, props);
3707
+ vizProps.columnIds = (_d = (_c = (_b = (_a2 = vizProps.dataSources) == null ? void 0 : _a2.primary) == null ? void 0 : _b.data) == null ? void 0 : _c.fields.map((field) => {
3708
+ var _a3;
3709
+ return (_a3 = field.name) != null ? _a3 : field;
3710
+ })) != null ? _d : [];
3711
+ if (vizProps.columnIds.length === 0) {
3712
+ vizProps.columnIds = vizProps.headers;
3713
+ }
3714
+ vizProps.headersMetadata = (_g = (_f = (_e = vizProps.dataSources) == null ? void 0 : _e.primary) == null ? void 0 : _f.data) == null ? void 0 : _g.fields;
3553
3715
  if (vizProps.columnFormat) {
3554
3716
  const columns = vizProps.columnFormat;
3555
3717
  const themeRowBackgroundColorOdd = vizProps.themeFunc("rowBackgroundColorOdd");
@@ -3575,13 +3737,6 @@ var computeVizProps = (_a) => {
3575
3737
  rowBackgroundColors
3576
3738
  }), columnProperties.rowColors && { rowColors });
3577
3739
  });
3578
- vizProps.columnIds = (_d = (_c = (_b = (_a2 = vizProps.dataSources) == null ? void 0 : _a2.primary) == null ? void 0 : _b.data) == null ? void 0 : _c.fields.map((field) => {
3579
- var _a3;
3580
- return (_a3 = field.name) != null ? _a3 : field;
3581
- })) != null ? _d : [];
3582
- if (vizProps.columnIds.length === 0) {
3583
- vizProps.columnIds = vizProps.headers;
3584
- }
3585
3740
  }
3586
3741
  if (vizProps.onOptionsChange) {
3587
3742
  const handleColumnFormatChange = (updatedColumnFormat) => {
@@ -3606,12 +3761,31 @@ var computeVizProps = (_a) => {
3606
3761
  }
3607
3762
  return vizProps;
3608
3763
  };
3609
- var Table = withDashboardViz_default({
3610
- ReactViz: PureTable_default,
3611
- vizConfig: config_default,
3612
- disableEditModeCover: true,
3613
- computeVizProps
3614
- });
3764
+ var withTableFooter = (Viz) => {
3765
+ const VizWithTableFooter = (_a) => {
3766
+ var _b = _a, { dataSources } = _b, otherProps = __objRest(_b, ["dataSources"]);
3767
+ var _a2;
3768
+ if (!((_a2 = dataSources == null ? void 0 : dataSources.primary) == null ? void 0 : _a2.data)) {
3769
+ return /* @__PURE__ */ react_exports.createElement(Viz, __spreadValues({}, otherProps));
3770
+ }
3771
+ const clonedDataSources = (0, lodash_exports.cloneDeep)(dataSources);
3772
+ const { primary } = clonedDataSources;
3773
+ clonedDataSources.primary = updateSumTotalValues(primary);
3774
+ return /* @__PURE__ */ react_exports.createElement(Viz, __spreadValues({ dataSources: clonedDataSources }, otherProps));
3775
+ };
3776
+ VizWithTableFooter.propTypes = Viz.propTypes;
3777
+ VizWithTableFooter.defaultProps = Viz.defaultProps;
3778
+ VizWithTableFooter.config = Viz.config;
3779
+ return VizWithTableFooter;
3780
+ };
3781
+ var Table = withTableFooter(
3782
+ withDashboardViz_default({
3783
+ ReactViz: PureTable_default,
3784
+ vizConfig: config_default,
3785
+ disableEditModeCover: true,
3786
+ computeVizProps
3787
+ })
3788
+ );
3615
3789
  var { themes: themes2 } = config_default;
3616
3790
  var Table_default2 = Table;
3617
3791
  //# sourceMappingURL=Table.js.map