@spteck/fluentui-react-charts 1.0.7 → 1.0.9
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/dist/charts/BarChart/BarChart.d.ts +2 -1
- package/dist/charts/ComboChart/ComboChart.d.ts +2 -1
- package/dist/charts/Doughnut/DoughnutChart.d.ts +2 -1
- package/dist/charts/PieChart/PieChart.d.ts +2 -1
- package/dist/charts/areaChart/AreaChart.d.ts +2 -1
- package/dist/charts/barHorizontalChart/BarHotizontalChart.d.ts +2 -1
- package/dist/charts/bubbleChart/BubbleChart.d.ts +2 -1
- package/dist/charts/floatBarChart/FloatBarChart.d.ts +2 -1
- package/dist/charts/index.d.ts +14 -0
- package/dist/charts/lineChart/LineChart.d.ts +2 -1
- package/dist/charts/polarChart/PolarChart.d.ts +2 -1
- package/dist/charts/radarChart/RadarChart.d.ts +2 -1
- package/dist/charts/scatterChart/ScatterChart.d.ts +2 -1
- package/dist/charts/stackedLineChart/StackedLineChart.d.ts +2 -1
- package/dist/charts/steamChart/SteamChart.d.ts +2 -1
- package/dist/components/index.d.ts +0 -14
- package/dist/fluentui-react-charts.cjs.development.js +1086 -1072
- package/dist/fluentui-react-charts.cjs.development.js.map +1 -1
- package/dist/fluentui-react-charts.cjs.production.min.js +1 -1
- package/dist/fluentui-react-charts.cjs.production.min.js.map +1 -1
- package/dist/fluentui-react-charts.esm.js +1074 -1074
- package/dist/fluentui-react-charts.esm.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/package.json +5 -5
- package/src/assets/sample1.png +0 -0
- package/src/assets/sample2.png +0 -0
- package/src/assets/sample3.png +0 -0
- package/src/charts/BarChart/BarChart.tsx +0 -227
- package/src/charts/BarChart/README.MD +0 -335
- package/src/charts/BarChart/index.ts +0 -1
- package/src/charts/ComboChart/ComboChart.tsx +0 -209
- package/src/charts/ComboChart/README.MD +0 -347
- package/src/charts/ComboChart/index.ts +0 -1
- package/src/charts/Doughnut/DoughnutChart.tsx +0 -152
- package/src/charts/Doughnut/README.MD +0 -296
- package/src/charts/Doughnut/index.ts +0 -1
- package/src/charts/PieChart/PieChart.tsx +0 -148
- package/src/charts/PieChart/README.MD +0 -315
- package/src/charts/PieChart/index.ts +0 -1
- package/src/charts/areaChart/AreaChart.tsx +0 -195
- package/src/charts/areaChart/README.MD +0 -236
- package/src/charts/areaChart/index.ts +0 -1
- package/src/charts/barHorizontalChart/BarHotizontalChart.tsx +0 -200
- package/src/charts/barHorizontalChart/README.MD +0 -278
- package/src/charts/barHorizontalChart/index.ts +0 -2
- package/src/charts/bubbleChart/BubbleChart.tsx +0 -184
- package/src/charts/bubbleChart/README.MD +0 -275
- package/src/charts/bubbleChart/index.ts +0 -1
- package/src/charts/floatBarChart/FloatBarChart.tsx +0 -178
- package/src/charts/floatBarChart/README.MD +0 -354
- package/src/charts/floatBarChart/index.ts +0 -1
- package/src/charts/lineChart/LineChart.tsx +0 -200
- package/src/charts/lineChart/README.MD +0 -354
- package/src/charts/lineChart/index.ts +0 -1
- package/src/charts/polarChart/PolarChart.tsx +0 -161
- package/src/charts/polarChart/README.MD +0 -336
- package/src/charts/polarChart/index.ts +0 -1
- package/src/charts/radarChart/README.MD +0 -388
- package/src/charts/radarChart/RadarChart.tsx +0 -173
- package/src/charts/radarChart/index.ts +0 -1
- package/src/charts/scatterChart/README.MD +0 -335
- package/src/charts/scatterChart/ScatterChart.tsx +0 -155
- package/src/charts/scatterChart/index.ts +0 -1
- package/src/charts/stackedLineChart/README.MD +0 -396
- package/src/charts/stackedLineChart/StackedLineChart.tsx +0 -188
- package/src/charts/stackedLineChart/index.ts +0 -1
- package/src/charts/steamChart/README.MD +0 -414
- package/src/charts/steamChart/SteamChart.tsx +0 -236
- package/src/charts/steamChart/index.ts +0 -1
- package/src/components/RenderLabel/RenderLabel.tsx +0 -39
- package/src/components/RenderLabel/index.ts +0 -2
- package/src/components/RenderLabel/useRenderLabelStylesStyles.ts +0 -25
- package/src/components/RenderLegend/RenderLegend.tsx +0 -40
- package/src/components/RenderTooltip/RenderTooltip.tsx +0 -111
- package/src/components/buttonMenu/ButtonMenu.tsx +0 -186
- package/src/components/buttonMenu/IButtonMenuOption.ts +0 -9
- package/src/components/buttonMenu/IButtonMenuProps.tsx +0 -40
- package/src/components/dashboard/DashBoard.tsx +0 -314
- package/src/components/dashboard/ExampleDashboardUsage.tsx +0 -114
- package/src/components/dashboard/IDashboardProps.tsx +0 -11
- package/src/components/dashboard/NoDashboards.tsx +0 -26
- package/src/components/dashboard/index.ts +0 -3
- package/src/components/dashboard/selectZoom/SelectZoom.tsx +0 -184
- package/src/components/dashboard/useDashboardStyles.ts +0 -76
- package/src/components/index.ts +0 -17
- package/src/components/legendContainer/LegendContainer.tsx +0 -118
- package/src/components/legendeButton/LegendButton.tsx +0 -57
- package/src/components/renderSliceLegend/RenderSliceLegend.tsx +0 -46
- package/src/components/renderValueLegend/RenderValueLegend.tsx +0 -43
- package/src/components/stack/IStackProps.tsx +0 -94
- package/src/components/stack/Stack.tsx +0 -103
- package/src/components/svgImages/BusinessReportIcon.tsx +0 -218
- package/src/components/themeProvider/ThemeProvider.tsx +0 -48
- package/src/constants/Constants.tsx +0 -23
- package/src/graphGlobalStyles/useGraphGlobalStyles.ts +0 -28
- package/src/hooks/index.ts +0 -1
- package/src/hooks/useChartFactory.tsx +0 -136
- package/src/hooks/useChartUtils.tsx +0 -187
- package/src/hooks/useIndexedDBCache.ts +0 -119
- package/src/hooks/useResponsiveLegend.ts +0 -35
- package/src/index.tsx +0 -5
- package/src/models/ChartDatum.ts +0 -4
- package/src/models/ICardChartContainer.tsx +0 -11
- package/src/models/IChart.ts +0 -50
- package/src/models/index.ts +0 -3
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import React__default, {
|
|
3
|
-
import { Bar, Chart as Chart$1, Line, Bubble, Doughnut, Pie, PolarArea, Radar, Scatter } from 'react-chartjs-2';
|
|
4
|
-
import ChartDataLabels from 'chartjs-plugin-datalabels';
|
|
5
|
-
import { Tooltip, Button, tokens, Caption1, mergeClasses, Menu, MenuTrigger, MenuButton, MenuPopover, MenuList, MenuItem, webLightTheme, Text, makeStyles, shorthands, ToggleButton, Card, CardHeader } from '@fluentui/react-components';
|
|
1
|
+
import { tokens, mergeClasses, Text, makeStyles, shorthands, Caption1, Menu, MenuTrigger, Tooltip, MenuButton, MenuPopover, Button, MenuList, MenuItem, webLightTheme, ToggleButton, Card, CardHeader } from '@fluentui/react-components';
|
|
2
|
+
import React__default, { createElement, Fragment, isValidElement, useState, useEffect, useMemo, useRef, useCallback } from 'react';
|
|
6
3
|
import { css } from '@emotion/css';
|
|
7
|
-
import { ResizeObserver } from '@juggle/resize-observer';
|
|
8
4
|
import { bundleIcon, Settings20Filled, Settings20Regular } from '@fluentui/react-icons';
|
|
9
5
|
import { Icon } from '@iconify/react';
|
|
6
|
+
import { Chart, CategoryScale, LinearScale, PointElement, LineElement, Tooltip as Tooltip$1, Filler, Legend, Title, BarElement, ArcElement, RadialLinearScale } from 'chart.js';
|
|
7
|
+
import ChartDataLabels from 'chartjs-plugin-datalabels';
|
|
8
|
+
import { Line, Bar, Bubble, Chart as Chart$1, Doughnut, Pie, PolarArea, Radar, Scatter } from 'react-chartjs-2';
|
|
9
|
+
import { ResizeObserver } from '@juggle/resize-observer';
|
|
10
10
|
import { openDB } from 'idb';
|
|
11
11
|
|
|
12
12
|
function _arrayLikeToArray(r, a) {
|
|
@@ -186,211 +186,212 @@ function _unsupportedIterableToArray(r, a) {
|
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
* Smart Fluent tooltip generator with chart-type awareness.
|
|
211
|
-
*/
|
|
212
|
-
function createFluentTooltip(theme) {
|
|
213
|
-
var fontFamily = theme.fontFamilyBase;
|
|
214
|
-
var fontSize = parseInt(theme.fontSizeBase200.replace('px', '')) || 14;
|
|
215
|
-
var tooltipBg = theme.colorNeutralBackground1;
|
|
216
|
-
var tooltipTitleColor = theme.colorNeutralForeground1;
|
|
217
|
-
var tooltipBodyColor = theme.colorNeutralForeground2;
|
|
218
|
-
var borderColor = theme.colorNeutralStroke2;
|
|
219
|
-
var callbacks = {
|
|
220
|
-
title: function title(context) {
|
|
221
|
-
var _context$0$label, _context$;
|
|
222
|
-
return (_context$0$label = (_context$ = context[0]) == null ? void 0 : _context$.label) != null ? _context$0$label : '';
|
|
189
|
+
var BusinessReportIcon = function BusinessReportIcon(_ref) {
|
|
190
|
+
var _ref$width = _ref.width,
|
|
191
|
+
width = _ref$width === void 0 ? 200 : _ref$width,
|
|
192
|
+
_ref$height = _ref.height,
|
|
193
|
+
height = _ref$height === void 0 ? 200 : _ref$height,
|
|
194
|
+
className = _ref.className,
|
|
195
|
+
style = _ref.style;
|
|
196
|
+
return React__default.createElement("svg", {
|
|
197
|
+
width: width,
|
|
198
|
+
height: height,
|
|
199
|
+
viewBox: "200 400 1400 1000",
|
|
200
|
+
className: className,
|
|
201
|
+
style: _extends({
|
|
202
|
+
fill: tokens.colorNeutralForeground2
|
|
203
|
+
}, style),
|
|
204
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
205
|
+
}, React__default.createElement("g", {
|
|
206
|
+
id: "BACKGROUND"
|
|
207
|
+
}, React__default.createElement("rect", {
|
|
208
|
+
style: {
|
|
209
|
+
fill: tokens.colorNeutralBackground1
|
|
223
210
|
},
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
}
|
|
234
|
-
// Scatter format { x, y }
|
|
235
|
-
if (typeof raw === 'object' && raw !== null && 'x' in raw && 'y' in raw) {
|
|
236
|
-
var _x = raw.x,
|
|
237
|
-
_y = raw.y;
|
|
238
|
-
return datasetLabel + " \u2014 x: " + _x + ", y: " + _y;
|
|
239
|
-
}
|
|
240
|
-
// Floating bar [min, max]
|
|
241
|
-
if (Array.isArray(raw) && raw.length === 2) {
|
|
242
|
-
var min = raw[0],
|
|
243
|
-
max = raw[1];
|
|
244
|
-
return datasetLabel + ": " + min + " \u2013 " + max;
|
|
245
|
-
}
|
|
246
|
-
// Default: single number or string
|
|
247
|
-
return datasetLabel + ": " + raw;
|
|
211
|
+
x: "200",
|
|
212
|
+
y: "400",
|
|
213
|
+
width: "1400",
|
|
214
|
+
height: "1000"
|
|
215
|
+
})), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
216
|
+
x: "486.006",
|
|
217
|
+
y: "568.026",
|
|
218
|
+
style: {
|
|
219
|
+
fill: tokens.colorNeutralBackground1
|
|
248
220
|
},
|
|
249
|
-
|
|
250
|
-
|
|
221
|
+
width: "1038.994",
|
|
222
|
+
height: "768.164"
|
|
223
|
+
}), React__default.createElement("path", {
|
|
224
|
+
style: {
|
|
225
|
+
fill: tokens.colorNeutralStroke1
|
|
251
226
|
},
|
|
252
|
-
|
|
253
|
-
|
|
227
|
+
d: "M1527.5,1338.69H483.506V565.526H1527.5V1338.69z M488.506,1333.69H1522.5V570.526H488.506V1333.69z"
|
|
228
|
+
})), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
229
|
+
x: "558.003",
|
|
230
|
+
y: "1086.698",
|
|
231
|
+
style: {
|
|
232
|
+
fill: tokens.colorNeutralForeground3,
|
|
233
|
+
opacity: 0.3
|
|
254
234
|
},
|
|
255
|
-
|
|
256
|
-
|
|
235
|
+
width: "85",
|
|
236
|
+
height: "164.492"
|
|
237
|
+
}), React__default.createElement("rect", {
|
|
238
|
+
x: "693.003",
|
|
239
|
+
y: "1004.672",
|
|
240
|
+
style: {
|
|
241
|
+
fill: tokens.colorNeutralForeground3,
|
|
242
|
+
opacity: 0.3
|
|
257
243
|
},
|
|
258
|
-
|
|
259
|
-
|
|
244
|
+
width: "85",
|
|
245
|
+
height: "246.519"
|
|
246
|
+
}), React__default.createElement("rect", {
|
|
247
|
+
x: "828.003",
|
|
248
|
+
y: "835.487",
|
|
249
|
+
style: {
|
|
250
|
+
fill: tokens.colorNeutralForeground3,
|
|
251
|
+
opacity: 0.3
|
|
260
252
|
},
|
|
261
|
-
|
|
262
|
-
|
|
253
|
+
width: "85",
|
|
254
|
+
height: "415.703"
|
|
255
|
+
}), React__default.createElement("rect", {
|
|
256
|
+
x: "963.003",
|
|
257
|
+
y: "955.6",
|
|
258
|
+
style: {
|
|
259
|
+
fill: tokens.colorNeutralForeground3,
|
|
260
|
+
opacity: 0.3
|
|
263
261
|
},
|
|
264
|
-
|
|
265
|
-
|
|
262
|
+
width: "85",
|
|
263
|
+
height: "295.591"
|
|
264
|
+
}), React__default.createElement("rect", {
|
|
265
|
+
x: "1098.003",
|
|
266
|
+
y: "825.238",
|
|
267
|
+
style: {
|
|
268
|
+
fill: tokens.colorNeutralForeground3,
|
|
269
|
+
opacity: 0.3
|
|
266
270
|
},
|
|
267
|
-
|
|
268
|
-
|
|
271
|
+
width: "85",
|
|
272
|
+
height: "425.952"
|
|
273
|
+
}), React__default.createElement("rect", {
|
|
274
|
+
x: "1233.003",
|
|
275
|
+
y: "847.489",
|
|
276
|
+
style: {
|
|
277
|
+
fill: tokens.colorNeutralForeground3,
|
|
278
|
+
opacity: 0.3
|
|
269
279
|
},
|
|
270
|
-
|
|
271
|
-
|
|
280
|
+
width: "85",
|
|
281
|
+
height: "403.701"
|
|
282
|
+
}), React__default.createElement("rect", {
|
|
283
|
+
x: "1368.003",
|
|
284
|
+
y: "699.989",
|
|
285
|
+
style: {
|
|
286
|
+
fill: tokens.colorNeutralForeground3,
|
|
287
|
+
opacity: 0.3
|
|
272
288
|
},
|
|
273
|
-
|
|
274
|
-
|
|
289
|
+
width: "85",
|
|
290
|
+
height: "551.201"
|
|
291
|
+
}), React__default.createElement("polygon", {
|
|
292
|
+
style: {
|
|
293
|
+
fill: tokens.colorBrandBackground
|
|
275
294
|
},
|
|
276
|
-
|
|
277
|
-
|
|
295
|
+
points: "583.634,1185.919 581.366,1181.462 723.336,1109.231 869.748,909.808 1003.791,1050.114 1141.593,912.312 1275.235,928.549 1409.365,774.548 1413.135,777.833 1277.265,933.832 1143.407,917.569 1003.709,1057.267 870.251,917.573 726.664,1113.149"
|
|
296
|
+
})), React__default.createElement("rect", {
|
|
297
|
+
x: "796.336",
|
|
298
|
+
y: "662.857",
|
|
299
|
+
style: {
|
|
300
|
+
fill: tokens.colorBrandBackground
|
|
278
301
|
},
|
|
279
|
-
|
|
280
|
-
|
|
302
|
+
width: "418.333",
|
|
303
|
+
height: "5"
|
|
304
|
+
}), React__default.createElement("rect", {
|
|
305
|
+
x: "937.543",
|
|
306
|
+
y: "717.857",
|
|
307
|
+
style: {
|
|
308
|
+
fill: tokens.colorBrandBackground
|
|
281
309
|
},
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
};
|
|
290
|
-
return {
|
|
291
|
-
enabled: true,
|
|
292
|
-
displayColors: true,
|
|
293
|
-
boxWidth: 10,
|
|
294
|
-
boxHeight: 10,
|
|
295
|
-
boxPadding: 5,
|
|
296
|
-
backgroundColor: tooltipBg,
|
|
297
|
-
borderColor: borderColor,
|
|
298
|
-
borderWidth: 1,
|
|
299
|
-
cornerRadius: 4,
|
|
300
|
-
padding: 10,
|
|
301
|
-
titleColor: tooltipTitleColor,
|
|
302
|
-
bodyColor: tooltipBodyColor,
|
|
303
|
-
titleFont: {
|
|
304
|
-
family: fontFamily,
|
|
305
|
-
size: fontSize
|
|
310
|
+
width: "135.92",
|
|
311
|
+
height: "5"
|
|
312
|
+
})), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
313
|
+
x: "264.978",
|
|
314
|
+
y: "441.049",
|
|
315
|
+
style: {
|
|
316
|
+
fill: tokens.colorNeutralBackground1
|
|
306
317
|
},
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
318
|
+
width: "482.581",
|
|
319
|
+
height: "379.067"
|
|
320
|
+
}), React__default.createElement("path", {
|
|
321
|
+
style: {
|
|
322
|
+
fill: tokens.colorNeutralStroke1
|
|
310
323
|
},
|
|
311
|
-
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
* Returns a Chart.js ticks callback to truncate long labels and add optional prefix/suffix.
|
|
316
|
-
*/
|
|
317
|
-
var createAxisLabelFormatter = function createAxisLabelFormatter(_ref) {
|
|
318
|
-
var _ref$maxLength = _ref.maxLength,
|
|
319
|
-
maxLength = _ref$maxLength === void 0 ? 12 : _ref$maxLength,
|
|
320
|
-
_ref$suffix = _ref.suffix,
|
|
321
|
-
suffix = _ref$suffix === void 0 ? '' : _ref$suffix,
|
|
322
|
-
_ref$prefix = _ref.prefix,
|
|
323
|
-
prefix = _ref$prefix === void 0 ? '' : _ref$prefix;
|
|
324
|
-
return function (value) {
|
|
325
|
-
var label = typeof value === 'number' ? this.getLabelForValue(value) : String(value);
|
|
326
|
-
var trimmed = label.length > maxLength ? label.slice(0, maxLength) + '…' : label;
|
|
327
|
-
return "" + prefix + trimmed + suffix;
|
|
328
|
-
};
|
|
329
|
-
};
|
|
330
|
-
function debounce(fn, delay) {
|
|
331
|
-
var timer = null;
|
|
332
|
-
return function () {
|
|
333
|
-
var _this = this;
|
|
334
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
335
|
-
args[_key] = arguments[_key];
|
|
336
|
-
}
|
|
337
|
-
if (timer) clearTimeout(timer);
|
|
338
|
-
timer = setTimeout(function () {
|
|
339
|
-
return fn.apply(_this, args);
|
|
340
|
-
}, delay);
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* useChartUtils — shared theming and chart helpers.
|
|
345
|
-
*/
|
|
346
|
-
function useChartUtils(theme) {
|
|
347
|
-
return useMemo(function () {
|
|
348
|
-
return {
|
|
349
|
-
lightenColor: lightenColor,
|
|
350
|
-
getFluentPalette: getFluentPalette,
|
|
351
|
-
createFluentTooltip: createFluentTooltip,
|
|
352
|
-
createAxisLabelFormatter: createAxisLabelFormatter,
|
|
353
|
-
debounce: debounce
|
|
354
|
-
};
|
|
355
|
-
}, [theme]);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
var LegendButton = function LegendButton(_ref) {
|
|
359
|
-
var label = _ref.label,
|
|
360
|
-
isVisible = _ref.isVisible,
|
|
361
|
-
color = _ref.color,
|
|
362
|
-
onClick = _ref.onClick,
|
|
363
|
-
_ref$style = _ref.style,
|
|
364
|
-
style = _ref$style === void 0 ? {} : _ref$style,
|
|
365
|
-
buttonRef = _ref.buttonRef;
|
|
366
|
-
return React__default.createElement(Tooltip, {
|
|
367
|
-
content: label,
|
|
368
|
-
relationship: "label"
|
|
369
|
-
}, React__default.createElement(Button, {
|
|
370
|
-
ref: buttonRef,
|
|
371
|
-
shape: "circular",
|
|
372
|
-
size: "small",
|
|
373
|
-
appearance: isVisible ? 'primary' : 'outline',
|
|
374
|
-
onClick: onClick,
|
|
375
|
-
style: _extends({
|
|
376
|
-
backgroundColor: isVisible ? color : 'transparent',
|
|
377
|
-
color: isVisible ? '#fff' : tokens.colorNeutralForeground1,
|
|
378
|
-
borderColor: color,
|
|
379
|
-
borderWidth: 1,
|
|
380
|
-
width: '100px',
|
|
381
|
-
padding: '4px 8px',
|
|
382
|
-
textAlign: 'center'
|
|
383
|
-
}, style)
|
|
384
|
-
}, React__default.createElement(Caption1, {
|
|
385
|
-
as: "span",
|
|
324
|
+
d: "M750.06,822.616H262.478V438.549H750.06V822.616z M267.478,817.616H745.06V443.549H267.478V817.616z"
|
|
325
|
+
})), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
326
|
+
x: "330.537",
|
|
327
|
+
y: "503.15",
|
|
386
328
|
style: {
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
329
|
+
fill: tokens.colorNeutralForeground3,
|
|
330
|
+
opacity: 0.3
|
|
331
|
+
},
|
|
332
|
+
width: "108.842",
|
|
333
|
+
height: "61.633"
|
|
334
|
+
}), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
335
|
+
x: "485.277",
|
|
336
|
+
y: "509.093",
|
|
337
|
+
style: {
|
|
338
|
+
fill: tokens.colorBrandBackground
|
|
339
|
+
},
|
|
340
|
+
width: "198.014",
|
|
341
|
+
height: "2.623"
|
|
342
|
+
}), React__default.createElement("rect", {
|
|
343
|
+
x: "485.277",
|
|
344
|
+
y: "532.656",
|
|
345
|
+
style: {
|
|
346
|
+
fill: tokens.colorNeutralForeground3,
|
|
347
|
+
opacity: 0.3
|
|
348
|
+
},
|
|
349
|
+
width: "198.014",
|
|
350
|
+
height: "2.623"
|
|
351
|
+
}), React__default.createElement("rect", {
|
|
352
|
+
x: "485.277",
|
|
353
|
+
y: "556.218",
|
|
354
|
+
style: {
|
|
355
|
+
fill: tokens.colorNeutralForeground3,
|
|
356
|
+
opacity: 0.3
|
|
357
|
+
},
|
|
358
|
+
width: "198.014",
|
|
359
|
+
height: "2.623"
|
|
360
|
+
}))), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
361
|
+
x: "381.691",
|
|
362
|
+
y: "687.747",
|
|
363
|
+
style: {
|
|
364
|
+
fill: tokens.colorNeutralForeground3,
|
|
365
|
+
opacity: 0.3
|
|
366
|
+
},
|
|
367
|
+
width: "22.73",
|
|
368
|
+
height: "70.417"
|
|
369
|
+
}), React__default.createElement("rect", {
|
|
370
|
+
x: "404.421",
|
|
371
|
+
y: "653.482",
|
|
372
|
+
style: {
|
|
373
|
+
fill: tokens.colorBrandBackground
|
|
374
|
+
},
|
|
375
|
+
width: "22.73",
|
|
376
|
+
height: "104.682"
|
|
377
|
+
})), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
378
|
+
x: "466.491",
|
|
379
|
+
y: "641.634",
|
|
380
|
+
style: {
|
|
381
|
+
fill: tokens.colorNeutralForeground3,
|
|
382
|
+
opacity: 0.3
|
|
383
|
+
},
|
|
384
|
+
width: "22.73",
|
|
385
|
+
height: "116.089"
|
|
386
|
+
}), React__default.createElement("rect", {
|
|
387
|
+
x: "489.221",
|
|
388
|
+
y: "714.758",
|
|
389
|
+
style: {
|
|
390
|
+
fill: tokens.colorBrandBackground
|
|
391
|
+
},
|
|
392
|
+
width: "22.73",
|
|
393
|
+
height: "42.965"
|
|
394
|
+
}))))));
|
|
394
395
|
};
|
|
395
396
|
|
|
396
397
|
/**
|
|
@@ -467,920 +468,717 @@ var Stack = /*#__PURE__*/React__default.memo(function (_ref) {
|
|
|
467
468
|
});
|
|
468
469
|
Stack.displayName = "Stack";
|
|
469
470
|
|
|
470
|
-
var
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
471
|
+
var NoDashboards = function NoDashboards(props) {
|
|
472
|
+
var height = props.height;
|
|
473
|
+
return createElement(Fragment, null, createElement(Stack, {
|
|
474
|
+
style: {
|
|
475
|
+
height: height || "100%"
|
|
476
|
+
},
|
|
477
|
+
justifyContent: "Center",
|
|
478
|
+
alignItems: "Center"
|
|
479
|
+
}, createElement(BusinessReportIcon, {
|
|
480
|
+
width: 200,
|
|
481
|
+
height: 200
|
|
482
|
+
}), createElement(Text, {
|
|
483
|
+
size: 500,
|
|
484
|
+
weight: 'semibold'
|
|
485
|
+
}, "No Dashboards Available")));
|
|
481
486
|
};
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
}), overflowItems.length > 0 && React__default.createElement(Menu, null, React__default.createElement(MenuTrigger, {
|
|
513
|
-
disableButtonEnhancement: true
|
|
514
|
-
}, React__default.createElement(MenuButton, {
|
|
515
|
-
size: "small",
|
|
516
|
-
appearance: "transparent"
|
|
517
|
-
}, "+", overflowItems.length)), React__default.createElement(MenuPopover, {
|
|
487
|
+
|
|
488
|
+
var useRenderLabelStyles = /*#__PURE__*/makeStyles({
|
|
489
|
+
labelContainer: /*#__PURE__*/_extends({
|
|
490
|
+
display: "flex",
|
|
491
|
+
flexDirection: "row",
|
|
492
|
+
justifyContent: "flex-start",
|
|
493
|
+
alignItems: "center"
|
|
494
|
+
}, /*#__PURE__*/shorthands.gap("6px")),
|
|
495
|
+
iconStyles: {
|
|
496
|
+
width: "26px"
|
|
497
|
+
},
|
|
498
|
+
item: {
|
|
499
|
+
paddingLeft: "15px"
|
|
500
|
+
}
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
var RenderLabel = function RenderLabel(props) {
|
|
504
|
+
var label = props.label,
|
|
505
|
+
icon = props.icon,
|
|
506
|
+
isRequired = props.isRequired;
|
|
507
|
+
var styles = useRenderLabelStyles();
|
|
508
|
+
return createElement(Fragment, null, createElement("div", {
|
|
509
|
+
className: styles.labelContainer
|
|
510
|
+
}, icon && isValidElement(icon) ? icon : createElement(Icon, {
|
|
511
|
+
icon: icon,
|
|
512
|
+
className: styles.iconStyles,
|
|
513
|
+
width: "20px",
|
|
514
|
+
height: "20px",
|
|
515
|
+
color: tokens.colorBrandForeground1
|
|
516
|
+
}), createElement(Caption1, {
|
|
518
517
|
style: {
|
|
519
|
-
|
|
520
|
-
maxWidth: '200px'
|
|
518
|
+
color: tokens.colorBrandForeground1
|
|
521
519
|
}
|
|
522
|
-
},
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
padding: 0
|
|
529
|
-
}
|
|
530
|
-
}, React__default.createElement(LegendButton, {
|
|
531
|
-
label: renderLabel(item),
|
|
532
|
-
color: getColor(item),
|
|
533
|
-
isVisible: isVisible,
|
|
534
|
-
onClick: function onClick() {
|
|
535
|
-
return toggleLabel(label);
|
|
536
|
-
},
|
|
537
|
-
style: {
|
|
538
|
-
width: '100px',
|
|
539
|
-
textAlign: 'left'
|
|
540
|
-
}
|
|
541
|
-
}));
|
|
542
|
-
}))))));
|
|
543
|
-
}
|
|
520
|
+
}, label), createElement(Caption1, {
|
|
521
|
+
style: {
|
|
522
|
+
color: tokens.colorPaletteRedForeground1
|
|
523
|
+
}
|
|
524
|
+
}, isRequired ? " *" : "")));
|
|
525
|
+
};
|
|
544
526
|
|
|
545
|
-
var
|
|
546
|
-
var
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
527
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
|
|
528
|
+
var useStyles = function useStyles() {
|
|
529
|
+
return {
|
|
530
|
+
gridContainer: css(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n display: grid;\n gap: 4px;\n padding: 8px;\n justify-content: center;\n "]))),
|
|
531
|
+
cell: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n width: 30px;\n height: 30px;\n border: 1px solid ", ";\n background-color: ", ";\n cursor: pointer;\n transition: background-color 150ms ease, transform 150ms ease;\n will-change: background-color, transform;\n "])), tokens.colorNeutralStroke1, tokens.colorNeutralBackground1),
|
|
532
|
+
hoveredCell: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n background-color: ", ";\n transform: scale(1.05);\n "])), tokens.colorNeutralBackground1Hover),
|
|
533
|
+
selectedCell: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n background-color: ", ";\n "])), tokens.colorNeutralBackground1Selected),
|
|
534
|
+
menuPopover: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n min-width: fit-content;\n "]))),
|
|
535
|
+
bottomText: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n padding-left: 8px;\n padding-right: 8px;\n "]))),
|
|
536
|
+
zoomContainer: css({
|
|
537
|
+
display: 'flex',
|
|
538
|
+
flexDirection: 'row',
|
|
539
|
+
alignItems: 'center',
|
|
540
|
+
gap: '6px',
|
|
541
|
+
width: '100%',
|
|
542
|
+
boxSizing: 'border-box',
|
|
543
|
+
padding: '8px 0px'
|
|
544
|
+
})
|
|
545
|
+
};
|
|
546
|
+
};
|
|
547
|
+
var SelectZoom = function SelectZoom(props) {
|
|
548
|
+
var onChange = props.onChange,
|
|
549
|
+
defaultValues = props.values,
|
|
550
|
+
maxCols = props.maxCols,
|
|
551
|
+
maxRows = props.maxRows;
|
|
552
|
+
var Settings = bundleIcon(Settings20Filled, Settings20Regular);
|
|
553
|
+
var styles = useStyles();
|
|
554
|
+
var _React$useState = useState(defaultValues),
|
|
555
|
+
values = _React$useState[0],
|
|
556
|
+
setValues = _React$useState[1];
|
|
557
|
+
var _React$useState2 = useState(null),
|
|
558
|
+
hovered = _React$useState2[0],
|
|
559
|
+
setHovered = _React$useState2[1];
|
|
560
|
+
var _React$useState3 = useState(false),
|
|
561
|
+
open = _React$useState3[0],
|
|
562
|
+
setOpen = _React$useState3[1];
|
|
554
563
|
useEffect(function () {
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
564
|
+
setValues(defaultValues);
|
|
565
|
+
}, [defaultValues]);
|
|
566
|
+
var onOpenChange = function onOpenChange(_, data) {
|
|
567
|
+
setOpen(data.open);
|
|
568
|
+
setHovered(null);
|
|
569
|
+
};
|
|
570
|
+
var handleCellClick = function handleCellClick(row, col) {
|
|
571
|
+
var newValues = {
|
|
572
|
+
spanCols: col + 1,
|
|
573
|
+
spanRows: row + 1
|
|
561
574
|
};
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
575
|
+
setValues(newValues);
|
|
576
|
+
onChange == null || onChange(newValues);
|
|
577
|
+
setOpen(false);
|
|
578
|
+
};
|
|
579
|
+
var handleCellHover = function handleCellHover(row, col) {
|
|
580
|
+
setHovered({
|
|
581
|
+
spanCols: col + 1,
|
|
582
|
+
spanRows: row + 1
|
|
583
|
+
});
|
|
584
|
+
};
|
|
585
|
+
var handleMouseLeave = function handleMouseLeave() {
|
|
586
|
+
setHovered(null);
|
|
587
|
+
};
|
|
588
|
+
var renderGridCells = function renderGridCells() {
|
|
589
|
+
var cells = [];
|
|
590
|
+
var _loop = function _loop(row) {
|
|
591
|
+
var _loop2 = function _loop2(col) {
|
|
592
|
+
var isSelected = row < values.spanRows && col < values.spanCols;
|
|
593
|
+
var isHovered = hovered && row < hovered.spanRows && col < hovered.spanCols;
|
|
594
|
+
cells.push(createElement("div", {
|
|
595
|
+
key: row + "-" + col,
|
|
596
|
+
className: styles.cell + " " + (isHovered ? styles.hoveredCell : "") + " " + (isSelected ? styles.selectedCell : ""),
|
|
597
|
+
onMouseEnter: function onMouseEnter() {
|
|
598
|
+
return handleCellHover(row, col);
|
|
599
|
+
},
|
|
600
|
+
onClick: function onClick() {
|
|
601
|
+
return handleCellClick(row, col);
|
|
602
|
+
}
|
|
603
|
+
}));
|
|
604
|
+
};
|
|
605
|
+
for (var col = 0; col < maxCols; col++) {
|
|
606
|
+
_loop2(col);
|
|
607
|
+
}
|
|
568
608
|
};
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
overflowItems: items.slice(maxVisible)
|
|
609
|
+
for (var row = 0; row < maxRows; row++) {
|
|
610
|
+
_loop(row);
|
|
611
|
+
}
|
|
612
|
+
return cells;
|
|
574
613
|
};
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
getColor: function getColor(d) {
|
|
597
|
-
return seriesColors[d.label];
|
|
614
|
+
// Compute popover width dynamically
|
|
615
|
+
var popoverWidth = useMemo(function () {
|
|
616
|
+
return 30 * maxCols + 4 * (maxCols - 1) + 32;
|
|
617
|
+
}, [maxCols]); // 30px for each cell, 4px gap, and 32px padding (16 left and right)
|
|
618
|
+
return createElement(Menu, {
|
|
619
|
+
open: open,
|
|
620
|
+
onOpenChange: onOpenChange
|
|
621
|
+
}, createElement(MenuTrigger, {
|
|
622
|
+
disableButtonEnhancement: true
|
|
623
|
+
}, createElement(Tooltip, {
|
|
624
|
+
content: "Configure",
|
|
625
|
+
relationship: "label"
|
|
626
|
+
}, createElement(MenuButton, {
|
|
627
|
+
icon: createElement(Settings, null),
|
|
628
|
+
size: "small",
|
|
629
|
+
appearance: "transparent"
|
|
630
|
+
}))), createElement(MenuPopover, {
|
|
631
|
+
style: {
|
|
632
|
+
width: popoverWidth + "px",
|
|
633
|
+
minWidth: "120px",
|
|
634
|
+
padding: 8
|
|
598
635
|
}
|
|
599
|
-
}
|
|
636
|
+
}, createElement("div", {
|
|
637
|
+
className: styles.zoomContainer
|
|
638
|
+
}, createElement(RenderLabel, {
|
|
639
|
+
label: "Span (" + values.spanCols + " \xD7 " + values.spanRows + ")"
|
|
640
|
+
})), createElement("div", {
|
|
641
|
+
className: styles.gridContainer,
|
|
642
|
+
style: {
|
|
643
|
+
gridTemplateColumns: "repeat(" + maxCols + ", 30px)",
|
|
644
|
+
gridTemplateRows: "repeat(" + maxRows + ", 30px)"
|
|
645
|
+
},
|
|
646
|
+
onMouseLeave: handleMouseLeave
|
|
647
|
+
}, renderGridCells()), createElement(Caption1, {
|
|
648
|
+
className: styles.bottomText
|
|
649
|
+
}, "Click to set span")));
|
|
600
650
|
};
|
|
601
651
|
|
|
602
|
-
var
|
|
603
|
-
var
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
652
|
+
var LegendButton = function LegendButton(_ref) {
|
|
653
|
+
var label = _ref.label,
|
|
654
|
+
isVisible = _ref.isVisible,
|
|
655
|
+
color = _ref.color,
|
|
656
|
+
onClick = _ref.onClick,
|
|
657
|
+
_ref$style = _ref.style,
|
|
658
|
+
style = _ref$style === void 0 ? {} : _ref$style,
|
|
659
|
+
buttonRef = _ref.buttonRef;
|
|
660
|
+
return React__default.createElement(Tooltip, {
|
|
661
|
+
content: label,
|
|
662
|
+
relationship: "label"
|
|
663
|
+
}, React__default.createElement(Button, {
|
|
664
|
+
ref: buttonRef,
|
|
665
|
+
shape: "circular",
|
|
666
|
+
size: "small",
|
|
667
|
+
appearance: isVisible ? 'primary' : 'outline',
|
|
668
|
+
onClick: onClick,
|
|
669
|
+
style: _extends({
|
|
670
|
+
backgroundColor: isVisible ? color : 'transparent',
|
|
671
|
+
color: isVisible ? '#fff' : tokens.colorNeutralForeground1,
|
|
672
|
+
borderColor: color,
|
|
673
|
+
borderWidth: 1,
|
|
674
|
+
width: '100px',
|
|
675
|
+
padding: '4px 8px',
|
|
676
|
+
textAlign: 'center'
|
|
677
|
+
}, style)
|
|
678
|
+
}, React__default.createElement(Caption1, {
|
|
679
|
+
as: "span",
|
|
680
|
+
style: {
|
|
681
|
+
display: 'block',
|
|
682
|
+
overflow: 'hidden',
|
|
683
|
+
textOverflow: 'ellipsis',
|
|
684
|
+
whiteSpace: 'nowrap',
|
|
685
|
+
lineHeight: '1.25'
|
|
686
|
+
}
|
|
687
|
+
}, label)));
|
|
617
688
|
};
|
|
618
689
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
var color = lightenColor(base, 0.3);
|
|
647
|
-
acc[series.label] = color;
|
|
648
|
-
return acc;
|
|
649
|
-
}, {});
|
|
650
|
-
}, [data]);
|
|
651
|
-
var toggleSeries = function toggleSeries(label) {
|
|
652
|
-
setVisibleSeries(function (prev) {
|
|
653
|
-
var isVisible = prev.includes(label);
|
|
654
|
-
var next = isVisible ? prev.filter(function (l) {
|
|
655
|
-
return l !== label;
|
|
656
|
-
}) : [].concat(prev, [label]);
|
|
657
|
-
return next.length === 0 && data.length > 0 ? [data[0].label] : next;
|
|
658
|
-
});
|
|
659
|
-
};
|
|
660
|
-
// Extract all unique x-axis categories (from all series)
|
|
661
|
-
var allCategories = useMemo(function () {
|
|
662
|
-
var categorySet = new Set();
|
|
663
|
-
data.forEach(function (series) {
|
|
664
|
-
series.data.forEach(function (datum) {
|
|
665
|
-
categorySet.add(getPrimary(datum));
|
|
666
|
-
});
|
|
667
|
-
});
|
|
668
|
-
return Array.from(categorySet);
|
|
669
|
-
}, [data, getPrimary]);
|
|
670
|
-
// Construct Chart.js datasets
|
|
671
|
-
var chartData = useMemo(function () {
|
|
672
|
-
return {
|
|
673
|
-
labels: allCategories,
|
|
674
|
-
datasets: data.filter(function (series) {
|
|
675
|
-
return visibleSeries.includes(series.label);
|
|
676
|
-
}).map(function (series) {
|
|
677
|
-
return {
|
|
678
|
-
label: series.label,
|
|
679
|
-
backgroundColor: seriesColors[series.label],
|
|
680
|
-
data: allCategories.map(function (cat) {
|
|
681
|
-
var found = series.data.find(function (d) {
|
|
682
|
-
return getPrimary(d) === cat;
|
|
683
|
-
});
|
|
684
|
-
return found ? getSecondary(found) : 0;
|
|
685
|
-
}),
|
|
686
|
-
// Assign y-axis based on series type when stacked
|
|
687
|
-
yAxisID: stacked ? series.type === 'line' ? 'y1' : 'y' : 'y'
|
|
688
|
-
};
|
|
689
|
-
})
|
|
690
|
-
};
|
|
691
|
-
}, [data, visibleSeries, allCategories, seriesColors, stacked]);
|
|
692
|
-
var _useMemo = useMemo(function () {
|
|
693
|
-
return {
|
|
694
|
-
fontFamily: theme.fontFamilyBase,
|
|
695
|
-
fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,
|
|
696
|
-
labelColor: theme.colorNeutralForeground1,
|
|
697
|
-
gridColor: theme.colorNeutralStroke2
|
|
698
|
-
};
|
|
699
|
-
}, [theme]),
|
|
700
|
-
fontFamily = _useMemo.fontFamily,
|
|
701
|
-
fontSize = _useMemo.fontSize,
|
|
702
|
-
labelColor = _useMemo.labelColor,
|
|
703
|
-
gridColor = _useMemo.gridColor;
|
|
704
|
-
var options = useMemo(function () {
|
|
705
|
-
return {
|
|
706
|
-
responsive: true,
|
|
707
|
-
maintainAspectRatio: false,
|
|
708
|
-
plugins: {
|
|
709
|
-
title: {
|
|
710
|
-
display: !!title,
|
|
711
|
-
text: title,
|
|
712
|
-
font: {
|
|
713
|
-
size: 14,
|
|
714
|
-
family: theme.fontFamilyBase,
|
|
715
|
-
weight: theme.fontWeightSemibold
|
|
716
|
-
},
|
|
717
|
-
color: theme.colorNeutralForeground1,
|
|
718
|
-
padding: {
|
|
719
|
-
top: 20,
|
|
720
|
-
bottom: 20
|
|
721
|
-
}
|
|
722
|
-
},
|
|
723
|
-
datalabels: {
|
|
724
|
-
display: showDatalabels,
|
|
725
|
-
color: theme.colorNeutralForeground1,
|
|
726
|
-
font: {
|
|
727
|
-
family: theme.fontFamilyBase,
|
|
728
|
-
size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14
|
|
729
|
-
}
|
|
730
|
-
},
|
|
731
|
-
legend: {
|
|
732
|
-
display: false
|
|
733
|
-
},
|
|
734
|
-
tooltip: createFluentTooltip(theme)
|
|
735
|
-
},
|
|
736
|
-
scales: _extends({
|
|
737
|
-
x: {
|
|
738
|
-
stacked: stacked,
|
|
739
|
-
ticks: {
|
|
740
|
-
callback: createAxisLabelFormatter({
|
|
741
|
-
maxLength: 10
|
|
742
|
-
}),
|
|
743
|
-
color: labelColor,
|
|
744
|
-
font: {
|
|
745
|
-
family: fontFamily,
|
|
746
|
-
size: fontSize
|
|
747
|
-
}
|
|
748
|
-
},
|
|
749
|
-
grid: {
|
|
750
|
-
color: gridColor
|
|
751
|
-
}
|
|
752
|
-
},
|
|
753
|
-
y: {
|
|
754
|
-
type: 'linear',
|
|
755
|
-
position: 'left',
|
|
756
|
-
stacked: stacked,
|
|
757
|
-
ticks: {
|
|
758
|
-
callback: createAxisLabelFormatter({
|
|
759
|
-
maxLength: 10
|
|
760
|
-
}),
|
|
761
|
-
color: labelColor,
|
|
762
|
-
font: {
|
|
763
|
-
family: fontFamily,
|
|
764
|
-
size: fontSize
|
|
765
|
-
}
|
|
766
|
-
},
|
|
767
|
-
grid: {
|
|
768
|
-
color: gridColor
|
|
769
|
-
}
|
|
770
|
-
}
|
|
771
|
-
}, stacked && {
|
|
772
|
-
y1: {
|
|
773
|
-
type: 'linear',
|
|
774
|
-
position: 'right',
|
|
775
|
-
ticks: {
|
|
776
|
-
callback: createAxisLabelFormatter({
|
|
777
|
-
maxLength: 10
|
|
778
|
-
}),
|
|
779
|
-
color: labelColor,
|
|
780
|
-
font: {
|
|
781
|
-
family: fontFamily,
|
|
782
|
-
size: fontSize
|
|
783
|
-
}
|
|
784
|
-
},
|
|
785
|
-
grid: {
|
|
786
|
-
drawOnChartArea: false
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
})
|
|
790
|
-
};
|
|
791
|
-
}, [title, showDatalabels, theme, fontFamily, fontSize, labelColor, gridColor, stacked, createFluentTooltip]);
|
|
792
|
-
return React__default.createElement("div", {
|
|
793
|
-
className: styles.chartWithLegend
|
|
690
|
+
var styles = {
|
|
691
|
+
wrapper: /*#__PURE__*/css({
|
|
692
|
+
display: 'flex',
|
|
693
|
+
flexWrap: 'nowrap',
|
|
694
|
+
overflow: 'hidden',
|
|
695
|
+
justifyContent: 'center',
|
|
696
|
+
gap: 10,
|
|
697
|
+
padding: 2,
|
|
698
|
+
width: '100%',
|
|
699
|
+
boxSizing: 'border-box'
|
|
700
|
+
})
|
|
701
|
+
};
|
|
702
|
+
function LegendContainer(props) {
|
|
703
|
+
var containerRef = props.containerRef,
|
|
704
|
+
visibleItems = props.visibleItems,
|
|
705
|
+
overflowItems = props.overflowItems,
|
|
706
|
+
visibleLabels = props.visibleLabels,
|
|
707
|
+
toggleLabel = props.toggleLabel,
|
|
708
|
+
renderLabel = props.renderLabel,
|
|
709
|
+
getColor = props.getColor;
|
|
710
|
+
return React__default.createElement(Stack, {
|
|
711
|
+
justifyContent: "center",
|
|
712
|
+
alignItems: "center",
|
|
713
|
+
marginLeft: "10px",
|
|
714
|
+
marginRight: "10px",
|
|
715
|
+
marginTop: "25px",
|
|
716
|
+
marginBottom: "20px"
|
|
794
717
|
}, React__default.createElement("div", {
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
}
|
|
808
|
-
|
|
809
|
-
Chart.register(ChartDataLabels);
|
|
810
|
-
Chart.register(CategoryScale, LinearScale, BarElement, LineElement, PointElement, Tooltip$1, Legend, Title);
|
|
811
|
-
function ComboChart(_ref) {
|
|
812
|
-
var data = _ref.data,
|
|
813
|
-
getPrimary = _ref.getPrimary,
|
|
814
|
-
getSecondary = _ref.getSecondary,
|
|
815
|
-
title = _ref.title,
|
|
816
|
-
_ref$showDataLabels = _ref.showDataLabels,
|
|
817
|
-
showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
|
|
818
|
-
_ref$theme = _ref.theme,
|
|
819
|
-
theme = _ref$theme === void 0 ? webLightTheme : _ref$theme;
|
|
820
|
-
var _useState = useState(function () {
|
|
821
|
-
return data.map(function (s) {
|
|
822
|
-
return s.label;
|
|
823
|
-
});
|
|
824
|
-
}),
|
|
825
|
-
visibleSeries = _useState[0],
|
|
826
|
-
setVisibleSeries = _useState[1];
|
|
827
|
-
var styles = useGraphGlobalStyles();
|
|
828
|
-
var _useChartUtils = useChartUtils(theme),
|
|
829
|
-
lightenColor = _useChartUtils.lightenColor,
|
|
830
|
-
getFluentPalette = _useChartUtils.getFluentPalette,
|
|
831
|
-
createFluentTooltip = _useChartUtils.createFluentTooltip;
|
|
832
|
-
var seriesColors = useMemo(function () {
|
|
833
|
-
return data.reduce(function (acc, series, idx) {
|
|
834
|
-
var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
|
|
835
|
-
acc[series.label] = lightenColor(base, 0.3);
|
|
836
|
-
return acc;
|
|
837
|
-
}, {});
|
|
838
|
-
}, [data, theme]);
|
|
839
|
-
var toggleSeries = function toggleSeries(label) {
|
|
840
|
-
setVisibleSeries(function (prev) {
|
|
841
|
-
var isVisible = prev.includes(label);
|
|
842
|
-
var next = isVisible ? prev.filter(function (l) {
|
|
843
|
-
return l !== label;
|
|
844
|
-
}) : [].concat(prev, [label]);
|
|
845
|
-
return next.length === 0 ? [data[0].label] : next;
|
|
846
|
-
});
|
|
847
|
-
};
|
|
848
|
-
var allCategories = useMemo(function () {
|
|
849
|
-
var set = new Set();
|
|
850
|
-
data.forEach(function (series) {
|
|
851
|
-
return series.data.forEach(function (d) {
|
|
852
|
-
return set.add(getPrimary(d));
|
|
853
|
-
});
|
|
854
|
-
});
|
|
855
|
-
return Array.from(set);
|
|
856
|
-
}, [data, getPrimary]);
|
|
857
|
-
var chartData = useMemo(function () {
|
|
858
|
-
var sortedSeries = data.filter(function (series) {
|
|
859
|
-
return visibleSeries.includes(series.label);
|
|
860
|
-
}).sort(function (a, b) {
|
|
861
|
-
// Ensure bars come before lines
|
|
862
|
-
if (a.type === 'bar' && b.type === 'line') return -1;
|
|
863
|
-
if (a.type === 'line' && b.type === 'bar') return 1;
|
|
864
|
-
return 0;
|
|
718
|
+
ref: containerRef,
|
|
719
|
+
className: styles.wrapper
|
|
720
|
+
}, visibleItems.map(function (item) {
|
|
721
|
+
var label = item.label;
|
|
722
|
+
var isVisible = visibleLabels.length === 0 || visibleLabels.includes(label);
|
|
723
|
+
return React__default.createElement(LegendButton, {
|
|
724
|
+
key: label,
|
|
725
|
+
label: renderLabel(item),
|
|
726
|
+
color: getColor(item),
|
|
727
|
+
isVisible: isVisible,
|
|
728
|
+
onClick: function onClick() {
|
|
729
|
+
return toggleLabel(label);
|
|
730
|
+
}
|
|
865
731
|
});
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
tension: series.type === 'line' ? 0.4 : 0,
|
|
884
|
-
pointRadius: series.type === 'line' ? 3 : 0,
|
|
885
|
-
borderWidth: series.type === 'line' ? 2 : 1,
|
|
886
|
-
order: series.type === 'bar' ? 1 : 0
|
|
887
|
-
};
|
|
888
|
-
})
|
|
889
|
-
};
|
|
890
|
-
}, [data, visibleSeries, allCategories, getPrimary, getSecondary, seriesColors]);
|
|
891
|
-
var _useMemo = useMemo(function () {
|
|
892
|
-
return {
|
|
893
|
-
fontFamily: theme.fontFamilyBase,
|
|
894
|
-
fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,
|
|
895
|
-
labelColor: theme.colorNeutralForeground1,
|
|
896
|
-
gridColor: theme.colorNeutralStroke2
|
|
897
|
-
};
|
|
898
|
-
}, [theme]),
|
|
899
|
-
fontFamily = _useMemo.fontFamily,
|
|
900
|
-
fontSize = _useMemo.fontSize,
|
|
901
|
-
labelColor = _useMemo.labelColor,
|
|
902
|
-
gridColor = _useMemo.gridColor;
|
|
903
|
-
var options = useMemo(function () {
|
|
904
|
-
return {
|
|
905
|
-
responsive: true,
|
|
906
|
-
maintainAspectRatio: false,
|
|
907
|
-
plugins: {
|
|
908
|
-
title: {
|
|
909
|
-
display: !!title,
|
|
910
|
-
text: title,
|
|
911
|
-
font: {
|
|
912
|
-
size: 14,
|
|
913
|
-
family: theme.fontFamilyBase,
|
|
914
|
-
weight: theme.fontWeightSemibold
|
|
915
|
-
},
|
|
916
|
-
color: theme.colorNeutralForeground1,
|
|
917
|
-
padding: {
|
|
918
|
-
top: 20,
|
|
919
|
-
bottom: 20
|
|
920
|
-
}
|
|
921
|
-
},
|
|
922
|
-
datalabels: {
|
|
923
|
-
display: showDataLabels,
|
|
924
|
-
color: theme.colorNeutralForeground1,
|
|
925
|
-
font: {
|
|
926
|
-
family: theme.fontFamilyBase,
|
|
927
|
-
size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14
|
|
928
|
-
}
|
|
929
|
-
},
|
|
930
|
-
legend: {
|
|
931
|
-
display: false
|
|
932
|
-
},
|
|
933
|
-
tooltip: createFluentTooltip(theme)
|
|
934
|
-
},
|
|
935
|
-
scales: {
|
|
936
|
-
x: {
|
|
937
|
-
ticks: {
|
|
938
|
-
color: labelColor,
|
|
939
|
-
font: {
|
|
940
|
-
family: fontFamily,
|
|
941
|
-
size: fontSize
|
|
942
|
-
}
|
|
943
|
-
},
|
|
944
|
-
grid: {
|
|
945
|
-
color: gridColor
|
|
946
|
-
}
|
|
947
|
-
},
|
|
948
|
-
y: {
|
|
949
|
-
position: 'left',
|
|
950
|
-
ticks: {
|
|
951
|
-
color: labelColor,
|
|
952
|
-
font: {
|
|
953
|
-
family: fontFamily,
|
|
954
|
-
size: fontSize
|
|
955
|
-
}
|
|
956
|
-
},
|
|
957
|
-
grid: {
|
|
958
|
-
color: gridColor
|
|
959
|
-
},
|
|
960
|
-
stacked: false
|
|
961
|
-
}
|
|
732
|
+
}), overflowItems.length > 0 && React__default.createElement(Menu, null, React__default.createElement(MenuTrigger, {
|
|
733
|
+
disableButtonEnhancement: true
|
|
734
|
+
}, React__default.createElement(MenuButton, {
|
|
735
|
+
size: "small",
|
|
736
|
+
appearance: "transparent"
|
|
737
|
+
}, "+", overflowItems.length)), React__default.createElement(MenuPopover, {
|
|
738
|
+
style: {
|
|
739
|
+
minWidth: 'fit-content',
|
|
740
|
+
maxWidth: '200px'
|
|
741
|
+
}
|
|
742
|
+
}, React__default.createElement(MenuList, null, overflowItems.map(function (item) {
|
|
743
|
+
var label = item.label;
|
|
744
|
+
var isVisible = visibleLabels.length === 0 || visibleLabels.includes(label);
|
|
745
|
+
return React__default.createElement(MenuItem, {
|
|
746
|
+
key: label,
|
|
747
|
+
style: {
|
|
748
|
+
padding: 0
|
|
962
749
|
}
|
|
963
|
-
}
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
}
|
|
976
|
-
data: data,
|
|
977
|
-
visibleSeries: visibleSeries,
|
|
978
|
-
seriesColors: seriesColors,
|
|
979
|
-
toggleSeries: toggleSeries
|
|
980
|
-
}))));
|
|
750
|
+
}, React__default.createElement(LegendButton, {
|
|
751
|
+
label: renderLabel(item),
|
|
752
|
+
color: getColor(item),
|
|
753
|
+
isVisible: isVisible,
|
|
754
|
+
onClick: function onClick() {
|
|
755
|
+
return toggleLabel(label);
|
|
756
|
+
},
|
|
757
|
+
style: {
|
|
758
|
+
width: '100px',
|
|
759
|
+
textAlign: 'left'
|
|
760
|
+
}
|
|
761
|
+
}));
|
|
762
|
+
}))))));
|
|
981
763
|
}
|
|
982
764
|
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
}), React__default.createElement("path", {
|
|
1018
|
-
style: {
|
|
1019
|
-
fill: tokens.colorNeutralStroke1
|
|
1020
|
-
},
|
|
1021
|
-
d: "M1527.5,1338.69H483.506V565.526H1527.5V1338.69z M488.506,1333.69H1522.5V570.526H488.506V1333.69z"
|
|
1022
|
-
})), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
1023
|
-
x: "558.003",
|
|
1024
|
-
y: "1086.698",
|
|
1025
|
-
style: {
|
|
1026
|
-
fill: tokens.colorNeutralForeground3,
|
|
1027
|
-
opacity: 0.3
|
|
1028
|
-
},
|
|
1029
|
-
width: "85",
|
|
1030
|
-
height: "164.492"
|
|
1031
|
-
}), React__default.createElement("rect", {
|
|
1032
|
-
x: "693.003",
|
|
1033
|
-
y: "1004.672",
|
|
1034
|
-
style: {
|
|
1035
|
-
fill: tokens.colorNeutralForeground3,
|
|
1036
|
-
opacity: 0.3
|
|
1037
|
-
},
|
|
1038
|
-
width: "85",
|
|
1039
|
-
height: "246.519"
|
|
1040
|
-
}), React__default.createElement("rect", {
|
|
1041
|
-
x: "828.003",
|
|
1042
|
-
y: "835.487",
|
|
1043
|
-
style: {
|
|
1044
|
-
fill: tokens.colorNeutralForeground3,
|
|
1045
|
-
opacity: 0.3
|
|
1046
|
-
},
|
|
1047
|
-
width: "85",
|
|
1048
|
-
height: "415.703"
|
|
1049
|
-
}), React__default.createElement("rect", {
|
|
1050
|
-
x: "963.003",
|
|
1051
|
-
y: "955.6",
|
|
1052
|
-
style: {
|
|
1053
|
-
fill: tokens.colorNeutralForeground3,
|
|
1054
|
-
opacity: 0.3
|
|
1055
|
-
},
|
|
1056
|
-
width: "85",
|
|
1057
|
-
height: "295.591"
|
|
1058
|
-
}), React__default.createElement("rect", {
|
|
1059
|
-
x: "1098.003",
|
|
1060
|
-
y: "825.238",
|
|
1061
|
-
style: {
|
|
1062
|
-
fill: tokens.colorNeutralForeground3,
|
|
1063
|
-
opacity: 0.3
|
|
1064
|
-
},
|
|
1065
|
-
width: "85",
|
|
1066
|
-
height: "425.952"
|
|
1067
|
-
}), React__default.createElement("rect", {
|
|
1068
|
-
x: "1233.003",
|
|
1069
|
-
y: "847.489",
|
|
1070
|
-
style: {
|
|
1071
|
-
fill: tokens.colorNeutralForeground3,
|
|
1072
|
-
opacity: 0.3
|
|
1073
|
-
},
|
|
1074
|
-
width: "85",
|
|
1075
|
-
height: "403.701"
|
|
1076
|
-
}), React__default.createElement("rect", {
|
|
1077
|
-
x: "1368.003",
|
|
1078
|
-
y: "699.989",
|
|
1079
|
-
style: {
|
|
1080
|
-
fill: tokens.colorNeutralForeground3,
|
|
1081
|
-
opacity: 0.3
|
|
1082
|
-
},
|
|
1083
|
-
width: "85",
|
|
1084
|
-
height: "551.201"
|
|
1085
|
-
}), React__default.createElement("polygon", {
|
|
1086
|
-
style: {
|
|
1087
|
-
fill: tokens.colorBrandBackground
|
|
765
|
+
/**
|
|
766
|
+
* Lightens a given hex color by a percentage amount (0 to 1).
|
|
767
|
+
*/
|
|
768
|
+
var lightenColor = function lightenColor(hex, amount) {
|
|
769
|
+
if (!/^#?[0-9A-Fa-f]{6}$/.test(hex)) return hex;
|
|
770
|
+
if (hex.startsWith('#')) hex = hex.slice(1);
|
|
771
|
+
var r = parseInt(hex.slice(0, 2), 16);
|
|
772
|
+
var g = parseInt(hex.slice(2, 4), 16);
|
|
773
|
+
var b = parseInt(hex.slice(4, 6), 16);
|
|
774
|
+
r = Math.min(255, Math.floor(r + (255 - r) * amount));
|
|
775
|
+
g = Math.min(255, Math.floor(g + (255 - g) * amount));
|
|
776
|
+
b = Math.min(255, Math.floor(b + (255 - b) * amount));
|
|
777
|
+
var toHex = function toHex(v) {
|
|
778
|
+
return v.toString(16).padStart(2, '0');
|
|
779
|
+
};
|
|
780
|
+
return "#" + toHex(r) + toHex(g) + toHex(b);
|
|
781
|
+
};
|
|
782
|
+
var getFluentPalette = function getFluentPalette(_theme) {
|
|
783
|
+
return ['#4e79a7', '#f28e2c', '#e15759', '#76b7b2', '#59a14f', '#edc949', '#af7aa1', '#ff9da7', '#9c755f', '#bab0ab', '#8cd17d', '#b6992d', '#d37295', '#fabfd2', '#79706e'];
|
|
784
|
+
};
|
|
785
|
+
/**
|
|
786
|
+
* Smart Fluent tooltip generator with chart-type awareness.
|
|
787
|
+
*/
|
|
788
|
+
function createFluentTooltip(theme) {
|
|
789
|
+
var fontFamily = theme.fontFamilyBase;
|
|
790
|
+
var fontSize = parseInt(theme.fontSizeBase200.replace('px', '')) || 14;
|
|
791
|
+
var tooltipBg = theme.colorNeutralBackground1;
|
|
792
|
+
var tooltipTitleColor = theme.colorNeutralForeground1;
|
|
793
|
+
var tooltipBodyColor = theme.colorNeutralForeground2;
|
|
794
|
+
var borderColor = theme.colorNeutralStroke2;
|
|
795
|
+
var callbacks = {
|
|
796
|
+
title: function title(context) {
|
|
797
|
+
var _context$0$label, _context$;
|
|
798
|
+
return (_context$0$label = (_context$ = context[0]) == null ? void 0 : _context$.label) != null ? _context$0$label : '';
|
|
1088
799
|
},
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
800
|
+
label: function label(item) {
|
|
801
|
+
var datasetLabel = 'label' in item.dataset && typeof item.dataset.label === 'string' ? item.dataset.label : 'Value';
|
|
802
|
+
var raw = item.raw;
|
|
803
|
+
// Bubble format { x, y, r }
|
|
804
|
+
if (typeof raw === 'object' && raw !== null && 'x' in raw && 'y' in raw && 'r' in raw) {
|
|
805
|
+
var x = raw.x,
|
|
806
|
+
y = raw.y,
|
|
807
|
+
r = raw.r;
|
|
808
|
+
return datasetLabel + " \u2014 x: " + x + ", y: " + y + ", r: " + r;
|
|
809
|
+
}
|
|
810
|
+
// Scatter format { x, y }
|
|
811
|
+
if (typeof raw === 'object' && raw !== null && 'x' in raw && 'y' in raw) {
|
|
812
|
+
var _x = raw.x,
|
|
813
|
+
_y = raw.y;
|
|
814
|
+
return datasetLabel + " \u2014 x: " + _x + ", y: " + _y;
|
|
815
|
+
}
|
|
816
|
+
// Floating bar [min, max]
|
|
817
|
+
if (Array.isArray(raw) && raw.length === 2) {
|
|
818
|
+
var min = raw[0],
|
|
819
|
+
max = raw[1];
|
|
820
|
+
return datasetLabel + ": " + min + " \u2013 " + max;
|
|
821
|
+
}
|
|
822
|
+
// Default: single number or string
|
|
823
|
+
return datasetLabel + ": " + raw;
|
|
1095
824
|
},
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
}), React__default.createElement("rect", {
|
|
1099
|
-
x: "937.543",
|
|
1100
|
-
y: "717.857",
|
|
1101
|
-
style: {
|
|
1102
|
-
fill: tokens.colorBrandBackground
|
|
825
|
+
beforeTitle: function beforeTitle() {
|
|
826
|
+
return '';
|
|
1103
827
|
},
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
})), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
1107
|
-
x: "264.978",
|
|
1108
|
-
y: "441.049",
|
|
1109
|
-
style: {
|
|
1110
|
-
fill: tokens.colorNeutralBackground1
|
|
828
|
+
afterTitle: function afterTitle() {
|
|
829
|
+
return '';
|
|
1111
830
|
},
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
}), React__default.createElement("path", {
|
|
1115
|
-
style: {
|
|
1116
|
-
fill: tokens.colorNeutralStroke1
|
|
831
|
+
beforeBody: function beforeBody() {
|
|
832
|
+
return '';
|
|
1117
833
|
},
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
x: "330.537",
|
|
1121
|
-
y: "503.15",
|
|
1122
|
-
style: {
|
|
1123
|
-
fill: tokens.colorNeutralForeground3,
|
|
1124
|
-
opacity: 0.3
|
|
834
|
+
afterBody: function afterBody() {
|
|
835
|
+
return '';
|
|
1125
836
|
},
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
}), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
1129
|
-
x: "485.277",
|
|
1130
|
-
y: "509.093",
|
|
1131
|
-
style: {
|
|
1132
|
-
fill: tokens.colorBrandBackground
|
|
837
|
+
beforeLabel: function beforeLabel() {
|
|
838
|
+
return '';
|
|
1133
839
|
},
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
}), React__default.createElement("rect", {
|
|
1137
|
-
x: "485.277",
|
|
1138
|
-
y: "532.656",
|
|
1139
|
-
style: {
|
|
1140
|
-
fill: tokens.colorNeutralForeground3,
|
|
1141
|
-
opacity: 0.3
|
|
840
|
+
afterLabel: function afterLabel() {
|
|
841
|
+
return '';
|
|
1142
842
|
},
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
}), React__default.createElement("rect", {
|
|
1146
|
-
x: "485.277",
|
|
1147
|
-
y: "556.218",
|
|
1148
|
-
style: {
|
|
1149
|
-
fill: tokens.colorNeutralForeground3,
|
|
1150
|
-
opacity: 0.3
|
|
843
|
+
labelColor: function labelColor() {
|
|
844
|
+
return undefined;
|
|
1151
845
|
},
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
}))), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
1155
|
-
x: "381.691",
|
|
1156
|
-
y: "687.747",
|
|
1157
|
-
style: {
|
|
1158
|
-
fill: tokens.colorNeutralForeground3,
|
|
1159
|
-
opacity: 0.3
|
|
846
|
+
labelTextColor: function labelTextColor() {
|
|
847
|
+
return '';
|
|
1160
848
|
},
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
}), React__default.createElement("rect", {
|
|
1164
|
-
x: "404.421",
|
|
1165
|
-
y: "653.482",
|
|
1166
|
-
style: {
|
|
1167
|
-
fill: tokens.colorBrandBackground
|
|
849
|
+
footer: function footer() {
|
|
850
|
+
return '';
|
|
1168
851
|
},
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
})), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
1172
|
-
x: "466.491",
|
|
1173
|
-
y: "641.634",
|
|
1174
|
-
style: {
|
|
1175
|
-
fill: tokens.colorNeutralForeground3,
|
|
1176
|
-
opacity: 0.3
|
|
852
|
+
beforeFooter: function beforeFooter() {
|
|
853
|
+
return '';
|
|
1177
854
|
},
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
}), React__default.createElement("rect", {
|
|
1181
|
-
x: "489.221",
|
|
1182
|
-
y: "714.758",
|
|
1183
|
-
style: {
|
|
1184
|
-
fill: tokens.colorBrandBackground
|
|
855
|
+
afterFooter: function afterFooter() {
|
|
856
|
+
return '';
|
|
1185
857
|
},
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
858
|
+
labelPointStyle: function labelPointStyle() {
|
|
859
|
+
return {
|
|
860
|
+
pointStyle: 'circle',
|
|
861
|
+
rotation: 0,
|
|
862
|
+
radius: 5
|
|
863
|
+
};
|
|
864
|
+
}
|
|
865
|
+
};
|
|
866
|
+
return {
|
|
867
|
+
enabled: true,
|
|
868
|
+
displayColors: true,
|
|
869
|
+
boxWidth: 10,
|
|
870
|
+
boxHeight: 10,
|
|
871
|
+
boxPadding: 5,
|
|
872
|
+
backgroundColor: tooltipBg,
|
|
873
|
+
borderColor: borderColor,
|
|
874
|
+
borderWidth: 1,
|
|
875
|
+
cornerRadius: 4,
|
|
876
|
+
padding: 10,
|
|
877
|
+
titleColor: tooltipTitleColor,
|
|
878
|
+
bodyColor: tooltipBodyColor,
|
|
879
|
+
titleFont: {
|
|
880
|
+
family: fontFamily,
|
|
881
|
+
size: fontSize
|
|
1196
882
|
},
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
}
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
883
|
+
bodyFont: {
|
|
884
|
+
family: fontFamily,
|
|
885
|
+
size: fontSize
|
|
886
|
+
},
|
|
887
|
+
callbacks: callbacks
|
|
888
|
+
};
|
|
889
|
+
}
|
|
890
|
+
/**
|
|
891
|
+
* Returns a Chart.js ticks callback to truncate long labels and add optional prefix/suffix.
|
|
892
|
+
*/
|
|
893
|
+
var createAxisLabelFormatter = function createAxisLabelFormatter(_ref) {
|
|
894
|
+
var _ref$maxLength = _ref.maxLength,
|
|
895
|
+
maxLength = _ref$maxLength === void 0 ? 12 : _ref$maxLength,
|
|
896
|
+
_ref$suffix = _ref.suffix,
|
|
897
|
+
suffix = _ref$suffix === void 0 ? '' : _ref$suffix,
|
|
898
|
+
_ref$prefix = _ref.prefix,
|
|
899
|
+
prefix = _ref$prefix === void 0 ? '' : _ref$prefix;
|
|
900
|
+
return function (value) {
|
|
901
|
+
var label = typeof value === 'number' ? this.getLabelForValue(value) : String(value);
|
|
902
|
+
var trimmed = label.length > maxLength ? label.slice(0, maxLength) + '…' : label;
|
|
903
|
+
return "" + prefix + trimmed + suffix;
|
|
904
|
+
};
|
|
1206
905
|
};
|
|
906
|
+
function debounce(fn, delay) {
|
|
907
|
+
var timer = null;
|
|
908
|
+
return function () {
|
|
909
|
+
var _this = this;
|
|
910
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
911
|
+
args[_key] = arguments[_key];
|
|
912
|
+
}
|
|
913
|
+
if (timer) clearTimeout(timer);
|
|
914
|
+
timer = setTimeout(function () {
|
|
915
|
+
return fn.apply(_this, args);
|
|
916
|
+
}, delay);
|
|
917
|
+
};
|
|
918
|
+
}
|
|
919
|
+
/**
|
|
920
|
+
* useChartUtils — shared theming and chart helpers.
|
|
921
|
+
*/
|
|
922
|
+
function useChartUtils(theme) {
|
|
923
|
+
return useMemo(function () {
|
|
924
|
+
return {
|
|
925
|
+
lightenColor: lightenColor,
|
|
926
|
+
getFluentPalette: getFluentPalette,
|
|
927
|
+
createFluentTooltip: createFluentTooltip,
|
|
928
|
+
createAxisLabelFormatter: createAxisLabelFormatter,
|
|
929
|
+
debounce: debounce
|
|
930
|
+
};
|
|
931
|
+
}, [theme]);
|
|
932
|
+
}
|
|
1207
933
|
|
|
1208
|
-
var
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
934
|
+
var BUTTON_WIDTH = 100;
|
|
935
|
+
var GAP = 10;
|
|
936
|
+
function useResponsiveLegend(items) {
|
|
937
|
+
var containerRef = useRef(null);
|
|
938
|
+
var _useState = useState(items.length),
|
|
939
|
+
maxVisible = _useState[0],
|
|
940
|
+
setMaxVisible = _useState[1];
|
|
941
|
+
var _useChartUtils = useChartUtils(),
|
|
942
|
+
debounce = _useChartUtils.debounce;
|
|
943
|
+
useEffect(function () {
|
|
944
|
+
var measure = function measure() {
|
|
945
|
+
var _containerRef$current, _containerRef$current2;
|
|
946
|
+
var containerWidth = (_containerRef$current = (_containerRef$current2 = containerRef.current) == null ? void 0 : _containerRef$current2.offsetWidth) != null ? _containerRef$current : 0;
|
|
947
|
+
var itemTotalWidth = BUTTON_WIDTH + GAP;
|
|
948
|
+
var count = Math.floor(containerWidth / itemTotalWidth);
|
|
949
|
+
setMaxVisible(count);
|
|
950
|
+
};
|
|
951
|
+
var debouncedMeasure = debounce(measure, 100); // debounce resize
|
|
952
|
+
var observer = new ResizeObserver(debouncedMeasure);
|
|
953
|
+
if (containerRef.current) observer.observe(containerRef.current);
|
|
954
|
+
measure(); // initial
|
|
955
|
+
return function () {
|
|
956
|
+
return observer.disconnect();
|
|
957
|
+
};
|
|
958
|
+
}, [items]);
|
|
959
|
+
return {
|
|
960
|
+
containerRef: containerRef,
|
|
961
|
+
visibleItems: items.slice(0, maxVisible),
|
|
962
|
+
overflowItems: items.slice(maxVisible)
|
|
963
|
+
};
|
|
964
|
+
}
|
|
1222
965
|
|
|
1223
|
-
var
|
|
1224
|
-
var
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
966
|
+
var RenderLegend = function RenderLegend(_ref) {
|
|
967
|
+
var data = _ref.data,
|
|
968
|
+
visibleSeries = _ref.visibleSeries,
|
|
969
|
+
seriesColors = _ref.seriesColors,
|
|
970
|
+
toggleSeries = _ref.toggleSeries;
|
|
971
|
+
var _useResponsiveLegend = useResponsiveLegend(data),
|
|
972
|
+
containerRef = _useResponsiveLegend.containerRef,
|
|
973
|
+
visibleItems = _useResponsiveLegend.visibleItems,
|
|
974
|
+
overflowItems = _useResponsiveLegend.overflowItems;
|
|
975
|
+
return React__default.createElement(LegendContainer, {
|
|
976
|
+
containerRef: containerRef,
|
|
977
|
+
visibleItems: visibleItems,
|
|
978
|
+
overflowItems: overflowItems,
|
|
979
|
+
items: data,
|
|
980
|
+
visibleLabels: visibleSeries,
|
|
981
|
+
toggleLabel: toggleSeries,
|
|
982
|
+
renderLabel: function renderLabel(d) {
|
|
983
|
+
return d.label;
|
|
984
|
+
},
|
|
985
|
+
getColor: function getColor(d) {
|
|
986
|
+
return seriesColors[d.label];
|
|
1243
987
|
}
|
|
1244
|
-
}
|
|
988
|
+
});
|
|
1245
989
|
};
|
|
1246
990
|
|
|
1247
|
-
var _templateObject$1, _templateObject2$1
|
|
1248
|
-
var
|
|
991
|
+
var _templateObject$1, _templateObject2$1;
|
|
992
|
+
var useGraphGlobalStyles = function useGraphGlobalStyles() {
|
|
1249
993
|
return {
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
width: '100%',
|
|
1262
|
-
boxSizing: 'border-box',
|
|
1263
|
-
padding: '8px 0px'
|
|
1264
|
-
})
|
|
994
|
+
chartWithLegend: css({
|
|
995
|
+
display: 'flex',
|
|
996
|
+
flexDirection: 'column',
|
|
997
|
+
height: '100%',
|
|
998
|
+
chartArea: {
|
|
999
|
+
flexGrow: 1,
|
|
1000
|
+
minHeight: 0
|
|
1001
|
+
}
|
|
1002
|
+
}),
|
|
1003
|
+
chartArea: css(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteralLoose(["\n flex-grow: 1;\n min-height: 0;\n "]))),
|
|
1004
|
+
legendArea: css(_templateObject2$1 || (_templateObject2$1 = _taggedTemplateLiteralLoose(["\n margin-top: 0px;\n padding-top: 0px;\n \n margin-Left: 10px;\n margin-Right: 10px;\n \n "])))
|
|
1265
1005
|
};
|
|
1266
1006
|
};
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
var
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1007
|
+
|
|
1008
|
+
Chart.register(CategoryScale, LinearScale, PointElement, LineElement, Tooltip$1, Filler, Legend, ChartDataLabels, Title);
|
|
1009
|
+
function AreaChart(_ref) {
|
|
1010
|
+
var data = _ref.data,
|
|
1011
|
+
getPrimary = _ref.getPrimary,
|
|
1012
|
+
getSecondary = _ref.getSecondary,
|
|
1013
|
+
title = _ref.title,
|
|
1014
|
+
_ref$showDatalabels = _ref.showDatalabels,
|
|
1015
|
+
showDatalabels = _ref$showDatalabels === void 0 ? false : _ref$showDatalabels,
|
|
1016
|
+
_ref$theme = _ref.theme,
|
|
1017
|
+
theme = _ref$theme === void 0 ? webLightTheme : _ref$theme,
|
|
1018
|
+
_ref$stacked = _ref.stacked,
|
|
1019
|
+
stacked = _ref$stacked === void 0 ? false : _ref$stacked;
|
|
1020
|
+
var _useState = useState(function () {
|
|
1021
|
+
var _data$;
|
|
1022
|
+
return data.length > 1 ? data.map(function (s) {
|
|
1023
|
+
return s.label;
|
|
1024
|
+
}) : [(_data$ = data[0]) == null ? void 0 : _data$.label];
|
|
1025
|
+
}),
|
|
1026
|
+
visibleSeries = _useState[0],
|
|
1027
|
+
setVisibleSeries = _useState[1];
|
|
1028
|
+
var styles = useGraphGlobalStyles();
|
|
1029
|
+
var _useChartUtils = useChartUtils(theme),
|
|
1030
|
+
lightenColor = _useChartUtils.lightenColor,
|
|
1031
|
+
getFluentPalette = _useChartUtils.getFluentPalette,
|
|
1032
|
+
createFluentTooltip = _useChartUtils.createFluentTooltip;
|
|
1033
|
+
var seriesColors = useMemo(function () {
|
|
1034
|
+
return data.reduce(function (acc, series, idx) {
|
|
1035
|
+
var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
|
|
1036
|
+
var color = lightenColor(base, 0.3);
|
|
1037
|
+
acc[series.label] = color;
|
|
1038
|
+
return acc;
|
|
1039
|
+
}, {});
|
|
1040
|
+
}, [data, theme]);
|
|
1041
|
+
var toggleSeries = function toggleSeries(label) {
|
|
1042
|
+
setVisibleSeries(function (prev) {
|
|
1043
|
+
var isVisible = prev.includes(label);
|
|
1044
|
+
var next = isVisible ? prev.filter(function (l) {
|
|
1045
|
+
return l !== label;
|
|
1046
|
+
}) : [].concat(prev, [label]);
|
|
1047
|
+
return next.length === 0 && data.length > 0 ? [data[0].label] : next;
|
|
1303
1048
|
});
|
|
1304
1049
|
};
|
|
1305
|
-
var
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1050
|
+
var allCategories = useMemo(function () {
|
|
1051
|
+
var set = new Set();
|
|
1052
|
+
data.forEach(function (series) {
|
|
1053
|
+
series.data.forEach(function (d) {
|
|
1054
|
+
return set.add(getPrimary(d));
|
|
1055
|
+
});
|
|
1056
|
+
});
|
|
1057
|
+
return Array.from(set);
|
|
1058
|
+
}, [data, getPrimary]);
|
|
1059
|
+
var chartData = useMemo(function () {
|
|
1060
|
+
return {
|
|
1061
|
+
labels: allCategories,
|
|
1062
|
+
datasets: data.filter(function (series) {
|
|
1063
|
+
return visibleSeries.includes(series.label);
|
|
1064
|
+
}).map(function (series) {
|
|
1065
|
+
return {
|
|
1066
|
+
label: series.label,
|
|
1067
|
+
data: allCategories.map(function (cat) {
|
|
1068
|
+
var match = series.data.find(function (d) {
|
|
1069
|
+
return getPrimary(d) === cat;
|
|
1070
|
+
});
|
|
1071
|
+
return match ? getSecondary(match) : null;
|
|
1072
|
+
}),
|
|
1073
|
+
borderColor: seriesColors[series.label],
|
|
1074
|
+
backgroundColor: seriesColors[series.label],
|
|
1075
|
+
fill: true,
|
|
1076
|
+
tension: 0.4,
|
|
1077
|
+
pointRadius: 2
|
|
1078
|
+
};
|
|
1079
|
+
})
|
|
1080
|
+
};
|
|
1081
|
+
}, [data, visibleSeries, allCategories, getPrimary, getSecondary, seriesColors]);
|
|
1082
|
+
var _useMemo = useMemo(function () {
|
|
1083
|
+
return {
|
|
1084
|
+
fontFamily: theme.fontFamilyBase,
|
|
1085
|
+
fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,
|
|
1086
|
+
labelColor: theme.colorNeutralForeground1,
|
|
1087
|
+
gridColor: theme.colorNeutralStroke2
|
|
1088
|
+
};
|
|
1089
|
+
}, [theme]),
|
|
1090
|
+
fontFamily = _useMemo.fontFamily,
|
|
1091
|
+
fontSize = _useMemo.fontSize,
|
|
1092
|
+
labelColor = _useMemo.labelColor,
|
|
1093
|
+
gridColor = _useMemo.gridColor;
|
|
1094
|
+
var options = useMemo(function () {
|
|
1095
|
+
return {
|
|
1096
|
+
responsive: true,
|
|
1097
|
+
maintainAspectRatio: false,
|
|
1098
|
+
plugins: {
|
|
1099
|
+
title: {
|
|
1100
|
+
display: !!title,
|
|
1101
|
+
text: title,
|
|
1102
|
+
font: {
|
|
1103
|
+
size: 14,
|
|
1104
|
+
family: theme.fontFamilyBase,
|
|
1105
|
+
weight: theme.fontWeightSemibold
|
|
1319
1106
|
},
|
|
1320
|
-
|
|
1321
|
-
|
|
1107
|
+
color: theme.colorNeutralForeground1,
|
|
1108
|
+
padding: {
|
|
1109
|
+
top: 20,
|
|
1110
|
+
bottom: 20
|
|
1322
1111
|
}
|
|
1323
|
-
}
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1112
|
+
},
|
|
1113
|
+
datalabels: {
|
|
1114
|
+
display: showDatalabels,
|
|
1115
|
+
color: theme.colorNeutralForeground1,
|
|
1116
|
+
font: {
|
|
1117
|
+
family: theme.fontFamilyBase,
|
|
1118
|
+
size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14
|
|
1119
|
+
}
|
|
1120
|
+
},
|
|
1121
|
+
legend: {
|
|
1122
|
+
display: false
|
|
1123
|
+
},
|
|
1124
|
+
tooltip: createFluentTooltip(theme)
|
|
1125
|
+
},
|
|
1126
|
+
scales: {
|
|
1127
|
+
x: {
|
|
1128
|
+
stacked: stacked,
|
|
1129
|
+
ticks: {
|
|
1130
|
+
color: labelColor,
|
|
1131
|
+
font: {
|
|
1132
|
+
family: fontFamily,
|
|
1133
|
+
size: fontSize
|
|
1134
|
+
}
|
|
1135
|
+
},
|
|
1136
|
+
grid: {
|
|
1137
|
+
color: gridColor
|
|
1138
|
+
}
|
|
1139
|
+
},
|
|
1140
|
+
y: {
|
|
1141
|
+
stacked: stacked,
|
|
1142
|
+
ticks: {
|
|
1143
|
+
color: labelColor,
|
|
1144
|
+
font: {
|
|
1145
|
+
family: fontFamily,
|
|
1146
|
+
size: fontSize
|
|
1147
|
+
}
|
|
1148
|
+
},
|
|
1149
|
+
grid: {
|
|
1150
|
+
color: gridColor
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1327
1153
|
}
|
|
1328
1154
|
};
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
}
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
content: "Configure",
|
|
1345
|
-
relationship: "label"
|
|
1346
|
-
}, createElement(MenuButton, {
|
|
1347
|
-
icon: createElement(Settings, null),
|
|
1348
|
-
size: "small",
|
|
1349
|
-
appearance: "transparent"
|
|
1350
|
-
}))), createElement(MenuPopover, {
|
|
1351
|
-
style: {
|
|
1352
|
-
width: popoverWidth + "px",
|
|
1353
|
-
minWidth: "120px",
|
|
1354
|
-
padding: 8
|
|
1355
|
-
}
|
|
1356
|
-
}, createElement("div", {
|
|
1357
|
-
className: styles.zoomContainer
|
|
1358
|
-
}, createElement(RenderLabel, {
|
|
1359
|
-
label: "Span (" + values.spanCols + " \xD7 " + values.spanRows + ")"
|
|
1360
|
-
})), createElement("div", {
|
|
1361
|
-
className: styles.gridContainer,
|
|
1362
|
-
style: {
|
|
1363
|
-
gridTemplateColumns: "repeat(" + maxCols + ", 30px)",
|
|
1364
|
-
gridTemplateRows: "repeat(" + maxRows + ", 30px)"
|
|
1365
|
-
},
|
|
1366
|
-
onMouseLeave: handleMouseLeave
|
|
1367
|
-
}, renderGridCells()), createElement(Caption1, {
|
|
1368
|
-
className: styles.bottomText
|
|
1369
|
-
}, "Click to set span")));
|
|
1370
|
-
};
|
|
1155
|
+
}, [title, showDatalabels, theme, fontFamily, fontSize, labelColor, gridColor, stacked, createFluentTooltip]);
|
|
1156
|
+
return React__default.createElement("div", {
|
|
1157
|
+
className: styles.chartWithLegend
|
|
1158
|
+
}, React__default.createElement("div", {
|
|
1159
|
+
className: styles.chartArea
|
|
1160
|
+
}, React__default.createElement(Line, {
|
|
1161
|
+
data: chartData,
|
|
1162
|
+
options: options
|
|
1163
|
+
})), React__default.createElement(RenderLegend, {
|
|
1164
|
+
data: data,
|
|
1165
|
+
visibleSeries: visibleSeries,
|
|
1166
|
+
seriesColors: seriesColors,
|
|
1167
|
+
toggleSeries: toggleSeries
|
|
1168
|
+
}));
|
|
1169
|
+
}
|
|
1371
1170
|
|
|
1372
|
-
Chart.register(CategoryScale, LinearScale,
|
|
1373
|
-
function
|
|
1171
|
+
Chart.register(CategoryScale, LinearScale, BarElement, Tooltip$1, Legend, ChartDataLabels, Title);
|
|
1172
|
+
function BarChart(_ref) {
|
|
1374
1173
|
var data = _ref.data,
|
|
1375
1174
|
getPrimary = _ref.getPrimary,
|
|
1376
1175
|
getSecondary = _ref.getSecondary,
|
|
1377
1176
|
title = _ref.title,
|
|
1378
1177
|
_ref$showDatalabels = _ref.showDatalabels,
|
|
1379
1178
|
showDatalabels = _ref$showDatalabels === void 0 ? false : _ref$showDatalabels,
|
|
1380
|
-
_ref$theme = _ref.theme,
|
|
1381
|
-
theme = _ref$theme === void 0 ? webLightTheme : _ref$theme,
|
|
1382
1179
|
_ref$stacked = _ref.stacked,
|
|
1383
|
-
stacked = _ref$stacked === void 0 ? false : _ref$stacked
|
|
1180
|
+
stacked = _ref$stacked === void 0 ? false : _ref$stacked,
|
|
1181
|
+
theme = _ref.theme;
|
|
1384
1182
|
var _useState = useState(function () {
|
|
1385
1183
|
var _data$;
|
|
1386
1184
|
return data.length > 1 ? data.map(function (s) {
|
|
@@ -1389,11 +1187,11 @@ function AreaChart(_ref) {
|
|
|
1389
1187
|
}),
|
|
1390
1188
|
visibleSeries = _useState[0],
|
|
1391
1189
|
setVisibleSeries = _useState[1];
|
|
1392
|
-
var styles = useGraphGlobalStyles();
|
|
1393
1190
|
var _useChartUtils = useChartUtils(theme),
|
|
1394
1191
|
lightenColor = _useChartUtils.lightenColor,
|
|
1395
1192
|
getFluentPalette = _useChartUtils.getFluentPalette,
|
|
1396
1193
|
createFluentTooltip = _useChartUtils.createFluentTooltip;
|
|
1194
|
+
var styles = useGraphGlobalStyles();
|
|
1397
1195
|
var seriesColors = useMemo(function () {
|
|
1398
1196
|
return data.reduce(function (acc, series, idx) {
|
|
1399
1197
|
var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
|
|
@@ -1401,7 +1199,7 @@ function AreaChart(_ref) {
|
|
|
1401
1199
|
acc[series.label] = color;
|
|
1402
1200
|
return acc;
|
|
1403
1201
|
}, {});
|
|
1404
|
-
}, [data
|
|
1202
|
+
}, [data]);
|
|
1405
1203
|
var toggleSeries = function toggleSeries(label) {
|
|
1406
1204
|
setVisibleSeries(function (prev) {
|
|
1407
1205
|
var isVisible = prev.includes(label);
|
|
@@ -1411,15 +1209,17 @@ function AreaChart(_ref) {
|
|
|
1411
1209
|
return next.length === 0 && data.length > 0 ? [data[0].label] : next;
|
|
1412
1210
|
});
|
|
1413
1211
|
};
|
|
1212
|
+
// Extract all unique x-axis categories (from all series)
|
|
1414
1213
|
var allCategories = useMemo(function () {
|
|
1415
|
-
var
|
|
1214
|
+
var categorySet = new Set();
|
|
1416
1215
|
data.forEach(function (series) {
|
|
1417
|
-
series.data.forEach(function (
|
|
1418
|
-
|
|
1216
|
+
series.data.forEach(function (datum) {
|
|
1217
|
+
categorySet.add(getPrimary(datum));
|
|
1419
1218
|
});
|
|
1420
1219
|
});
|
|
1421
|
-
return Array.from(
|
|
1220
|
+
return Array.from(categorySet);
|
|
1422
1221
|
}, [data, getPrimary]);
|
|
1222
|
+
// Construct Chart.js datasets
|
|
1423
1223
|
var chartData = useMemo(function () {
|
|
1424
1224
|
return {
|
|
1425
1225
|
labels: allCategories,
|
|
@@ -1428,21 +1228,19 @@ function AreaChart(_ref) {
|
|
|
1428
1228
|
}).map(function (series) {
|
|
1429
1229
|
return {
|
|
1430
1230
|
label: series.label,
|
|
1231
|
+
backgroundColor: seriesColors[series.label],
|
|
1431
1232
|
data: allCategories.map(function (cat) {
|
|
1432
|
-
var
|
|
1233
|
+
var found = series.data.find(function (d) {
|
|
1433
1234
|
return getPrimary(d) === cat;
|
|
1434
1235
|
});
|
|
1435
|
-
return
|
|
1236
|
+
return found ? getSecondary(found) : 0;
|
|
1436
1237
|
}),
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
fill: true,
|
|
1440
|
-
tension: 0.4,
|
|
1441
|
-
pointRadius: 2
|
|
1238
|
+
// Assign y-axis based on series type when stacked
|
|
1239
|
+
yAxisID: stacked ? series.type === 'line' ? 'y1' : 'y' : 'y'
|
|
1442
1240
|
};
|
|
1443
1241
|
})
|
|
1444
1242
|
};
|
|
1445
|
-
}, [data, visibleSeries, allCategories,
|
|
1243
|
+
}, [data, visibleSeries, allCategories, seriesColors, stacked]);
|
|
1446
1244
|
var _useMemo = useMemo(function () {
|
|
1447
1245
|
return {
|
|
1448
1246
|
fontFamily: theme.fontFamilyBase,
|
|
@@ -1487,10 +1285,13 @@ function AreaChart(_ref) {
|
|
|
1487
1285
|
},
|
|
1488
1286
|
tooltip: createFluentTooltip(theme)
|
|
1489
1287
|
},
|
|
1490
|
-
scales: {
|
|
1288
|
+
scales: _extends({
|
|
1491
1289
|
x: {
|
|
1492
1290
|
stacked: stacked,
|
|
1493
1291
|
ticks: {
|
|
1292
|
+
callback: createAxisLabelFormatter({
|
|
1293
|
+
maxLength: 10
|
|
1294
|
+
}),
|
|
1494
1295
|
color: labelColor,
|
|
1495
1296
|
font: {
|
|
1496
1297
|
family: fontFamily,
|
|
@@ -1502,8 +1303,13 @@ function AreaChart(_ref) {
|
|
|
1502
1303
|
}
|
|
1503
1304
|
},
|
|
1504
1305
|
y: {
|
|
1306
|
+
type: 'linear',
|
|
1307
|
+
position: 'left',
|
|
1505
1308
|
stacked: stacked,
|
|
1506
1309
|
ticks: {
|
|
1310
|
+
callback: createAxisLabelFormatter({
|
|
1311
|
+
maxLength: 10
|
|
1312
|
+
}),
|
|
1507
1313
|
color: labelColor,
|
|
1508
1314
|
font: {
|
|
1509
1315
|
family: fontFamily,
|
|
@@ -1514,22 +1320,42 @@ function AreaChart(_ref) {
|
|
|
1514
1320
|
color: gridColor
|
|
1515
1321
|
}
|
|
1516
1322
|
}
|
|
1517
|
-
}
|
|
1323
|
+
}, stacked && {
|
|
1324
|
+
y1: {
|
|
1325
|
+
type: 'linear',
|
|
1326
|
+
position: 'right',
|
|
1327
|
+
ticks: {
|
|
1328
|
+
callback: createAxisLabelFormatter({
|
|
1329
|
+
maxLength: 10
|
|
1330
|
+
}),
|
|
1331
|
+
color: labelColor,
|
|
1332
|
+
font: {
|
|
1333
|
+
family: fontFamily,
|
|
1334
|
+
size: fontSize
|
|
1335
|
+
}
|
|
1336
|
+
},
|
|
1337
|
+
grid: {
|
|
1338
|
+
drawOnChartArea: false
|
|
1339
|
+
}
|
|
1340
|
+
}
|
|
1341
|
+
})
|
|
1518
1342
|
};
|
|
1519
1343
|
}, [title, showDatalabels, theme, fontFamily, fontSize, labelColor, gridColor, stacked, createFluentTooltip]);
|
|
1520
1344
|
return React__default.createElement("div", {
|
|
1521
1345
|
className: styles.chartWithLegend
|
|
1522
1346
|
}, React__default.createElement("div", {
|
|
1523
1347
|
className: styles.chartArea
|
|
1524
|
-
}, React__default.createElement(
|
|
1348
|
+
}, React__default.createElement(Bar, {
|
|
1525
1349
|
data: chartData,
|
|
1526
1350
|
options: options
|
|
1527
|
-
})), React__default.createElement(
|
|
1351
|
+
})), React__default.createElement("div", {
|
|
1352
|
+
className: styles.legendArea
|
|
1353
|
+
}, React__default.createElement(RenderLegend, {
|
|
1528
1354
|
data: data,
|
|
1529
1355
|
visibleSeries: visibleSeries,
|
|
1530
1356
|
seriesColors: seriesColors,
|
|
1531
1357
|
toggleSeries: toggleSeries
|
|
1532
|
-
}));
|
|
1358
|
+
})));
|
|
1533
1359
|
}
|
|
1534
1360
|
|
|
1535
1361
|
Chart.register(CategoryScale, LinearScale, BarElement, Tooltip$1, Legend, Title, ChartDataLabels);
|
|
@@ -1846,6 +1672,180 @@ function BubbleChart(_ref) {
|
|
|
1846
1672
|
}))));
|
|
1847
1673
|
}
|
|
1848
1674
|
|
|
1675
|
+
Chart.register(ChartDataLabels);
|
|
1676
|
+
Chart.register(CategoryScale, LinearScale, BarElement, LineElement, PointElement, Tooltip$1, Legend, Title);
|
|
1677
|
+
function ComboChart(_ref) {
|
|
1678
|
+
var data = _ref.data,
|
|
1679
|
+
getPrimary = _ref.getPrimary,
|
|
1680
|
+
getSecondary = _ref.getSecondary,
|
|
1681
|
+
title = _ref.title,
|
|
1682
|
+
_ref$showDataLabels = _ref.showDataLabels,
|
|
1683
|
+
showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
|
|
1684
|
+
_ref$theme = _ref.theme,
|
|
1685
|
+
theme = _ref$theme === void 0 ? webLightTheme : _ref$theme;
|
|
1686
|
+
var _useState = useState(function () {
|
|
1687
|
+
return data.map(function (s) {
|
|
1688
|
+
return s.label;
|
|
1689
|
+
});
|
|
1690
|
+
}),
|
|
1691
|
+
visibleSeries = _useState[0],
|
|
1692
|
+
setVisibleSeries = _useState[1];
|
|
1693
|
+
var styles = useGraphGlobalStyles();
|
|
1694
|
+
var _useChartUtils = useChartUtils(theme),
|
|
1695
|
+
lightenColor = _useChartUtils.lightenColor,
|
|
1696
|
+
getFluentPalette = _useChartUtils.getFluentPalette,
|
|
1697
|
+
createFluentTooltip = _useChartUtils.createFluentTooltip;
|
|
1698
|
+
var seriesColors = useMemo(function () {
|
|
1699
|
+
return data.reduce(function (acc, series, idx) {
|
|
1700
|
+
var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
|
|
1701
|
+
acc[series.label] = lightenColor(base, 0.3);
|
|
1702
|
+
return acc;
|
|
1703
|
+
}, {});
|
|
1704
|
+
}, [data, theme]);
|
|
1705
|
+
var toggleSeries = function toggleSeries(label) {
|
|
1706
|
+
setVisibleSeries(function (prev) {
|
|
1707
|
+
var isVisible = prev.includes(label);
|
|
1708
|
+
var next = isVisible ? prev.filter(function (l) {
|
|
1709
|
+
return l !== label;
|
|
1710
|
+
}) : [].concat(prev, [label]);
|
|
1711
|
+
return next.length === 0 ? [data[0].label] : next;
|
|
1712
|
+
});
|
|
1713
|
+
};
|
|
1714
|
+
var allCategories = useMemo(function () {
|
|
1715
|
+
var set = new Set();
|
|
1716
|
+
data.forEach(function (series) {
|
|
1717
|
+
return series.data.forEach(function (d) {
|
|
1718
|
+
return set.add(getPrimary(d));
|
|
1719
|
+
});
|
|
1720
|
+
});
|
|
1721
|
+
return Array.from(set);
|
|
1722
|
+
}, [data, getPrimary]);
|
|
1723
|
+
var chartData = useMemo(function () {
|
|
1724
|
+
var sortedSeries = data.filter(function (series) {
|
|
1725
|
+
return visibleSeries.includes(series.label);
|
|
1726
|
+
}).sort(function (a, b) {
|
|
1727
|
+
// Ensure bars come before lines
|
|
1728
|
+
if (a.type === 'bar' && b.type === 'line') return -1;
|
|
1729
|
+
if (a.type === 'line' && b.type === 'bar') return 1;
|
|
1730
|
+
return 0;
|
|
1731
|
+
});
|
|
1732
|
+
return {
|
|
1733
|
+
labels: allCategories,
|
|
1734
|
+
datasets: sortedSeries.map(function (series) {
|
|
1735
|
+
var _series$yAxisID;
|
|
1736
|
+
return {
|
|
1737
|
+
type: series.type,
|
|
1738
|
+
label: series.label,
|
|
1739
|
+
yAxisID: (_series$yAxisID = series.yAxisID) != null ? _series$yAxisID : 'y',
|
|
1740
|
+
data: allCategories.map(function (cat) {
|
|
1741
|
+
var found = series.data.find(function (d) {
|
|
1742
|
+
return getPrimary(d) === cat;
|
|
1743
|
+
});
|
|
1744
|
+
return found ? getSecondary(found) : 0;
|
|
1745
|
+
}),
|
|
1746
|
+
backgroundColor: seriesColors[series.label],
|
|
1747
|
+
borderColor: seriesColors[series.label],
|
|
1748
|
+
fill: series.type === 'bar',
|
|
1749
|
+
tension: series.type === 'line' ? 0.4 : 0,
|
|
1750
|
+
pointRadius: series.type === 'line' ? 3 : 0,
|
|
1751
|
+
borderWidth: series.type === 'line' ? 2 : 1,
|
|
1752
|
+
order: series.type === 'bar' ? 1 : 0
|
|
1753
|
+
};
|
|
1754
|
+
})
|
|
1755
|
+
};
|
|
1756
|
+
}, [data, visibleSeries, allCategories, getPrimary, getSecondary, seriesColors]);
|
|
1757
|
+
var _useMemo = useMemo(function () {
|
|
1758
|
+
return {
|
|
1759
|
+
fontFamily: theme.fontFamilyBase,
|
|
1760
|
+
fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,
|
|
1761
|
+
labelColor: theme.colorNeutralForeground1,
|
|
1762
|
+
gridColor: theme.colorNeutralStroke2
|
|
1763
|
+
};
|
|
1764
|
+
}, [theme]),
|
|
1765
|
+
fontFamily = _useMemo.fontFamily,
|
|
1766
|
+
fontSize = _useMemo.fontSize,
|
|
1767
|
+
labelColor = _useMemo.labelColor,
|
|
1768
|
+
gridColor = _useMemo.gridColor;
|
|
1769
|
+
var options = useMemo(function () {
|
|
1770
|
+
return {
|
|
1771
|
+
responsive: true,
|
|
1772
|
+
maintainAspectRatio: false,
|
|
1773
|
+
plugins: {
|
|
1774
|
+
title: {
|
|
1775
|
+
display: !!title,
|
|
1776
|
+
text: title,
|
|
1777
|
+
font: {
|
|
1778
|
+
size: 14,
|
|
1779
|
+
family: theme.fontFamilyBase,
|
|
1780
|
+
weight: theme.fontWeightSemibold
|
|
1781
|
+
},
|
|
1782
|
+
color: theme.colorNeutralForeground1,
|
|
1783
|
+
padding: {
|
|
1784
|
+
top: 20,
|
|
1785
|
+
bottom: 20
|
|
1786
|
+
}
|
|
1787
|
+
},
|
|
1788
|
+
datalabels: {
|
|
1789
|
+
display: showDataLabels,
|
|
1790
|
+
color: theme.colorNeutralForeground1,
|
|
1791
|
+
font: {
|
|
1792
|
+
family: theme.fontFamilyBase,
|
|
1793
|
+
size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14
|
|
1794
|
+
}
|
|
1795
|
+
},
|
|
1796
|
+
legend: {
|
|
1797
|
+
display: false
|
|
1798
|
+
},
|
|
1799
|
+
tooltip: createFluentTooltip(theme)
|
|
1800
|
+
},
|
|
1801
|
+
scales: {
|
|
1802
|
+
x: {
|
|
1803
|
+
ticks: {
|
|
1804
|
+
color: labelColor,
|
|
1805
|
+
font: {
|
|
1806
|
+
family: fontFamily,
|
|
1807
|
+
size: fontSize
|
|
1808
|
+
}
|
|
1809
|
+
},
|
|
1810
|
+
grid: {
|
|
1811
|
+
color: gridColor
|
|
1812
|
+
}
|
|
1813
|
+
},
|
|
1814
|
+
y: {
|
|
1815
|
+
position: 'left',
|
|
1816
|
+
ticks: {
|
|
1817
|
+
color: labelColor,
|
|
1818
|
+
font: {
|
|
1819
|
+
family: fontFamily,
|
|
1820
|
+
size: fontSize
|
|
1821
|
+
}
|
|
1822
|
+
},
|
|
1823
|
+
grid: {
|
|
1824
|
+
color: gridColor
|
|
1825
|
+
},
|
|
1826
|
+
stacked: false
|
|
1827
|
+
}
|
|
1828
|
+
}
|
|
1829
|
+
};
|
|
1830
|
+
}, [title, showDataLabels, theme, fontFamily, fontSize, labelColor, gridColor, createFluentTooltip]);
|
|
1831
|
+
return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
|
|
1832
|
+
className: styles.chartWithLegend
|
|
1833
|
+
}, React__default.createElement("div", {
|
|
1834
|
+
className: styles.chartArea
|
|
1835
|
+
}, React__default.createElement(Chart$1, {
|
|
1836
|
+
type: "bar",
|
|
1837
|
+
data: chartData,
|
|
1838
|
+
options: options
|
|
1839
|
+
})), React__default.createElement("div", {
|
|
1840
|
+
className: styles.legendArea
|
|
1841
|
+
}, React__default.createElement(RenderLegend, {
|
|
1842
|
+
data: data,
|
|
1843
|
+
visibleSeries: visibleSeries,
|
|
1844
|
+
seriesColors: seriesColors,
|
|
1845
|
+
toggleSeries: toggleSeries
|
|
1846
|
+
}))));
|
|
1847
|
+
}
|
|
1848
|
+
|
|
1849
1849
|
var RenderValueLegend = function RenderValueLegend(_ref) {
|
|
1850
1850
|
var entries = _ref.entries,
|
|
1851
1851
|
visibleLabels = _ref.visibleLabels,
|
|
@@ -4083,5 +4083,5 @@ var Dashboard = function Dashboard(_ref) {
|
|
|
4083
4083
|
}, renderCards));
|
|
4084
4084
|
};
|
|
4085
4085
|
|
|
4086
|
-
export { Dashboard, createAxisLabelFormatter, createFluentTooltip, getFluentPalette, lightenColor, useChartUtils, useChartUtils as useGraphUtils };
|
|
4086
|
+
export { AreaChart, BarChart, BarHorizontalChart, BubbleChart, ComboChart, Dashboard, DoughnutChart, FloatingBarChart, LineChart, PieChart, PolarChart, RadarChart, ScatterChart, StackedLineChart, SteamChart, createAxisLabelFormatter, createFluentTooltip, getFluentPalette, lightenColor, useChartUtils, useChartUtils as useGraphUtils };
|
|
4087
4087
|
//# sourceMappingURL=fluentui-react-charts.esm.js.map
|