@spteck/fluentui-react-charts 1.0.6 → 1.0.8
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 +1367 -1066
- 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 +1353 -1066
- package/dist/fluentui-react-charts.esm.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/package.json +4 -4
- 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 -189
- 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 -122
- 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
|
@@ -4,18 +4,23 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var reactComponents = require('@fluentui/react-components');
|
|
8
8
|
var React = require('react');
|
|
9
9
|
var React__default = _interopDefault(React);
|
|
10
|
-
var reactChartjs2 = require('react-chartjs-2');
|
|
11
|
-
var ChartDataLabels = _interopDefault(require('chartjs-plugin-datalabels'));
|
|
12
|
-
var reactComponents = require('@fluentui/react-components');
|
|
13
10
|
var css = require('@emotion/css');
|
|
14
|
-
var resizeObserver = require('@juggle/resize-observer');
|
|
15
11
|
var reactIcons = require('@fluentui/react-icons');
|
|
16
12
|
var react = require('@iconify/react');
|
|
17
|
-
var
|
|
13
|
+
var chart_js = require('chart.js');
|
|
14
|
+
var ChartDataLabels = _interopDefault(require('chartjs-plugin-datalabels'));
|
|
15
|
+
var reactChartjs2 = require('react-chartjs-2');
|
|
16
|
+
var resizeObserver = require('@juggle/resize-observer');
|
|
17
|
+
var idb = require('idb');
|
|
18
18
|
|
|
19
|
+
function _arrayLikeToArray(r, a) {
|
|
20
|
+
(null == a || a > r.length) && (a = r.length);
|
|
21
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
22
|
+
return n;
|
|
23
|
+
}
|
|
19
24
|
function asyncGeneratorStep(n, t, e, r, o, a, c) {
|
|
20
25
|
try {
|
|
21
26
|
var i = n[a](c),
|
|
@@ -41,6 +46,23 @@ function _asyncToGenerator(n) {
|
|
|
41
46
|
});
|
|
42
47
|
};
|
|
43
48
|
}
|
|
49
|
+
function _createForOfIteratorHelperLoose(r, e) {
|
|
50
|
+
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
51
|
+
if (t) return (t = t.call(r)).next.bind(t);
|
|
52
|
+
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
|
|
53
|
+
t && (r = t);
|
|
54
|
+
var o = 0;
|
|
55
|
+
return function () {
|
|
56
|
+
return o >= r.length ? {
|
|
57
|
+
done: !0
|
|
58
|
+
} : {
|
|
59
|
+
done: !1,
|
|
60
|
+
value: r[o++]
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
65
|
+
}
|
|
44
66
|
function _extends() {
|
|
45
67
|
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
46
68
|
for (var e = 1; e < arguments.length; e++) {
|
|
@@ -163,212 +185,220 @@ function _regeneratorDefine(e, r, n, t) {
|
|
|
163
185
|
function _taggedTemplateLiteralLoose(e, t) {
|
|
164
186
|
return t || (t = e.slice(0)), e.raw = t, e;
|
|
165
187
|
}
|
|
188
|
+
function _unsupportedIterableToArray(r, a) {
|
|
189
|
+
if (r) {
|
|
190
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
191
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
192
|
+
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
166
195
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
* Smart Fluent tooltip generator with chart-type awareness.
|
|
189
|
-
*/
|
|
190
|
-
function createFluentTooltip(theme) {
|
|
191
|
-
var fontFamily = theme.fontFamilyBase;
|
|
192
|
-
var fontSize = parseInt(theme.fontSizeBase200.replace('px', '')) || 14;
|
|
193
|
-
var tooltipBg = theme.colorNeutralBackground1;
|
|
194
|
-
var tooltipTitleColor = theme.colorNeutralForeground1;
|
|
195
|
-
var tooltipBodyColor = theme.colorNeutralForeground2;
|
|
196
|
-
var borderColor = theme.colorNeutralStroke2;
|
|
197
|
-
var callbacks = {
|
|
198
|
-
title: function title(context) {
|
|
199
|
-
var _context$0$label, _context$;
|
|
200
|
-
return (_context$0$label = (_context$ = context[0]) == null ? void 0 : _context$.label) != null ? _context$0$label : '';
|
|
196
|
+
var BusinessReportIcon = function BusinessReportIcon(_ref) {
|
|
197
|
+
var _ref$width = _ref.width,
|
|
198
|
+
width = _ref$width === void 0 ? 200 : _ref$width,
|
|
199
|
+
_ref$height = _ref.height,
|
|
200
|
+
height = _ref$height === void 0 ? 200 : _ref$height,
|
|
201
|
+
className = _ref.className,
|
|
202
|
+
style = _ref.style;
|
|
203
|
+
return React__default.createElement("svg", {
|
|
204
|
+
width: width,
|
|
205
|
+
height: height,
|
|
206
|
+
viewBox: "200 400 1400 1000",
|
|
207
|
+
className: className,
|
|
208
|
+
style: _extends({
|
|
209
|
+
fill: reactComponents.tokens.colorNeutralForeground2
|
|
210
|
+
}, style),
|
|
211
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
212
|
+
}, React__default.createElement("g", {
|
|
213
|
+
id: "BACKGROUND"
|
|
214
|
+
}, React__default.createElement("rect", {
|
|
215
|
+
style: {
|
|
216
|
+
fill: reactComponents.tokens.colorNeutralBackground1
|
|
201
217
|
},
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
// Scatter format { x, y }
|
|
213
|
-
if (typeof raw === 'object' && raw !== null && 'x' in raw && 'y' in raw) {
|
|
214
|
-
var _x = raw.x,
|
|
215
|
-
_y = raw.y;
|
|
216
|
-
return datasetLabel + " \u2014 x: " + _x + ", y: " + _y;
|
|
217
|
-
}
|
|
218
|
-
// Floating bar [min, max]
|
|
219
|
-
if (Array.isArray(raw) && raw.length === 2) {
|
|
220
|
-
var min = raw[0],
|
|
221
|
-
max = raw[1];
|
|
222
|
-
return datasetLabel + ": " + min + " \u2013 " + max;
|
|
223
|
-
}
|
|
224
|
-
// Default: single number or string
|
|
225
|
-
return datasetLabel + ": " + raw;
|
|
218
|
+
x: "200",
|
|
219
|
+
y: "400",
|
|
220
|
+
width: "1400",
|
|
221
|
+
height: "1000"
|
|
222
|
+
})), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
223
|
+
x: "486.006",
|
|
224
|
+
y: "568.026",
|
|
225
|
+
style: {
|
|
226
|
+
fill: reactComponents.tokens.colorNeutralBackground1
|
|
226
227
|
},
|
|
227
|
-
|
|
228
|
-
|
|
228
|
+
width: "1038.994",
|
|
229
|
+
height: "768.164"
|
|
230
|
+
}), React__default.createElement("path", {
|
|
231
|
+
style: {
|
|
232
|
+
fill: reactComponents.tokens.colorNeutralStroke1
|
|
229
233
|
},
|
|
230
|
-
|
|
231
|
-
|
|
234
|
+
d: "M1527.5,1338.69H483.506V565.526H1527.5V1338.69z M488.506,1333.69H1522.5V570.526H488.506V1333.69z"
|
|
235
|
+
})), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
236
|
+
x: "558.003",
|
|
237
|
+
y: "1086.698",
|
|
238
|
+
style: {
|
|
239
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
240
|
+
opacity: 0.3
|
|
232
241
|
},
|
|
233
|
-
|
|
234
|
-
|
|
242
|
+
width: "85",
|
|
243
|
+
height: "164.492"
|
|
244
|
+
}), React__default.createElement("rect", {
|
|
245
|
+
x: "693.003",
|
|
246
|
+
y: "1004.672",
|
|
247
|
+
style: {
|
|
248
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
249
|
+
opacity: 0.3
|
|
235
250
|
},
|
|
236
|
-
|
|
237
|
-
|
|
251
|
+
width: "85",
|
|
252
|
+
height: "246.519"
|
|
253
|
+
}), React__default.createElement("rect", {
|
|
254
|
+
x: "828.003",
|
|
255
|
+
y: "835.487",
|
|
256
|
+
style: {
|
|
257
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
258
|
+
opacity: 0.3
|
|
238
259
|
},
|
|
239
|
-
|
|
240
|
-
|
|
260
|
+
width: "85",
|
|
261
|
+
height: "415.703"
|
|
262
|
+
}), React__default.createElement("rect", {
|
|
263
|
+
x: "963.003",
|
|
264
|
+
y: "955.6",
|
|
265
|
+
style: {
|
|
266
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
267
|
+
opacity: 0.3
|
|
241
268
|
},
|
|
242
|
-
|
|
243
|
-
|
|
269
|
+
width: "85",
|
|
270
|
+
height: "295.591"
|
|
271
|
+
}), React__default.createElement("rect", {
|
|
272
|
+
x: "1098.003",
|
|
273
|
+
y: "825.238",
|
|
274
|
+
style: {
|
|
275
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
276
|
+
opacity: 0.3
|
|
244
277
|
},
|
|
245
|
-
|
|
246
|
-
|
|
278
|
+
width: "85",
|
|
279
|
+
height: "425.952"
|
|
280
|
+
}), React__default.createElement("rect", {
|
|
281
|
+
x: "1233.003",
|
|
282
|
+
y: "847.489",
|
|
283
|
+
style: {
|
|
284
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
285
|
+
opacity: 0.3
|
|
247
286
|
},
|
|
248
|
-
|
|
249
|
-
|
|
287
|
+
width: "85",
|
|
288
|
+
height: "403.701"
|
|
289
|
+
}), React__default.createElement("rect", {
|
|
290
|
+
x: "1368.003",
|
|
291
|
+
y: "699.989",
|
|
292
|
+
style: {
|
|
293
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
294
|
+
opacity: 0.3
|
|
250
295
|
},
|
|
251
|
-
|
|
252
|
-
|
|
296
|
+
width: "85",
|
|
297
|
+
height: "551.201"
|
|
298
|
+
}), React__default.createElement("polygon", {
|
|
299
|
+
style: {
|
|
300
|
+
fill: reactComponents.tokens.colorBrandBackground
|
|
253
301
|
},
|
|
254
|
-
|
|
255
|
-
|
|
302
|
+
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"
|
|
303
|
+
})), React__default.createElement("rect", {
|
|
304
|
+
x: "796.336",
|
|
305
|
+
y: "662.857",
|
|
306
|
+
style: {
|
|
307
|
+
fill: reactComponents.tokens.colorBrandBackground
|
|
256
308
|
},
|
|
257
|
-
|
|
258
|
-
|
|
309
|
+
width: "418.333",
|
|
310
|
+
height: "5"
|
|
311
|
+
}), React__default.createElement("rect", {
|
|
312
|
+
x: "937.543",
|
|
313
|
+
y: "717.857",
|
|
314
|
+
style: {
|
|
315
|
+
fill: reactComponents.tokens.colorBrandBackground
|
|
259
316
|
},
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
};
|
|
268
|
-
return {
|
|
269
|
-
enabled: true,
|
|
270
|
-
displayColors: true,
|
|
271
|
-
boxWidth: 10,
|
|
272
|
-
boxHeight: 10,
|
|
273
|
-
boxPadding: 5,
|
|
274
|
-
backgroundColor: tooltipBg,
|
|
275
|
-
borderColor: borderColor,
|
|
276
|
-
borderWidth: 1,
|
|
277
|
-
cornerRadius: 4,
|
|
278
|
-
padding: 10,
|
|
279
|
-
titleColor: tooltipTitleColor,
|
|
280
|
-
bodyColor: tooltipBodyColor,
|
|
281
|
-
titleFont: {
|
|
282
|
-
family: fontFamily,
|
|
283
|
-
size: fontSize
|
|
317
|
+
width: "135.92",
|
|
318
|
+
height: "5"
|
|
319
|
+
})), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
320
|
+
x: "264.978",
|
|
321
|
+
y: "441.049",
|
|
322
|
+
style: {
|
|
323
|
+
fill: reactComponents.tokens.colorNeutralBackground1
|
|
284
324
|
},
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
325
|
+
width: "482.581",
|
|
326
|
+
height: "379.067"
|
|
327
|
+
}), React__default.createElement("path", {
|
|
328
|
+
style: {
|
|
329
|
+
fill: reactComponents.tokens.colorNeutralStroke1
|
|
288
330
|
},
|
|
289
|
-
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
* Returns a Chart.js ticks callback to truncate long labels and add optional prefix/suffix.
|
|
294
|
-
*/
|
|
295
|
-
var createAxisLabelFormatter = function createAxisLabelFormatter(_ref) {
|
|
296
|
-
var _ref$maxLength = _ref.maxLength,
|
|
297
|
-
maxLength = _ref$maxLength === void 0 ? 12 : _ref$maxLength,
|
|
298
|
-
_ref$suffix = _ref.suffix,
|
|
299
|
-
suffix = _ref$suffix === void 0 ? '' : _ref$suffix,
|
|
300
|
-
_ref$prefix = _ref.prefix,
|
|
301
|
-
prefix = _ref$prefix === void 0 ? '' : _ref$prefix;
|
|
302
|
-
return function (value) {
|
|
303
|
-
var label = typeof value === 'number' ? this.getLabelForValue(value) : String(value);
|
|
304
|
-
var trimmed = label.length > maxLength ? label.slice(0, maxLength) + '…' : label;
|
|
305
|
-
return "" + prefix + trimmed + suffix;
|
|
306
|
-
};
|
|
307
|
-
};
|
|
308
|
-
function debounce(fn, delay) {
|
|
309
|
-
var timer = null;
|
|
310
|
-
return function () {
|
|
311
|
-
var _this = this;
|
|
312
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
313
|
-
args[_key] = arguments[_key];
|
|
314
|
-
}
|
|
315
|
-
if (timer) clearTimeout(timer);
|
|
316
|
-
timer = setTimeout(function () {
|
|
317
|
-
return fn.apply(_this, args);
|
|
318
|
-
}, delay);
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* useChartUtils — shared theming and chart helpers.
|
|
323
|
-
*/
|
|
324
|
-
function useChartUtils(theme) {
|
|
325
|
-
return React.useMemo(function () {
|
|
326
|
-
return {
|
|
327
|
-
lightenColor: lightenColor,
|
|
328
|
-
getFluentPalette: getFluentPalette,
|
|
329
|
-
createFluentTooltip: createFluentTooltip,
|
|
330
|
-
createAxisLabelFormatter: createAxisLabelFormatter,
|
|
331
|
-
debounce: debounce
|
|
332
|
-
};
|
|
333
|
-
}, [theme]);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
var LegendButton = function LegendButton(_ref) {
|
|
337
|
-
var label = _ref.label,
|
|
338
|
-
isVisible = _ref.isVisible,
|
|
339
|
-
color = _ref.color,
|
|
340
|
-
onClick = _ref.onClick,
|
|
341
|
-
_ref$style = _ref.style,
|
|
342
|
-
style = _ref$style === void 0 ? {} : _ref$style,
|
|
343
|
-
buttonRef = _ref.buttonRef;
|
|
344
|
-
return React__default.createElement(reactComponents.Tooltip, {
|
|
345
|
-
content: label,
|
|
346
|
-
relationship: "label"
|
|
347
|
-
}, React__default.createElement(reactComponents.Button, {
|
|
348
|
-
ref: buttonRef,
|
|
349
|
-
shape: "circular",
|
|
350
|
-
size: "small",
|
|
351
|
-
appearance: isVisible ? 'primary' : 'outline',
|
|
352
|
-
onClick: onClick,
|
|
353
|
-
style: _extends({
|
|
354
|
-
backgroundColor: isVisible ? color : 'transparent',
|
|
355
|
-
color: isVisible ? '#fff' : reactComponents.tokens.colorNeutralForeground1,
|
|
356
|
-
borderColor: color,
|
|
357
|
-
borderWidth: 1,
|
|
358
|
-
width: '100px',
|
|
359
|
-
padding: '4px 8px',
|
|
360
|
-
textAlign: 'center'
|
|
361
|
-
}, style)
|
|
362
|
-
}, React__default.createElement(reactComponents.Caption1, {
|
|
363
|
-
as: "span",
|
|
331
|
+
d: "M750.06,822.616H262.478V438.549H750.06V822.616z M267.478,817.616H745.06V443.549H267.478V817.616z"
|
|
332
|
+
})), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
333
|
+
x: "330.537",
|
|
334
|
+
y: "503.15",
|
|
364
335
|
style: {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
336
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
337
|
+
opacity: 0.3
|
|
338
|
+
},
|
|
339
|
+
width: "108.842",
|
|
340
|
+
height: "61.633"
|
|
341
|
+
}), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
342
|
+
x: "485.277",
|
|
343
|
+
y: "509.093",
|
|
344
|
+
style: {
|
|
345
|
+
fill: reactComponents.tokens.colorBrandBackground
|
|
346
|
+
},
|
|
347
|
+
width: "198.014",
|
|
348
|
+
height: "2.623"
|
|
349
|
+
}), React__default.createElement("rect", {
|
|
350
|
+
x: "485.277",
|
|
351
|
+
y: "532.656",
|
|
352
|
+
style: {
|
|
353
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
354
|
+
opacity: 0.3
|
|
355
|
+
},
|
|
356
|
+
width: "198.014",
|
|
357
|
+
height: "2.623"
|
|
358
|
+
}), React__default.createElement("rect", {
|
|
359
|
+
x: "485.277",
|
|
360
|
+
y: "556.218",
|
|
361
|
+
style: {
|
|
362
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
363
|
+
opacity: 0.3
|
|
364
|
+
},
|
|
365
|
+
width: "198.014",
|
|
366
|
+
height: "2.623"
|
|
367
|
+
}))), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
368
|
+
x: "381.691",
|
|
369
|
+
y: "687.747",
|
|
370
|
+
style: {
|
|
371
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
372
|
+
opacity: 0.3
|
|
373
|
+
},
|
|
374
|
+
width: "22.73",
|
|
375
|
+
height: "70.417"
|
|
376
|
+
}), React__default.createElement("rect", {
|
|
377
|
+
x: "404.421",
|
|
378
|
+
y: "653.482",
|
|
379
|
+
style: {
|
|
380
|
+
fill: reactComponents.tokens.colorBrandBackground
|
|
381
|
+
},
|
|
382
|
+
width: "22.73",
|
|
383
|
+
height: "104.682"
|
|
384
|
+
})), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
385
|
+
x: "466.491",
|
|
386
|
+
y: "641.634",
|
|
387
|
+
style: {
|
|
388
|
+
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
389
|
+
opacity: 0.3
|
|
390
|
+
},
|
|
391
|
+
width: "22.73",
|
|
392
|
+
height: "116.089"
|
|
393
|
+
}), React__default.createElement("rect", {
|
|
394
|
+
x: "489.221",
|
|
395
|
+
y: "714.758",
|
|
396
|
+
style: {
|
|
397
|
+
fill: reactComponents.tokens.colorBrandBackground
|
|
398
|
+
},
|
|
399
|
+
width: "22.73",
|
|
400
|
+
height: "42.965"
|
|
401
|
+
}))))));
|
|
372
402
|
};
|
|
373
403
|
|
|
374
404
|
/**
|
|
@@ -445,910 +475,541 @@ var Stack = /*#__PURE__*/React__default.memo(function (_ref) {
|
|
|
445
475
|
});
|
|
446
476
|
Stack.displayName = "Stack";
|
|
447
477
|
|
|
448
|
-
var
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
478
|
+
var NoDashboards = function NoDashboards(props) {
|
|
479
|
+
var height = props.height;
|
|
480
|
+
return React.createElement(React.Fragment, null, React.createElement(Stack, {
|
|
481
|
+
style: {
|
|
482
|
+
height: height || "100%"
|
|
483
|
+
},
|
|
484
|
+
justifyContent: "Center",
|
|
485
|
+
alignItems: "Center"
|
|
486
|
+
}, React.createElement(BusinessReportIcon, {
|
|
487
|
+
width: 200,
|
|
488
|
+
height: 200
|
|
489
|
+
}), React.createElement(reactComponents.Text, {
|
|
490
|
+
size: 500,
|
|
491
|
+
weight: 'semibold'
|
|
492
|
+
}, "No Dashboards Available")));
|
|
459
493
|
};
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
}), overflowItems.length > 0 && React__default.createElement(reactComponents.Menu, null, React__default.createElement(reactComponents.MenuTrigger, {
|
|
491
|
-
disableButtonEnhancement: true
|
|
492
|
-
}, React__default.createElement(reactComponents.MenuButton, {
|
|
493
|
-
size: "small",
|
|
494
|
-
appearance: "transparent"
|
|
495
|
-
}, "+", overflowItems.length)), React__default.createElement(reactComponents.MenuPopover, {
|
|
494
|
+
|
|
495
|
+
var useRenderLabelStyles = /*#__PURE__*/reactComponents.makeStyles({
|
|
496
|
+
labelContainer: /*#__PURE__*/_extends({
|
|
497
|
+
display: "flex",
|
|
498
|
+
flexDirection: "row",
|
|
499
|
+
justifyContent: "flex-start",
|
|
500
|
+
alignItems: "center"
|
|
501
|
+
}, /*#__PURE__*/reactComponents.shorthands.gap("6px")),
|
|
502
|
+
iconStyles: {
|
|
503
|
+
width: "26px"
|
|
504
|
+
},
|
|
505
|
+
item: {
|
|
506
|
+
paddingLeft: "15px"
|
|
507
|
+
}
|
|
508
|
+
});
|
|
509
|
+
|
|
510
|
+
var RenderLabel = function RenderLabel(props) {
|
|
511
|
+
var label = props.label,
|
|
512
|
+
icon = props.icon,
|
|
513
|
+
isRequired = props.isRequired;
|
|
514
|
+
var styles = useRenderLabelStyles();
|
|
515
|
+
return React.createElement(React.Fragment, null, React.createElement("div", {
|
|
516
|
+
className: styles.labelContainer
|
|
517
|
+
}, icon && React.isValidElement(icon) ? icon : React.createElement(react.Icon, {
|
|
518
|
+
icon: icon,
|
|
519
|
+
className: styles.iconStyles,
|
|
520
|
+
width: "20px",
|
|
521
|
+
height: "20px",
|
|
522
|
+
color: reactComponents.tokens.colorBrandForeground1
|
|
523
|
+
}), React.createElement(reactComponents.Caption1, {
|
|
496
524
|
style: {
|
|
497
|
-
|
|
498
|
-
maxWidth: '200px'
|
|
525
|
+
color: reactComponents.tokens.colorBrandForeground1
|
|
499
526
|
}
|
|
500
|
-
},
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
return React__default.createElement(reactComponents.MenuItem, {
|
|
504
|
-
key: label,
|
|
505
|
-
style: {
|
|
506
|
-
padding: 0
|
|
507
|
-
}
|
|
508
|
-
}, React__default.createElement(LegendButton, {
|
|
509
|
-
label: renderLabel(item),
|
|
510
|
-
color: getColor(item),
|
|
511
|
-
isVisible: isVisible,
|
|
512
|
-
onClick: function onClick() {
|
|
513
|
-
return toggleLabel(label);
|
|
514
|
-
},
|
|
515
|
-
style: {
|
|
516
|
-
width: '100px',
|
|
517
|
-
textAlign: 'left'
|
|
518
|
-
}
|
|
519
|
-
}));
|
|
520
|
-
}))))));
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
var BUTTON_WIDTH = 100;
|
|
524
|
-
var GAP = 10;
|
|
525
|
-
function useResponsiveLegend(items) {
|
|
526
|
-
var containerRef = React.useRef(null);
|
|
527
|
-
var _useState = React.useState(items.length),
|
|
528
|
-
maxVisible = _useState[0],
|
|
529
|
-
setMaxVisible = _useState[1];
|
|
530
|
-
var _useChartUtils = useChartUtils(),
|
|
531
|
-
debounce = _useChartUtils.debounce;
|
|
532
|
-
React.useEffect(function () {
|
|
533
|
-
var measure = function measure() {
|
|
534
|
-
var _containerRef$current, _containerRef$current2;
|
|
535
|
-
var containerWidth = (_containerRef$current = (_containerRef$current2 = containerRef.current) == null ? void 0 : _containerRef$current2.offsetWidth) != null ? _containerRef$current : 0;
|
|
536
|
-
var itemTotalWidth = BUTTON_WIDTH + GAP;
|
|
537
|
-
var count = Math.floor(containerWidth / itemTotalWidth);
|
|
538
|
-
setMaxVisible(count);
|
|
539
|
-
};
|
|
540
|
-
var debouncedMeasure = debounce(measure, 100); // debounce resize
|
|
541
|
-
var observer = new resizeObserver.ResizeObserver(debouncedMeasure);
|
|
542
|
-
if (containerRef.current) observer.observe(containerRef.current);
|
|
543
|
-
measure(); // initial
|
|
544
|
-
return function () {
|
|
545
|
-
return observer.disconnect();
|
|
546
|
-
};
|
|
547
|
-
}, [items]);
|
|
548
|
-
return {
|
|
549
|
-
containerRef: containerRef,
|
|
550
|
-
visibleItems: items.slice(0, maxVisible),
|
|
551
|
-
overflowItems: items.slice(maxVisible)
|
|
552
|
-
};
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
var RenderLegend = function RenderLegend(_ref) {
|
|
556
|
-
var data = _ref.data,
|
|
557
|
-
visibleSeries = _ref.visibleSeries,
|
|
558
|
-
seriesColors = _ref.seriesColors,
|
|
559
|
-
toggleSeries = _ref.toggleSeries;
|
|
560
|
-
var _useResponsiveLegend = useResponsiveLegend(data),
|
|
561
|
-
containerRef = _useResponsiveLegend.containerRef,
|
|
562
|
-
visibleItems = _useResponsiveLegend.visibleItems,
|
|
563
|
-
overflowItems = _useResponsiveLegend.overflowItems;
|
|
564
|
-
return React__default.createElement(LegendContainer, {
|
|
565
|
-
containerRef: containerRef,
|
|
566
|
-
visibleItems: visibleItems,
|
|
567
|
-
overflowItems: overflowItems,
|
|
568
|
-
items: data,
|
|
569
|
-
visibleLabels: visibleSeries,
|
|
570
|
-
toggleLabel: toggleSeries,
|
|
571
|
-
renderLabel: function renderLabel(d) {
|
|
572
|
-
return d.label;
|
|
573
|
-
},
|
|
574
|
-
getColor: function getColor(d) {
|
|
575
|
-
return seriesColors[d.label];
|
|
527
|
+
}, label), React.createElement(reactComponents.Caption1, {
|
|
528
|
+
style: {
|
|
529
|
+
color: reactComponents.tokens.colorPaletteRedForeground1
|
|
576
530
|
}
|
|
577
|
-
});
|
|
531
|
+
}, isRequired ? " *" : "")));
|
|
578
532
|
};
|
|
579
533
|
|
|
580
|
-
var _templateObject, _templateObject2;
|
|
581
|
-
var
|
|
534
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
|
|
535
|
+
var useStyles = function useStyles() {
|
|
582
536
|
return {
|
|
583
|
-
|
|
537
|
+
gridContainer: css.css(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n display: grid;\n gap: 4px;\n padding: 8px;\n justify-content: center;\n "]))),
|
|
538
|
+
cell: css.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 "])), reactComponents.tokens.colorNeutralStroke1, reactComponents.tokens.colorNeutralBackground1),
|
|
539
|
+
hoveredCell: css.css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n background-color: ", ";\n transform: scale(1.05);\n "])), reactComponents.tokens.colorNeutralBackground1Hover),
|
|
540
|
+
selectedCell: css.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n background-color: ", ";\n "])), reactComponents.tokens.colorNeutralBackground1Selected),
|
|
541
|
+
menuPopover: css.css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n min-width: fit-content;\n "]))),
|
|
542
|
+
bottomText: css.css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n padding-left: 8px;\n padding-right: 8px;\n "]))),
|
|
543
|
+
zoomContainer: css.css({
|
|
584
544
|
display: 'flex',
|
|
585
|
-
flexDirection: '
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
})
|
|
592
|
-
chartArea: css.css(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n flex-grow: 1;\n min-height: 0;\n "]))),
|
|
593
|
-
legendArea: css.css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n margin-top: 0px;\n padding-top: 0px;\n \n margin-Left: 10px;\n margin-Right: 10px;\n \n "])))
|
|
545
|
+
flexDirection: 'row',
|
|
546
|
+
alignItems: 'center',
|
|
547
|
+
gap: '6px',
|
|
548
|
+
width: '100%',
|
|
549
|
+
boxSizing: 'border-box',
|
|
550
|
+
padding: '8px 0px'
|
|
551
|
+
})
|
|
594
552
|
};
|
|
595
553
|
};
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
getFluentPalette = _useChartUtils.getFluentPalette,
|
|
619
|
-
createFluentTooltip = _useChartUtils.createFluentTooltip;
|
|
620
|
-
var styles = useGraphGlobalStyles();
|
|
621
|
-
var seriesColors = React.useMemo(function () {
|
|
622
|
-
return data.reduce(function (acc, series, idx) {
|
|
623
|
-
var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
|
|
624
|
-
var color = lightenColor(base, 0.3);
|
|
625
|
-
acc[series.label] = color;
|
|
626
|
-
return acc;
|
|
627
|
-
}, {});
|
|
628
|
-
}, [data]);
|
|
629
|
-
var toggleSeries = function toggleSeries(label) {
|
|
630
|
-
setVisibleSeries(function (prev) {
|
|
631
|
-
var isVisible = prev.includes(label);
|
|
632
|
-
var next = isVisible ? prev.filter(function (l) {
|
|
633
|
-
return l !== label;
|
|
634
|
-
}) : [].concat(prev, [label]);
|
|
635
|
-
return next.length === 0 && data.length > 0 ? [data[0].label] : next;
|
|
636
|
-
});
|
|
554
|
+
var SelectZoom = function SelectZoom(props) {
|
|
555
|
+
var onChange = props.onChange,
|
|
556
|
+
defaultValues = props.values,
|
|
557
|
+
maxCols = props.maxCols,
|
|
558
|
+
maxRows = props.maxRows;
|
|
559
|
+
var Settings = reactIcons.bundleIcon(reactIcons.Settings20Filled, reactIcons.Settings20Regular);
|
|
560
|
+
var styles = useStyles();
|
|
561
|
+
var _React$useState = React.useState(defaultValues),
|
|
562
|
+
values = _React$useState[0],
|
|
563
|
+
setValues = _React$useState[1];
|
|
564
|
+
var _React$useState2 = React.useState(null),
|
|
565
|
+
hovered = _React$useState2[0],
|
|
566
|
+
setHovered = _React$useState2[1];
|
|
567
|
+
var _React$useState3 = React.useState(false),
|
|
568
|
+
open = _React$useState3[0],
|
|
569
|
+
setOpen = _React$useState3[1];
|
|
570
|
+
React.useEffect(function () {
|
|
571
|
+
setValues(defaultValues);
|
|
572
|
+
}, [defaultValues]);
|
|
573
|
+
var onOpenChange = function onOpenChange(_, data) {
|
|
574
|
+
setOpen(data.open);
|
|
575
|
+
setHovered(null);
|
|
637
576
|
};
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
series.data.forEach(function (datum) {
|
|
643
|
-
categorySet.add(getPrimary(datum));
|
|
644
|
-
});
|
|
645
|
-
});
|
|
646
|
-
return Array.from(categorySet);
|
|
647
|
-
}, [data, getPrimary]);
|
|
648
|
-
// Construct Chart.js datasets
|
|
649
|
-
var chartData = React.useMemo(function () {
|
|
650
|
-
return {
|
|
651
|
-
labels: allCategories,
|
|
652
|
-
datasets: data.filter(function (series) {
|
|
653
|
-
return visibleSeries.includes(series.label);
|
|
654
|
-
}).map(function (series) {
|
|
655
|
-
return {
|
|
656
|
-
label: series.label,
|
|
657
|
-
backgroundColor: seriesColors[series.label],
|
|
658
|
-
data: allCategories.map(function (cat) {
|
|
659
|
-
var found = series.data.find(function (d) {
|
|
660
|
-
return getPrimary(d) === cat;
|
|
661
|
-
});
|
|
662
|
-
return found ? getSecondary(found) : 0;
|
|
663
|
-
}),
|
|
664
|
-
// Assign y-axis based on series type when stacked
|
|
665
|
-
yAxisID: stacked ? series.type === 'line' ? 'y1' : 'y' : 'y'
|
|
666
|
-
};
|
|
667
|
-
})
|
|
577
|
+
var handleCellClick = function handleCellClick(row, col) {
|
|
578
|
+
var newValues = {
|
|
579
|
+
spanCols: col + 1,
|
|
580
|
+
spanRows: row + 1
|
|
668
581
|
};
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
var
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
weight: theme.fontWeightSemibold
|
|
582
|
+
setValues(newValues);
|
|
583
|
+
onChange == null || onChange(newValues);
|
|
584
|
+
setOpen(false);
|
|
585
|
+
};
|
|
586
|
+
var handleCellHover = function handleCellHover(row, col) {
|
|
587
|
+
setHovered({
|
|
588
|
+
spanCols: col + 1,
|
|
589
|
+
spanRows: row + 1
|
|
590
|
+
});
|
|
591
|
+
};
|
|
592
|
+
var handleMouseLeave = function handleMouseLeave() {
|
|
593
|
+
setHovered(null);
|
|
594
|
+
};
|
|
595
|
+
var renderGridCells = function renderGridCells() {
|
|
596
|
+
var cells = [];
|
|
597
|
+
var _loop = function _loop(row) {
|
|
598
|
+
var _loop2 = function _loop2(col) {
|
|
599
|
+
var isSelected = row < values.spanRows && col < values.spanCols;
|
|
600
|
+
var isHovered = hovered && row < hovered.spanRows && col < hovered.spanCols;
|
|
601
|
+
cells.push(React.createElement("div", {
|
|
602
|
+
key: row + "-" + col,
|
|
603
|
+
className: styles.cell + " " + (isHovered ? styles.hoveredCell : "") + " " + (isSelected ? styles.selectedCell : ""),
|
|
604
|
+
onMouseEnter: function onMouseEnter() {
|
|
605
|
+
return handleCellHover(row, col);
|
|
694
606
|
},
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
top: 20,
|
|
698
|
-
bottom: 20
|
|
699
|
-
}
|
|
700
|
-
},
|
|
701
|
-
datalabels: {
|
|
702
|
-
display: showDatalabels,
|
|
703
|
-
color: theme.colorNeutralForeground1,
|
|
704
|
-
font: {
|
|
705
|
-
family: theme.fontFamilyBase,
|
|
706
|
-
size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14
|
|
607
|
+
onClick: function onClick() {
|
|
608
|
+
return handleCellClick(row, col);
|
|
707
609
|
}
|
|
708
|
-
}
|
|
709
|
-
legend: {
|
|
710
|
-
display: false
|
|
711
|
-
},
|
|
712
|
-
tooltip: createFluentTooltip(theme)
|
|
713
|
-
},
|
|
714
|
-
scales: _extends({
|
|
715
|
-
x: {
|
|
716
|
-
stacked: stacked,
|
|
717
|
-
ticks: {
|
|
718
|
-
callback: createAxisLabelFormatter({
|
|
719
|
-
maxLength: 10
|
|
720
|
-
}),
|
|
721
|
-
color: labelColor,
|
|
722
|
-
font: {
|
|
723
|
-
family: fontFamily,
|
|
724
|
-
size: fontSize
|
|
725
|
-
}
|
|
726
|
-
},
|
|
727
|
-
grid: {
|
|
728
|
-
color: gridColor
|
|
729
|
-
}
|
|
730
|
-
},
|
|
731
|
-
y: {
|
|
732
|
-
type: 'linear',
|
|
733
|
-
position: 'left',
|
|
734
|
-
stacked: stacked,
|
|
735
|
-
ticks: {
|
|
736
|
-
callback: createAxisLabelFormatter({
|
|
737
|
-
maxLength: 10
|
|
738
|
-
}),
|
|
739
|
-
color: labelColor,
|
|
740
|
-
font: {
|
|
741
|
-
family: fontFamily,
|
|
742
|
-
size: fontSize
|
|
743
|
-
}
|
|
744
|
-
},
|
|
745
|
-
grid: {
|
|
746
|
-
color: gridColor
|
|
747
|
-
}
|
|
748
|
-
}
|
|
749
|
-
}, stacked && {
|
|
750
|
-
y1: {
|
|
751
|
-
type: 'linear',
|
|
752
|
-
position: 'right',
|
|
753
|
-
ticks: {
|
|
754
|
-
callback: createAxisLabelFormatter({
|
|
755
|
-
maxLength: 10
|
|
756
|
-
}),
|
|
757
|
-
color: labelColor,
|
|
758
|
-
font: {
|
|
759
|
-
family: fontFamily,
|
|
760
|
-
size: fontSize
|
|
761
|
-
}
|
|
762
|
-
},
|
|
763
|
-
grid: {
|
|
764
|
-
drawOnChartArea: false
|
|
765
|
-
}
|
|
766
|
-
}
|
|
767
|
-
})
|
|
768
|
-
};
|
|
769
|
-
}, [title, showDatalabels, theme, fontFamily, fontSize, labelColor, gridColor, stacked, createFluentTooltip]);
|
|
770
|
-
return React__default.createElement("div", {
|
|
771
|
-
className: styles.chartWithLegend
|
|
772
|
-
}, React__default.createElement("div", {
|
|
773
|
-
className: styles.chartArea
|
|
774
|
-
}, React__default.createElement(reactChartjs2.Bar, {
|
|
775
|
-
data: chartData,
|
|
776
|
-
options: options
|
|
777
|
-
})), React__default.createElement("div", {
|
|
778
|
-
className: styles.legendArea
|
|
779
|
-
}, React__default.createElement(RenderLegend, {
|
|
780
|
-
data: data,
|
|
781
|
-
visibleSeries: visibleSeries,
|
|
782
|
-
seriesColors: seriesColors,
|
|
783
|
-
toggleSeries: toggleSeries
|
|
784
|
-
})));
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
chart_js.Chart.register(ChartDataLabels);
|
|
788
|
-
chart_js.Chart.register(chart_js.CategoryScale, chart_js.LinearScale, chart_js.BarElement, chart_js.LineElement, chart_js.PointElement, chart_js.Tooltip, chart_js.Legend, chart_js.Title);
|
|
789
|
-
function ComboChart(_ref) {
|
|
790
|
-
var data = _ref.data,
|
|
791
|
-
getPrimary = _ref.getPrimary,
|
|
792
|
-
getSecondary = _ref.getSecondary,
|
|
793
|
-
title = _ref.title,
|
|
794
|
-
_ref$showDataLabels = _ref.showDataLabels,
|
|
795
|
-
showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
|
|
796
|
-
_ref$theme = _ref.theme,
|
|
797
|
-
theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
|
|
798
|
-
var _useState = React.useState(function () {
|
|
799
|
-
return data.map(function (s) {
|
|
800
|
-
return s.label;
|
|
801
|
-
});
|
|
802
|
-
}),
|
|
803
|
-
visibleSeries = _useState[0],
|
|
804
|
-
setVisibleSeries = _useState[1];
|
|
805
|
-
var styles = useGraphGlobalStyles();
|
|
806
|
-
var _useChartUtils = useChartUtils(theme),
|
|
807
|
-
lightenColor = _useChartUtils.lightenColor,
|
|
808
|
-
getFluentPalette = _useChartUtils.getFluentPalette,
|
|
809
|
-
createFluentTooltip = _useChartUtils.createFluentTooltip;
|
|
810
|
-
var seriesColors = React.useMemo(function () {
|
|
811
|
-
return data.reduce(function (acc, series, idx) {
|
|
812
|
-
var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
|
|
813
|
-
acc[series.label] = lightenColor(base, 0.3);
|
|
814
|
-
return acc;
|
|
815
|
-
}, {});
|
|
816
|
-
}, [data, theme]);
|
|
817
|
-
var toggleSeries = function toggleSeries(label) {
|
|
818
|
-
setVisibleSeries(function (prev) {
|
|
819
|
-
var isVisible = prev.includes(label);
|
|
820
|
-
var next = isVisible ? prev.filter(function (l) {
|
|
821
|
-
return l !== label;
|
|
822
|
-
}) : [].concat(prev, [label]);
|
|
823
|
-
return next.length === 0 ? [data[0].label] : next;
|
|
824
|
-
});
|
|
825
|
-
};
|
|
826
|
-
var allCategories = React.useMemo(function () {
|
|
827
|
-
var set = new Set();
|
|
828
|
-
data.forEach(function (series) {
|
|
829
|
-
return series.data.forEach(function (d) {
|
|
830
|
-
return set.add(getPrimary(d));
|
|
831
|
-
});
|
|
832
|
-
});
|
|
833
|
-
return Array.from(set);
|
|
834
|
-
}, [data, getPrimary]);
|
|
835
|
-
var chartData = React.useMemo(function () {
|
|
836
|
-
var sortedSeries = data.filter(function (series) {
|
|
837
|
-
return visibleSeries.includes(series.label);
|
|
838
|
-
}).sort(function (a, b) {
|
|
839
|
-
// Ensure bars come before lines
|
|
840
|
-
if (a.type === 'bar' && b.type === 'line') return -1;
|
|
841
|
-
if (a.type === 'line' && b.type === 'bar') return 1;
|
|
842
|
-
return 0;
|
|
843
|
-
});
|
|
844
|
-
return {
|
|
845
|
-
labels: allCategories,
|
|
846
|
-
datasets: sortedSeries.map(function (series) {
|
|
847
|
-
var _series$yAxisID;
|
|
848
|
-
return {
|
|
849
|
-
type: series.type,
|
|
850
|
-
label: series.label,
|
|
851
|
-
yAxisID: (_series$yAxisID = series.yAxisID) != null ? _series$yAxisID : 'y',
|
|
852
|
-
data: allCategories.map(function (cat) {
|
|
853
|
-
var found = series.data.find(function (d) {
|
|
854
|
-
return getPrimary(d) === cat;
|
|
855
|
-
});
|
|
856
|
-
return found ? getSecondary(found) : 0;
|
|
857
|
-
}),
|
|
858
|
-
backgroundColor: seriesColors[series.label],
|
|
859
|
-
borderColor: seriesColors[series.label],
|
|
860
|
-
fill: series.type === 'bar',
|
|
861
|
-
tension: series.type === 'line' ? 0.4 : 0,
|
|
862
|
-
pointRadius: series.type === 'line' ? 3 : 0,
|
|
863
|
-
borderWidth: series.type === 'line' ? 2 : 1,
|
|
864
|
-
order: series.type === 'bar' ? 1 : 0
|
|
865
|
-
};
|
|
866
|
-
})
|
|
867
|
-
};
|
|
868
|
-
}, [data, visibleSeries, allCategories, getPrimary, getSecondary, seriesColors]);
|
|
869
|
-
var _useMemo = React.useMemo(function () {
|
|
870
|
-
return {
|
|
871
|
-
fontFamily: theme.fontFamilyBase,
|
|
872
|
-
fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,
|
|
873
|
-
labelColor: theme.colorNeutralForeground1,
|
|
874
|
-
gridColor: theme.colorNeutralStroke2
|
|
610
|
+
}));
|
|
875
611
|
};
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
fontSize = _useMemo.fontSize,
|
|
879
|
-
labelColor = _useMemo.labelColor,
|
|
880
|
-
gridColor = _useMemo.gridColor;
|
|
881
|
-
var options = React.useMemo(function () {
|
|
882
|
-
return {
|
|
883
|
-
responsive: true,
|
|
884
|
-
maintainAspectRatio: false,
|
|
885
|
-
plugins: {
|
|
886
|
-
title: {
|
|
887
|
-
display: !!title,
|
|
888
|
-
text: title,
|
|
889
|
-
font: {
|
|
890
|
-
size: 14,
|
|
891
|
-
family: theme.fontFamilyBase,
|
|
892
|
-
weight: theme.fontWeightSemibold
|
|
893
|
-
},
|
|
894
|
-
color: theme.colorNeutralForeground1,
|
|
895
|
-
padding: {
|
|
896
|
-
top: 20,
|
|
897
|
-
bottom: 20
|
|
898
|
-
}
|
|
899
|
-
},
|
|
900
|
-
datalabels: {
|
|
901
|
-
display: showDataLabels,
|
|
902
|
-
color: theme.colorNeutralForeground1,
|
|
903
|
-
font: {
|
|
904
|
-
family: theme.fontFamilyBase,
|
|
905
|
-
size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14
|
|
906
|
-
}
|
|
907
|
-
},
|
|
908
|
-
legend: {
|
|
909
|
-
display: false
|
|
910
|
-
},
|
|
911
|
-
tooltip: createFluentTooltip(theme)
|
|
912
|
-
},
|
|
913
|
-
scales: {
|
|
914
|
-
x: {
|
|
915
|
-
ticks: {
|
|
916
|
-
color: labelColor,
|
|
917
|
-
font: {
|
|
918
|
-
family: fontFamily,
|
|
919
|
-
size: fontSize
|
|
920
|
-
}
|
|
921
|
-
},
|
|
922
|
-
grid: {
|
|
923
|
-
color: gridColor
|
|
924
|
-
}
|
|
925
|
-
},
|
|
926
|
-
y: {
|
|
927
|
-
position: 'left',
|
|
928
|
-
ticks: {
|
|
929
|
-
color: labelColor,
|
|
930
|
-
font: {
|
|
931
|
-
family: fontFamily,
|
|
932
|
-
size: fontSize
|
|
933
|
-
}
|
|
934
|
-
},
|
|
935
|
-
grid: {
|
|
936
|
-
color: gridColor
|
|
937
|
-
},
|
|
938
|
-
stacked: false
|
|
939
|
-
}
|
|
612
|
+
for (var col = 0; col < maxCols; col++) {
|
|
613
|
+
_loop2(col);
|
|
940
614
|
}
|
|
941
615
|
};
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
}
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
_ref$height = _ref.height,
|
|
965
|
-
height = _ref$height === void 0 ? 200 : _ref$height,
|
|
966
|
-
className = _ref.className,
|
|
967
|
-
style = _ref.style;
|
|
968
|
-
return React__default.createElement("svg", {
|
|
969
|
-
width: width,
|
|
970
|
-
height: height,
|
|
971
|
-
viewBox: "200 400 1400 1000",
|
|
972
|
-
className: className,
|
|
973
|
-
style: _extends({
|
|
974
|
-
fill: reactComponents.tokens.colorNeutralForeground2
|
|
975
|
-
}, style),
|
|
976
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
977
|
-
}, React__default.createElement("g", {
|
|
978
|
-
id: "BACKGROUND"
|
|
979
|
-
}, React__default.createElement("rect", {
|
|
980
|
-
style: {
|
|
981
|
-
fill: reactComponents.tokens.colorNeutralBackground1
|
|
982
|
-
},
|
|
983
|
-
x: "200",
|
|
984
|
-
y: "400",
|
|
985
|
-
width: "1400",
|
|
986
|
-
height: "1000"
|
|
987
|
-
})), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
988
|
-
x: "486.006",
|
|
989
|
-
y: "568.026",
|
|
990
|
-
style: {
|
|
991
|
-
fill: reactComponents.tokens.colorNeutralBackground1
|
|
992
|
-
},
|
|
993
|
-
width: "1038.994",
|
|
994
|
-
height: "768.164"
|
|
995
|
-
}), React__default.createElement("path", {
|
|
996
|
-
style: {
|
|
997
|
-
fill: reactComponents.tokens.colorNeutralStroke1
|
|
998
|
-
},
|
|
999
|
-
d: "M1527.5,1338.69H483.506V565.526H1527.5V1338.69z M488.506,1333.69H1522.5V570.526H488.506V1333.69z"
|
|
1000
|
-
})), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
1001
|
-
x: "558.003",
|
|
1002
|
-
y: "1086.698",
|
|
1003
|
-
style: {
|
|
1004
|
-
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
1005
|
-
opacity: 0.3
|
|
1006
|
-
},
|
|
1007
|
-
width: "85",
|
|
1008
|
-
height: "164.492"
|
|
1009
|
-
}), React__default.createElement("rect", {
|
|
1010
|
-
x: "693.003",
|
|
1011
|
-
y: "1004.672",
|
|
1012
|
-
style: {
|
|
1013
|
-
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
1014
|
-
opacity: 0.3
|
|
1015
|
-
},
|
|
1016
|
-
width: "85",
|
|
1017
|
-
height: "246.519"
|
|
1018
|
-
}), React__default.createElement("rect", {
|
|
1019
|
-
x: "828.003",
|
|
1020
|
-
y: "835.487",
|
|
1021
|
-
style: {
|
|
1022
|
-
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
1023
|
-
opacity: 0.3
|
|
1024
|
-
},
|
|
1025
|
-
width: "85",
|
|
1026
|
-
height: "415.703"
|
|
1027
|
-
}), React__default.createElement("rect", {
|
|
1028
|
-
x: "963.003",
|
|
1029
|
-
y: "955.6",
|
|
1030
|
-
style: {
|
|
1031
|
-
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
1032
|
-
opacity: 0.3
|
|
1033
|
-
},
|
|
1034
|
-
width: "85",
|
|
1035
|
-
height: "295.591"
|
|
1036
|
-
}), React__default.createElement("rect", {
|
|
1037
|
-
x: "1098.003",
|
|
1038
|
-
y: "825.238",
|
|
1039
|
-
style: {
|
|
1040
|
-
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
1041
|
-
opacity: 0.3
|
|
1042
|
-
},
|
|
1043
|
-
width: "85",
|
|
1044
|
-
height: "425.952"
|
|
1045
|
-
}), React__default.createElement("rect", {
|
|
1046
|
-
x: "1233.003",
|
|
1047
|
-
y: "847.489",
|
|
616
|
+
for (var row = 0; row < maxRows; row++) {
|
|
617
|
+
_loop(row);
|
|
618
|
+
}
|
|
619
|
+
return cells;
|
|
620
|
+
};
|
|
621
|
+
// Compute popover width dynamically
|
|
622
|
+
var popoverWidth = React.useMemo(function () {
|
|
623
|
+
return 30 * maxCols + 4 * (maxCols - 1) + 32;
|
|
624
|
+
}, [maxCols]); // 30px for each cell, 4px gap, and 32px padding (16 left and right)
|
|
625
|
+
return React.createElement(reactComponents.Menu, {
|
|
626
|
+
open: open,
|
|
627
|
+
onOpenChange: onOpenChange
|
|
628
|
+
}, React.createElement(reactComponents.MenuTrigger, {
|
|
629
|
+
disableButtonEnhancement: true
|
|
630
|
+
}, React.createElement(reactComponents.Tooltip, {
|
|
631
|
+
content: "Configure",
|
|
632
|
+
relationship: "label"
|
|
633
|
+
}, React.createElement(reactComponents.MenuButton, {
|
|
634
|
+
icon: React.createElement(Settings, null),
|
|
635
|
+
size: "small",
|
|
636
|
+
appearance: "transparent"
|
|
637
|
+
}))), React.createElement(reactComponents.MenuPopover, {
|
|
1048
638
|
style: {
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
639
|
+
width: popoverWidth + "px",
|
|
640
|
+
minWidth: "120px",
|
|
641
|
+
padding: 8
|
|
642
|
+
}
|
|
643
|
+
}, React.createElement("div", {
|
|
644
|
+
className: styles.zoomContainer
|
|
645
|
+
}, React.createElement(RenderLabel, {
|
|
646
|
+
label: "Span (" + values.spanCols + " \xD7 " + values.spanRows + ")"
|
|
647
|
+
})), React.createElement("div", {
|
|
648
|
+
className: styles.gridContainer,
|
|
1057
649
|
style: {
|
|
1058
|
-
|
|
1059
|
-
|
|
650
|
+
gridTemplateColumns: "repeat(" + maxCols + ", 30px)",
|
|
651
|
+
gridTemplateRows: "repeat(" + maxRows + ", 30px)"
|
|
1060
652
|
},
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
653
|
+
onMouseLeave: handleMouseLeave
|
|
654
|
+
}, renderGridCells()), React.createElement(reactComponents.Caption1, {
|
|
655
|
+
className: styles.bottomText
|
|
656
|
+
}, "Click to set span")));
|
|
657
|
+
};
|
|
658
|
+
|
|
659
|
+
var LegendButton = function LegendButton(_ref) {
|
|
660
|
+
var label = _ref.label,
|
|
661
|
+
isVisible = _ref.isVisible,
|
|
662
|
+
color = _ref.color,
|
|
663
|
+
onClick = _ref.onClick,
|
|
664
|
+
_ref$style = _ref.style,
|
|
665
|
+
style = _ref$style === void 0 ? {} : _ref$style,
|
|
666
|
+
buttonRef = _ref.buttonRef;
|
|
667
|
+
return React__default.createElement(reactComponents.Tooltip, {
|
|
668
|
+
content: label,
|
|
669
|
+
relationship: "label"
|
|
670
|
+
}, React__default.createElement(reactComponents.Button, {
|
|
671
|
+
ref: buttonRef,
|
|
672
|
+
shape: "circular",
|
|
673
|
+
size: "small",
|
|
674
|
+
appearance: isVisible ? 'primary' : 'outline',
|
|
675
|
+
onClick: onClick,
|
|
676
|
+
style: _extends({
|
|
677
|
+
backgroundColor: isVisible ? color : 'transparent',
|
|
678
|
+
color: isVisible ? '#fff' : reactComponents.tokens.colorNeutralForeground1,
|
|
679
|
+
borderColor: color,
|
|
680
|
+
borderWidth: 1,
|
|
681
|
+
width: '100px',
|
|
682
|
+
padding: '4px 8px',
|
|
683
|
+
textAlign: 'center'
|
|
684
|
+
}, style)
|
|
685
|
+
}, React__default.createElement(reactComponents.Caption1, {
|
|
686
|
+
as: "span",
|
|
1064
687
|
style: {
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
688
|
+
display: 'block',
|
|
689
|
+
overflow: 'hidden',
|
|
690
|
+
textOverflow: 'ellipsis',
|
|
691
|
+
whiteSpace: 'nowrap',
|
|
692
|
+
lineHeight: '1.25'
|
|
693
|
+
}
|
|
694
|
+
}, label)));
|
|
695
|
+
};
|
|
696
|
+
|
|
697
|
+
var styles = {
|
|
698
|
+
wrapper: /*#__PURE__*/css.css({
|
|
699
|
+
display: 'flex',
|
|
700
|
+
flexWrap: 'nowrap',
|
|
701
|
+
overflow: 'hidden',
|
|
702
|
+
justifyContent: 'center',
|
|
703
|
+
gap: 10,
|
|
704
|
+
padding: 2,
|
|
705
|
+
width: '100%',
|
|
706
|
+
boxSizing: 'border-box'
|
|
707
|
+
})
|
|
708
|
+
};
|
|
709
|
+
function LegendContainer(props) {
|
|
710
|
+
var containerRef = props.containerRef,
|
|
711
|
+
visibleItems = props.visibleItems,
|
|
712
|
+
overflowItems = props.overflowItems,
|
|
713
|
+
visibleLabels = props.visibleLabels,
|
|
714
|
+
toggleLabel = props.toggleLabel,
|
|
715
|
+
renderLabel = props.renderLabel,
|
|
716
|
+
getColor = props.getColor;
|
|
717
|
+
return React__default.createElement(Stack, {
|
|
718
|
+
justifyContent: "center",
|
|
719
|
+
alignItems: "center",
|
|
720
|
+
marginLeft: "10px",
|
|
721
|
+
marginRight: "10px",
|
|
722
|
+
marginTop: "25px",
|
|
723
|
+
marginBottom: "20px"
|
|
724
|
+
}, React__default.createElement("div", {
|
|
725
|
+
ref: containerRef,
|
|
726
|
+
className: styles.wrapper
|
|
727
|
+
}, visibleItems.map(function (item) {
|
|
728
|
+
var label = item.label;
|
|
729
|
+
var isVisible = visibleLabels.length === 0 || visibleLabels.includes(label);
|
|
730
|
+
return React__default.createElement(LegendButton, {
|
|
731
|
+
key: label,
|
|
732
|
+
label: renderLabel(item),
|
|
733
|
+
color: getColor(item),
|
|
734
|
+
isVisible: isVisible,
|
|
735
|
+
onClick: function onClick() {
|
|
736
|
+
return toggleLabel(label);
|
|
737
|
+
}
|
|
738
|
+
});
|
|
739
|
+
}), overflowItems.length > 0 && React__default.createElement(reactComponents.Menu, null, React__default.createElement(reactComponents.MenuTrigger, {
|
|
740
|
+
disableButtonEnhancement: true
|
|
741
|
+
}, React__default.createElement(reactComponents.MenuButton, {
|
|
742
|
+
size: "small",
|
|
743
|
+
appearance: "transparent"
|
|
744
|
+
}, "+", overflowItems.length)), React__default.createElement(reactComponents.MenuPopover, {
|
|
1071
745
|
style: {
|
|
1072
|
-
|
|
746
|
+
minWidth: 'fit-content',
|
|
747
|
+
maxWidth: '200px'
|
|
748
|
+
}
|
|
749
|
+
}, React__default.createElement(reactComponents.MenuList, null, overflowItems.map(function (item) {
|
|
750
|
+
var label = item.label;
|
|
751
|
+
var isVisible = visibleLabels.length === 0 || visibleLabels.includes(label);
|
|
752
|
+
return React__default.createElement(reactComponents.MenuItem, {
|
|
753
|
+
key: label,
|
|
754
|
+
style: {
|
|
755
|
+
padding: 0
|
|
756
|
+
}
|
|
757
|
+
}, React__default.createElement(LegendButton, {
|
|
758
|
+
label: renderLabel(item),
|
|
759
|
+
color: getColor(item),
|
|
760
|
+
isVisible: isVisible,
|
|
761
|
+
onClick: function onClick() {
|
|
762
|
+
return toggleLabel(label);
|
|
763
|
+
},
|
|
764
|
+
style: {
|
|
765
|
+
width: '100px',
|
|
766
|
+
textAlign: 'left'
|
|
767
|
+
}
|
|
768
|
+
}));
|
|
769
|
+
}))))));
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
/**
|
|
773
|
+
* Lightens a given hex color by a percentage amount (0 to 1).
|
|
774
|
+
*/
|
|
775
|
+
var lightenColor = function lightenColor(hex, amount) {
|
|
776
|
+
if (!/^#?[0-9A-Fa-f]{6}$/.test(hex)) return hex;
|
|
777
|
+
if (hex.startsWith('#')) hex = hex.slice(1);
|
|
778
|
+
var r = parseInt(hex.slice(0, 2), 16);
|
|
779
|
+
var g = parseInt(hex.slice(2, 4), 16);
|
|
780
|
+
var b = parseInt(hex.slice(4, 6), 16);
|
|
781
|
+
r = Math.min(255, Math.floor(r + (255 - r) * amount));
|
|
782
|
+
g = Math.min(255, Math.floor(g + (255 - g) * amount));
|
|
783
|
+
b = Math.min(255, Math.floor(b + (255 - b) * amount));
|
|
784
|
+
var toHex = function toHex(v) {
|
|
785
|
+
return v.toString(16).padStart(2, '0');
|
|
786
|
+
};
|
|
787
|
+
return "#" + toHex(r) + toHex(g) + toHex(b);
|
|
788
|
+
};
|
|
789
|
+
var getFluentPalette = function getFluentPalette(_theme) {
|
|
790
|
+
return ['#4e79a7', '#f28e2c', '#e15759', '#76b7b2', '#59a14f', '#edc949', '#af7aa1', '#ff9da7', '#9c755f', '#bab0ab', '#8cd17d', '#b6992d', '#d37295', '#fabfd2', '#79706e'];
|
|
791
|
+
};
|
|
792
|
+
/**
|
|
793
|
+
* Smart Fluent tooltip generator with chart-type awareness.
|
|
794
|
+
*/
|
|
795
|
+
function createFluentTooltip(theme) {
|
|
796
|
+
var fontFamily = theme.fontFamilyBase;
|
|
797
|
+
var fontSize = parseInt(theme.fontSizeBase200.replace('px', '')) || 14;
|
|
798
|
+
var tooltipBg = theme.colorNeutralBackground1;
|
|
799
|
+
var tooltipTitleColor = theme.colorNeutralForeground1;
|
|
800
|
+
var tooltipBodyColor = theme.colorNeutralForeground2;
|
|
801
|
+
var borderColor = theme.colorNeutralStroke2;
|
|
802
|
+
var callbacks = {
|
|
803
|
+
title: function title(context) {
|
|
804
|
+
var _context$0$label, _context$;
|
|
805
|
+
return (_context$0$label = (_context$ = context[0]) == null ? void 0 : _context$.label) != null ? _context$0$label : '';
|
|
1073
806
|
},
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
807
|
+
label: function label(item) {
|
|
808
|
+
var datasetLabel = 'label' in item.dataset && typeof item.dataset.label === 'string' ? item.dataset.label : 'Value';
|
|
809
|
+
var raw = item.raw;
|
|
810
|
+
// Bubble format { x, y, r }
|
|
811
|
+
if (typeof raw === 'object' && raw !== null && 'x' in raw && 'y' in raw && 'r' in raw) {
|
|
812
|
+
var x = raw.x,
|
|
813
|
+
y = raw.y,
|
|
814
|
+
r = raw.r;
|
|
815
|
+
return datasetLabel + " \u2014 x: " + x + ", y: " + y + ", r: " + r;
|
|
816
|
+
}
|
|
817
|
+
// Scatter format { x, y }
|
|
818
|
+
if (typeof raw === 'object' && raw !== null && 'x' in raw && 'y' in raw) {
|
|
819
|
+
var _x = raw.x,
|
|
820
|
+
_y = raw.y;
|
|
821
|
+
return datasetLabel + " \u2014 x: " + _x + ", y: " + _y;
|
|
822
|
+
}
|
|
823
|
+
// Floating bar [min, max]
|
|
824
|
+
if (Array.isArray(raw) && raw.length === 2) {
|
|
825
|
+
var min = raw[0],
|
|
826
|
+
max = raw[1];
|
|
827
|
+
return datasetLabel + ": " + min + " \u2013 " + max;
|
|
828
|
+
}
|
|
829
|
+
// Default: single number or string
|
|
830
|
+
return datasetLabel + ": " + raw;
|
|
1081
831
|
},
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
})), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
1085
|
-
x: "264.978",
|
|
1086
|
-
y: "441.049",
|
|
1087
|
-
style: {
|
|
1088
|
-
fill: reactComponents.tokens.colorNeutralBackground1
|
|
832
|
+
beforeTitle: function beforeTitle() {
|
|
833
|
+
return '';
|
|
1089
834
|
},
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
}), React__default.createElement("path", {
|
|
1093
|
-
style: {
|
|
1094
|
-
fill: reactComponents.tokens.colorNeutralStroke1
|
|
835
|
+
afterTitle: function afterTitle() {
|
|
836
|
+
return '';
|
|
1095
837
|
},
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
x: "330.537",
|
|
1099
|
-
y: "503.15",
|
|
1100
|
-
style: {
|
|
1101
|
-
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
1102
|
-
opacity: 0.3
|
|
838
|
+
beforeBody: function beforeBody() {
|
|
839
|
+
return '';
|
|
1103
840
|
},
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
}), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
1107
|
-
x: "485.277",
|
|
1108
|
-
y: "509.093",
|
|
1109
|
-
style: {
|
|
1110
|
-
fill: reactComponents.tokens.colorBrandBackground
|
|
841
|
+
afterBody: function afterBody() {
|
|
842
|
+
return '';
|
|
1111
843
|
},
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
}), React__default.createElement("rect", {
|
|
1115
|
-
x: "485.277",
|
|
1116
|
-
y: "532.656",
|
|
1117
|
-
style: {
|
|
1118
|
-
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
1119
|
-
opacity: 0.3
|
|
844
|
+
beforeLabel: function beforeLabel() {
|
|
845
|
+
return '';
|
|
1120
846
|
},
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
}), React__default.createElement("rect", {
|
|
1124
|
-
x: "485.277",
|
|
1125
|
-
y: "556.218",
|
|
1126
|
-
style: {
|
|
1127
|
-
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
1128
|
-
opacity: 0.3
|
|
847
|
+
afterLabel: function afterLabel() {
|
|
848
|
+
return '';
|
|
1129
849
|
},
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
}))), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
|
|
1133
|
-
x: "381.691",
|
|
1134
|
-
y: "687.747",
|
|
1135
|
-
style: {
|
|
1136
|
-
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
1137
|
-
opacity: 0.3
|
|
850
|
+
labelColor: function labelColor() {
|
|
851
|
+
return undefined;
|
|
1138
852
|
},
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
}), React__default.createElement("rect", {
|
|
1142
|
-
x: "404.421",
|
|
1143
|
-
y: "653.482",
|
|
1144
|
-
style: {
|
|
1145
|
-
fill: reactComponents.tokens.colorBrandBackground
|
|
853
|
+
labelTextColor: function labelTextColor() {
|
|
854
|
+
return '';
|
|
1146
855
|
},
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
})), React__default.createElement("g", null, React__default.createElement("rect", {
|
|
1150
|
-
x: "466.491",
|
|
1151
|
-
y: "641.634",
|
|
1152
|
-
style: {
|
|
1153
|
-
fill: reactComponents.tokens.colorNeutralForeground3,
|
|
1154
|
-
opacity: 0.3
|
|
856
|
+
footer: function footer() {
|
|
857
|
+
return '';
|
|
1155
858
|
},
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
}), React__default.createElement("rect", {
|
|
1159
|
-
x: "489.221",
|
|
1160
|
-
y: "714.758",
|
|
1161
|
-
style: {
|
|
1162
|
-
fill: reactComponents.tokens.colorBrandBackground
|
|
859
|
+
beforeFooter: function beforeFooter() {
|
|
860
|
+
return '';
|
|
1163
861
|
},
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
}))))));
|
|
1167
|
-
};
|
|
1168
|
-
|
|
1169
|
-
var NoDashboards = function NoDashboards(props) {
|
|
1170
|
-
var height = props.height;
|
|
1171
|
-
return React.createElement(React.Fragment, null, React.createElement(Stack, {
|
|
1172
|
-
style: {
|
|
1173
|
-
height: height || "100%"
|
|
862
|
+
afterFooter: function afterFooter() {
|
|
863
|
+
return '';
|
|
1174
864
|
},
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
size: 500,
|
|
1182
|
-
weight: 'semibold'
|
|
1183
|
-
}, "No Dashboards Available")));
|
|
1184
|
-
};
|
|
1185
|
-
|
|
1186
|
-
var useRenderLabelStyles = /*#__PURE__*/reactComponents.makeStyles({
|
|
1187
|
-
labelContainer: /*#__PURE__*/_extends({
|
|
1188
|
-
display: "flex",
|
|
1189
|
-
flexDirection: "row",
|
|
1190
|
-
justifyContent: "flex-start",
|
|
1191
|
-
alignItems: "center"
|
|
1192
|
-
}, /*#__PURE__*/reactComponents.shorthands.gap("6px")),
|
|
1193
|
-
iconStyles: {
|
|
1194
|
-
width: "26px"
|
|
1195
|
-
},
|
|
1196
|
-
item: {
|
|
1197
|
-
paddingLeft: "15px"
|
|
1198
|
-
}
|
|
1199
|
-
});
|
|
1200
|
-
|
|
1201
|
-
var RenderLabel = function RenderLabel(props) {
|
|
1202
|
-
var label = props.label,
|
|
1203
|
-
icon = props.icon,
|
|
1204
|
-
isRequired = props.isRequired;
|
|
1205
|
-
var styles = useRenderLabelStyles();
|
|
1206
|
-
return React.createElement(React.Fragment, null, React.createElement("div", {
|
|
1207
|
-
className: styles.labelContainer
|
|
1208
|
-
}, icon && React.isValidElement(icon) ? icon : React.createElement(react.Icon, {
|
|
1209
|
-
icon: icon,
|
|
1210
|
-
className: styles.iconStyles,
|
|
1211
|
-
width: "20px",
|
|
1212
|
-
height: "20px",
|
|
1213
|
-
color: reactComponents.tokens.colorBrandForeground1
|
|
1214
|
-
}), React.createElement(reactComponents.Caption1, {
|
|
1215
|
-
style: {
|
|
1216
|
-
color: reactComponents.tokens.colorBrandForeground1
|
|
1217
|
-
}
|
|
1218
|
-
}, label), React.createElement(reactComponents.Caption1, {
|
|
1219
|
-
style: {
|
|
1220
|
-
color: reactComponents.tokens.colorPaletteRedForeground1
|
|
865
|
+
labelPointStyle: function labelPointStyle() {
|
|
866
|
+
return {
|
|
867
|
+
pointStyle: 'circle',
|
|
868
|
+
rotation: 0,
|
|
869
|
+
radius: 5
|
|
870
|
+
};
|
|
1221
871
|
}
|
|
1222
|
-
}
|
|
1223
|
-
};
|
|
1224
|
-
|
|
1225
|
-
var _templateObject$1, _templateObject2$1, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
|
|
1226
|
-
var useStyles = function useStyles() {
|
|
872
|
+
};
|
|
1227
873
|
return {
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
874
|
+
enabled: true,
|
|
875
|
+
displayColors: true,
|
|
876
|
+
boxWidth: 10,
|
|
877
|
+
boxHeight: 10,
|
|
878
|
+
boxPadding: 5,
|
|
879
|
+
backgroundColor: tooltipBg,
|
|
880
|
+
borderColor: borderColor,
|
|
881
|
+
borderWidth: 1,
|
|
882
|
+
cornerRadius: 4,
|
|
883
|
+
padding: 10,
|
|
884
|
+
titleColor: tooltipTitleColor,
|
|
885
|
+
bodyColor: tooltipBodyColor,
|
|
886
|
+
titleFont: {
|
|
887
|
+
family: fontFamily,
|
|
888
|
+
size: fontSize
|
|
889
|
+
},
|
|
890
|
+
bodyFont: {
|
|
891
|
+
family: fontFamily,
|
|
892
|
+
size: fontSize
|
|
893
|
+
},
|
|
894
|
+
callbacks: callbacks
|
|
895
|
+
};
|
|
896
|
+
}
|
|
897
|
+
/**
|
|
898
|
+
* Returns a Chart.js ticks callback to truncate long labels and add optional prefix/suffix.
|
|
899
|
+
*/
|
|
900
|
+
var createAxisLabelFormatter = function createAxisLabelFormatter(_ref) {
|
|
901
|
+
var _ref$maxLength = _ref.maxLength,
|
|
902
|
+
maxLength = _ref$maxLength === void 0 ? 12 : _ref$maxLength,
|
|
903
|
+
_ref$suffix = _ref.suffix,
|
|
904
|
+
suffix = _ref$suffix === void 0 ? '' : _ref$suffix,
|
|
905
|
+
_ref$prefix = _ref.prefix,
|
|
906
|
+
prefix = _ref$prefix === void 0 ? '' : _ref$prefix;
|
|
907
|
+
return function (value) {
|
|
908
|
+
var label = typeof value === 'number' ? this.getLabelForValue(value) : String(value);
|
|
909
|
+
var trimmed = label.length > maxLength ? label.slice(0, maxLength) + '…' : label;
|
|
910
|
+
return "" + prefix + trimmed + suffix;
|
|
1234
911
|
};
|
|
1235
912
|
};
|
|
1236
|
-
|
|
1237
|
-
var
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
hovered = _React$useState2[0],
|
|
1248
|
-
setHovered = _React$useState2[1];
|
|
1249
|
-
var _React$useState3 = React.useState(false),
|
|
1250
|
-
open = _React$useState3[0],
|
|
1251
|
-
setOpen = _React$useState3[1];
|
|
1252
|
-
React.useEffect(function () {
|
|
1253
|
-
setValues(defaultValues);
|
|
1254
|
-
}, [defaultValues]);
|
|
1255
|
-
var onOpenChange = function onOpenChange(_, data) {
|
|
1256
|
-
setOpen(data.open);
|
|
1257
|
-
setHovered(null);
|
|
913
|
+
function debounce(fn, delay) {
|
|
914
|
+
var timer = null;
|
|
915
|
+
return function () {
|
|
916
|
+
var _this = this;
|
|
917
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
918
|
+
args[_key] = arguments[_key];
|
|
919
|
+
}
|
|
920
|
+
if (timer) clearTimeout(timer);
|
|
921
|
+
timer = setTimeout(function () {
|
|
922
|
+
return fn.apply(_this, args);
|
|
923
|
+
}, delay);
|
|
1258
924
|
};
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
925
|
+
}
|
|
926
|
+
/**
|
|
927
|
+
* useChartUtils — shared theming and chart helpers.
|
|
928
|
+
*/
|
|
929
|
+
function useChartUtils(theme) {
|
|
930
|
+
return React.useMemo(function () {
|
|
931
|
+
return {
|
|
932
|
+
lightenColor: lightenColor,
|
|
933
|
+
getFluentPalette: getFluentPalette,
|
|
934
|
+
createFluentTooltip: createFluentTooltip,
|
|
935
|
+
createAxisLabelFormatter: createAxisLabelFormatter,
|
|
936
|
+
debounce: debounce
|
|
1263
937
|
};
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
var
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
var
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
cells.push(React.createElement("div", {
|
|
1284
|
-
key: row + "-" + col,
|
|
1285
|
-
className: styles.cell + " " + (isHovered ? styles.hoveredCell : "") + " " + (isSelected ? styles.selectedCell : ""),
|
|
1286
|
-
onMouseEnter: function onMouseEnter() {
|
|
1287
|
-
return handleCellHover(row, col);
|
|
1288
|
-
},
|
|
1289
|
-
onClick: function onClick() {
|
|
1290
|
-
return handleCellClick(row, col);
|
|
1291
|
-
}
|
|
1292
|
-
}));
|
|
1293
|
-
};
|
|
1294
|
-
for (var col = 0; col < maxCols; col++) {
|
|
1295
|
-
_loop2(col);
|
|
1296
|
-
}
|
|
938
|
+
}, [theme]);
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
var BUTTON_WIDTH = 100;
|
|
942
|
+
var GAP = 10;
|
|
943
|
+
function useResponsiveLegend(items) {
|
|
944
|
+
var containerRef = React.useRef(null);
|
|
945
|
+
var _useState = React.useState(items.length),
|
|
946
|
+
maxVisible = _useState[0],
|
|
947
|
+
setMaxVisible = _useState[1];
|
|
948
|
+
var _useChartUtils = useChartUtils(),
|
|
949
|
+
debounce = _useChartUtils.debounce;
|
|
950
|
+
React.useEffect(function () {
|
|
951
|
+
var measure = function measure() {
|
|
952
|
+
var _containerRef$current, _containerRef$current2;
|
|
953
|
+
var containerWidth = (_containerRef$current = (_containerRef$current2 = containerRef.current) == null ? void 0 : _containerRef$current2.offsetWidth) != null ? _containerRef$current : 0;
|
|
954
|
+
var itemTotalWidth = BUTTON_WIDTH + GAP;
|
|
955
|
+
var count = Math.floor(containerWidth / itemTotalWidth);
|
|
956
|
+
setMaxVisible(count);
|
|
1297
957
|
};
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
958
|
+
var debouncedMeasure = debounce(measure, 100); // debounce resize
|
|
959
|
+
var observer = new resizeObserver.ResizeObserver(debouncedMeasure);
|
|
960
|
+
if (containerRef.current) observer.observe(containerRef.current);
|
|
961
|
+
measure(); // initial
|
|
962
|
+
return function () {
|
|
963
|
+
return observer.disconnect();
|
|
964
|
+
};
|
|
965
|
+
}, [items]);
|
|
966
|
+
return {
|
|
967
|
+
containerRef: containerRef,
|
|
968
|
+
visibleItems: items.slice(0, maxVisible),
|
|
969
|
+
overflowItems: items.slice(maxVisible)
|
|
1302
970
|
};
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
padding: 8
|
|
1324
|
-
}
|
|
1325
|
-
}, React.createElement("div", {
|
|
1326
|
-
style: {
|
|
1327
|
-
display: "flex",
|
|
1328
|
-
flexDirection: "row",
|
|
1329
|
-
alignItems: "center",
|
|
1330
|
-
gap: "6px",
|
|
1331
|
-
width: "100%",
|
|
1332
|
-
boxSizing: "border-box",
|
|
1333
|
-
padding: "8px"
|
|
1334
|
-
}
|
|
1335
|
-
}, React.createElement(RenderLabel, {
|
|
1336
|
-
label: "Selected Span (" + values.spanCols + " \xD7 " + values.spanRows + ")",
|
|
1337
|
-
icon: React.createElement(react.Icon, {
|
|
1338
|
-
icon: "fluent:number-row-20-regular",
|
|
1339
|
-
width: "32",
|
|
1340
|
-
height: "32"
|
|
1341
|
-
})
|
|
1342
|
-
})), React.createElement("div", {
|
|
1343
|
-
className: styles.gridContainer,
|
|
1344
|
-
style: {
|
|
1345
|
-
gridTemplateColumns: "repeat(" + maxCols + ", 30px)",
|
|
1346
|
-
gridTemplateRows: "repeat(" + maxRows + ", 30px)"
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
var RenderLegend = function RenderLegend(_ref) {
|
|
974
|
+
var data = _ref.data,
|
|
975
|
+
visibleSeries = _ref.visibleSeries,
|
|
976
|
+
seriesColors = _ref.seriesColors,
|
|
977
|
+
toggleSeries = _ref.toggleSeries;
|
|
978
|
+
var _useResponsiveLegend = useResponsiveLegend(data),
|
|
979
|
+
containerRef = _useResponsiveLegend.containerRef,
|
|
980
|
+
visibleItems = _useResponsiveLegend.visibleItems,
|
|
981
|
+
overflowItems = _useResponsiveLegend.overflowItems;
|
|
982
|
+
return React__default.createElement(LegendContainer, {
|
|
983
|
+
containerRef: containerRef,
|
|
984
|
+
visibleItems: visibleItems,
|
|
985
|
+
overflowItems: overflowItems,
|
|
986
|
+
items: data,
|
|
987
|
+
visibleLabels: visibleSeries,
|
|
988
|
+
toggleLabel: toggleSeries,
|
|
989
|
+
renderLabel: function renderLabel(d) {
|
|
990
|
+
return d.label;
|
|
1347
991
|
},
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
}
|
|
992
|
+
getColor: function getColor(d) {
|
|
993
|
+
return seriesColors[d.label];
|
|
994
|
+
}
|
|
995
|
+
});
|
|
996
|
+
};
|
|
997
|
+
|
|
998
|
+
var _templateObject$1, _templateObject2$1;
|
|
999
|
+
var useGraphGlobalStyles = function useGraphGlobalStyles() {
|
|
1000
|
+
return {
|
|
1001
|
+
chartWithLegend: css.css({
|
|
1002
|
+
display: 'flex',
|
|
1003
|
+
flexDirection: 'column',
|
|
1004
|
+
height: '100%',
|
|
1005
|
+
chartArea: {
|
|
1006
|
+
flexGrow: 1,
|
|
1007
|
+
minHeight: 0
|
|
1008
|
+
}
|
|
1009
|
+
}),
|
|
1010
|
+
chartArea: css.css(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteralLoose(["\n flex-grow: 1;\n min-height: 0;\n "]))),
|
|
1011
|
+
legendArea: css.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 "])))
|
|
1012
|
+
};
|
|
1352
1013
|
};
|
|
1353
1014
|
|
|
1354
1015
|
chart_js.Chart.register(chart_js.CategoryScale, chart_js.LinearScale, chart_js.PointElement, chart_js.LineElement, chart_js.Tooltip, chart_js.Filler, chart_js.Legend, ChartDataLabels, chart_js.Title);
|
|
@@ -1424,7 +1085,169 @@ function AreaChart(_ref) {
|
|
|
1424
1085
|
};
|
|
1425
1086
|
})
|
|
1426
1087
|
};
|
|
1427
|
-
}, [data, visibleSeries, allCategories, getPrimary, getSecondary, seriesColors]);
|
|
1088
|
+
}, [data, visibleSeries, allCategories, getPrimary, getSecondary, seriesColors]);
|
|
1089
|
+
var _useMemo = React.useMemo(function () {
|
|
1090
|
+
return {
|
|
1091
|
+
fontFamily: theme.fontFamilyBase,
|
|
1092
|
+
fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,
|
|
1093
|
+
labelColor: theme.colorNeutralForeground1,
|
|
1094
|
+
gridColor: theme.colorNeutralStroke2
|
|
1095
|
+
};
|
|
1096
|
+
}, [theme]),
|
|
1097
|
+
fontFamily = _useMemo.fontFamily,
|
|
1098
|
+
fontSize = _useMemo.fontSize,
|
|
1099
|
+
labelColor = _useMemo.labelColor,
|
|
1100
|
+
gridColor = _useMemo.gridColor;
|
|
1101
|
+
var options = React.useMemo(function () {
|
|
1102
|
+
return {
|
|
1103
|
+
responsive: true,
|
|
1104
|
+
maintainAspectRatio: false,
|
|
1105
|
+
plugins: {
|
|
1106
|
+
title: {
|
|
1107
|
+
display: !!title,
|
|
1108
|
+
text: title,
|
|
1109
|
+
font: {
|
|
1110
|
+
size: 14,
|
|
1111
|
+
family: theme.fontFamilyBase,
|
|
1112
|
+
weight: theme.fontWeightSemibold
|
|
1113
|
+
},
|
|
1114
|
+
color: theme.colorNeutralForeground1,
|
|
1115
|
+
padding: {
|
|
1116
|
+
top: 20,
|
|
1117
|
+
bottom: 20
|
|
1118
|
+
}
|
|
1119
|
+
},
|
|
1120
|
+
datalabels: {
|
|
1121
|
+
display: showDatalabels,
|
|
1122
|
+
color: theme.colorNeutralForeground1,
|
|
1123
|
+
font: {
|
|
1124
|
+
family: theme.fontFamilyBase,
|
|
1125
|
+
size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14
|
|
1126
|
+
}
|
|
1127
|
+
},
|
|
1128
|
+
legend: {
|
|
1129
|
+
display: false
|
|
1130
|
+
},
|
|
1131
|
+
tooltip: createFluentTooltip(theme)
|
|
1132
|
+
},
|
|
1133
|
+
scales: {
|
|
1134
|
+
x: {
|
|
1135
|
+
stacked: stacked,
|
|
1136
|
+
ticks: {
|
|
1137
|
+
color: labelColor,
|
|
1138
|
+
font: {
|
|
1139
|
+
family: fontFamily,
|
|
1140
|
+
size: fontSize
|
|
1141
|
+
}
|
|
1142
|
+
},
|
|
1143
|
+
grid: {
|
|
1144
|
+
color: gridColor
|
|
1145
|
+
}
|
|
1146
|
+
},
|
|
1147
|
+
y: {
|
|
1148
|
+
stacked: stacked,
|
|
1149
|
+
ticks: {
|
|
1150
|
+
color: labelColor,
|
|
1151
|
+
font: {
|
|
1152
|
+
family: fontFamily,
|
|
1153
|
+
size: fontSize
|
|
1154
|
+
}
|
|
1155
|
+
},
|
|
1156
|
+
grid: {
|
|
1157
|
+
color: gridColor
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
};
|
|
1162
|
+
}, [title, showDatalabels, theme, fontFamily, fontSize, labelColor, gridColor, stacked, createFluentTooltip]);
|
|
1163
|
+
return React__default.createElement("div", {
|
|
1164
|
+
className: styles.chartWithLegend
|
|
1165
|
+
}, React__default.createElement("div", {
|
|
1166
|
+
className: styles.chartArea
|
|
1167
|
+
}, React__default.createElement(reactChartjs2.Line, {
|
|
1168
|
+
data: chartData,
|
|
1169
|
+
options: options
|
|
1170
|
+
})), React__default.createElement(RenderLegend, {
|
|
1171
|
+
data: data,
|
|
1172
|
+
visibleSeries: visibleSeries,
|
|
1173
|
+
seriesColors: seriesColors,
|
|
1174
|
+
toggleSeries: toggleSeries
|
|
1175
|
+
}));
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
chart_js.Chart.register(chart_js.CategoryScale, chart_js.LinearScale, chart_js.BarElement, chart_js.Tooltip, chart_js.Legend, ChartDataLabels, chart_js.Title);
|
|
1179
|
+
function BarChart(_ref) {
|
|
1180
|
+
var data = _ref.data,
|
|
1181
|
+
getPrimary = _ref.getPrimary,
|
|
1182
|
+
getSecondary = _ref.getSecondary,
|
|
1183
|
+
title = _ref.title,
|
|
1184
|
+
_ref$showDatalabels = _ref.showDatalabels,
|
|
1185
|
+
showDatalabels = _ref$showDatalabels === void 0 ? false : _ref$showDatalabels,
|
|
1186
|
+
_ref$stacked = _ref.stacked,
|
|
1187
|
+
stacked = _ref$stacked === void 0 ? false : _ref$stacked,
|
|
1188
|
+
theme = _ref.theme;
|
|
1189
|
+
var _useState = React.useState(function () {
|
|
1190
|
+
var _data$;
|
|
1191
|
+
return data.length > 1 ? data.map(function (s) {
|
|
1192
|
+
return s.label;
|
|
1193
|
+
}) : [(_data$ = data[0]) == null ? void 0 : _data$.label];
|
|
1194
|
+
}),
|
|
1195
|
+
visibleSeries = _useState[0],
|
|
1196
|
+
setVisibleSeries = _useState[1];
|
|
1197
|
+
var _useChartUtils = useChartUtils(theme),
|
|
1198
|
+
lightenColor = _useChartUtils.lightenColor,
|
|
1199
|
+
getFluentPalette = _useChartUtils.getFluentPalette,
|
|
1200
|
+
createFluentTooltip = _useChartUtils.createFluentTooltip;
|
|
1201
|
+
var styles = useGraphGlobalStyles();
|
|
1202
|
+
var seriesColors = React.useMemo(function () {
|
|
1203
|
+
return data.reduce(function (acc, series, idx) {
|
|
1204
|
+
var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
|
|
1205
|
+
var color = lightenColor(base, 0.3);
|
|
1206
|
+
acc[series.label] = color;
|
|
1207
|
+
return acc;
|
|
1208
|
+
}, {});
|
|
1209
|
+
}, [data]);
|
|
1210
|
+
var toggleSeries = function toggleSeries(label) {
|
|
1211
|
+
setVisibleSeries(function (prev) {
|
|
1212
|
+
var isVisible = prev.includes(label);
|
|
1213
|
+
var next = isVisible ? prev.filter(function (l) {
|
|
1214
|
+
return l !== label;
|
|
1215
|
+
}) : [].concat(prev, [label]);
|
|
1216
|
+
return next.length === 0 && data.length > 0 ? [data[0].label] : next;
|
|
1217
|
+
});
|
|
1218
|
+
};
|
|
1219
|
+
// Extract all unique x-axis categories (from all series)
|
|
1220
|
+
var allCategories = React.useMemo(function () {
|
|
1221
|
+
var categorySet = new Set();
|
|
1222
|
+
data.forEach(function (series) {
|
|
1223
|
+
series.data.forEach(function (datum) {
|
|
1224
|
+
categorySet.add(getPrimary(datum));
|
|
1225
|
+
});
|
|
1226
|
+
});
|
|
1227
|
+
return Array.from(categorySet);
|
|
1228
|
+
}, [data, getPrimary]);
|
|
1229
|
+
// Construct Chart.js datasets
|
|
1230
|
+
var chartData = React.useMemo(function () {
|
|
1231
|
+
return {
|
|
1232
|
+
labels: allCategories,
|
|
1233
|
+
datasets: data.filter(function (series) {
|
|
1234
|
+
return visibleSeries.includes(series.label);
|
|
1235
|
+
}).map(function (series) {
|
|
1236
|
+
return {
|
|
1237
|
+
label: series.label,
|
|
1238
|
+
backgroundColor: seriesColors[series.label],
|
|
1239
|
+
data: allCategories.map(function (cat) {
|
|
1240
|
+
var found = series.data.find(function (d) {
|
|
1241
|
+
return getPrimary(d) === cat;
|
|
1242
|
+
});
|
|
1243
|
+
return found ? getSecondary(found) : 0;
|
|
1244
|
+
}),
|
|
1245
|
+
// Assign y-axis based on series type when stacked
|
|
1246
|
+
yAxisID: stacked ? series.type === 'line' ? 'y1' : 'y' : 'y'
|
|
1247
|
+
};
|
|
1248
|
+
})
|
|
1249
|
+
};
|
|
1250
|
+
}, [data, visibleSeries, allCategories, seriesColors, stacked]);
|
|
1428
1251
|
var _useMemo = React.useMemo(function () {
|
|
1429
1252
|
return {
|
|
1430
1253
|
fontFamily: theme.fontFamilyBase,
|
|
@@ -1469,10 +1292,13 @@ function AreaChart(_ref) {
|
|
|
1469
1292
|
},
|
|
1470
1293
|
tooltip: createFluentTooltip(theme)
|
|
1471
1294
|
},
|
|
1472
|
-
scales: {
|
|
1295
|
+
scales: _extends({
|
|
1473
1296
|
x: {
|
|
1474
1297
|
stacked: stacked,
|
|
1475
1298
|
ticks: {
|
|
1299
|
+
callback: createAxisLabelFormatter({
|
|
1300
|
+
maxLength: 10
|
|
1301
|
+
}),
|
|
1476
1302
|
color: labelColor,
|
|
1477
1303
|
font: {
|
|
1478
1304
|
family: fontFamily,
|
|
@@ -1484,8 +1310,13 @@ function AreaChart(_ref) {
|
|
|
1484
1310
|
}
|
|
1485
1311
|
},
|
|
1486
1312
|
y: {
|
|
1313
|
+
type: 'linear',
|
|
1314
|
+
position: 'left',
|
|
1487
1315
|
stacked: stacked,
|
|
1488
1316
|
ticks: {
|
|
1317
|
+
callback: createAxisLabelFormatter({
|
|
1318
|
+
maxLength: 10
|
|
1319
|
+
}),
|
|
1489
1320
|
color: labelColor,
|
|
1490
1321
|
font: {
|
|
1491
1322
|
family: fontFamily,
|
|
@@ -1496,22 +1327,42 @@ function AreaChart(_ref) {
|
|
|
1496
1327
|
color: gridColor
|
|
1497
1328
|
}
|
|
1498
1329
|
}
|
|
1499
|
-
}
|
|
1330
|
+
}, stacked && {
|
|
1331
|
+
y1: {
|
|
1332
|
+
type: 'linear',
|
|
1333
|
+
position: 'right',
|
|
1334
|
+
ticks: {
|
|
1335
|
+
callback: createAxisLabelFormatter({
|
|
1336
|
+
maxLength: 10
|
|
1337
|
+
}),
|
|
1338
|
+
color: labelColor,
|
|
1339
|
+
font: {
|
|
1340
|
+
family: fontFamily,
|
|
1341
|
+
size: fontSize
|
|
1342
|
+
}
|
|
1343
|
+
},
|
|
1344
|
+
grid: {
|
|
1345
|
+
drawOnChartArea: false
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
})
|
|
1500
1349
|
};
|
|
1501
1350
|
}, [title, showDatalabels, theme, fontFamily, fontSize, labelColor, gridColor, stacked, createFluentTooltip]);
|
|
1502
1351
|
return React__default.createElement("div", {
|
|
1503
1352
|
className: styles.chartWithLegend
|
|
1504
1353
|
}, React__default.createElement("div", {
|
|
1505
1354
|
className: styles.chartArea
|
|
1506
|
-
}, React__default.createElement(reactChartjs2.
|
|
1355
|
+
}, React__default.createElement(reactChartjs2.Bar, {
|
|
1507
1356
|
data: chartData,
|
|
1508
1357
|
options: options
|
|
1509
|
-
})), React__default.createElement(
|
|
1358
|
+
})), React__default.createElement("div", {
|
|
1359
|
+
className: styles.legendArea
|
|
1360
|
+
}, React__default.createElement(RenderLegend, {
|
|
1510
1361
|
data: data,
|
|
1511
1362
|
visibleSeries: visibleSeries,
|
|
1512
1363
|
seriesColors: seriesColors,
|
|
1513
1364
|
toggleSeries: toggleSeries
|
|
1514
|
-
}));
|
|
1365
|
+
})));
|
|
1515
1366
|
}
|
|
1516
1367
|
|
|
1517
1368
|
chart_js.Chart.register(chart_js.CategoryScale, chart_js.LinearScale, chart_js.BarElement, chart_js.Tooltip, chart_js.Legend, chart_js.Title, ChartDataLabels);
|
|
@@ -1828,6 +1679,180 @@ function BubbleChart(_ref) {
|
|
|
1828
1679
|
}))));
|
|
1829
1680
|
}
|
|
1830
1681
|
|
|
1682
|
+
chart_js.Chart.register(ChartDataLabels);
|
|
1683
|
+
chart_js.Chart.register(chart_js.CategoryScale, chart_js.LinearScale, chart_js.BarElement, chart_js.LineElement, chart_js.PointElement, chart_js.Tooltip, chart_js.Legend, chart_js.Title);
|
|
1684
|
+
function ComboChart(_ref) {
|
|
1685
|
+
var data = _ref.data,
|
|
1686
|
+
getPrimary = _ref.getPrimary,
|
|
1687
|
+
getSecondary = _ref.getSecondary,
|
|
1688
|
+
title = _ref.title,
|
|
1689
|
+
_ref$showDataLabels = _ref.showDataLabels,
|
|
1690
|
+
showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
|
|
1691
|
+
_ref$theme = _ref.theme,
|
|
1692
|
+
theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
|
|
1693
|
+
var _useState = React.useState(function () {
|
|
1694
|
+
return data.map(function (s) {
|
|
1695
|
+
return s.label;
|
|
1696
|
+
});
|
|
1697
|
+
}),
|
|
1698
|
+
visibleSeries = _useState[0],
|
|
1699
|
+
setVisibleSeries = _useState[1];
|
|
1700
|
+
var styles = useGraphGlobalStyles();
|
|
1701
|
+
var _useChartUtils = useChartUtils(theme),
|
|
1702
|
+
lightenColor = _useChartUtils.lightenColor,
|
|
1703
|
+
getFluentPalette = _useChartUtils.getFluentPalette,
|
|
1704
|
+
createFluentTooltip = _useChartUtils.createFluentTooltip;
|
|
1705
|
+
var seriesColors = React.useMemo(function () {
|
|
1706
|
+
return data.reduce(function (acc, series, idx) {
|
|
1707
|
+
var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
|
|
1708
|
+
acc[series.label] = lightenColor(base, 0.3);
|
|
1709
|
+
return acc;
|
|
1710
|
+
}, {});
|
|
1711
|
+
}, [data, theme]);
|
|
1712
|
+
var toggleSeries = function toggleSeries(label) {
|
|
1713
|
+
setVisibleSeries(function (prev) {
|
|
1714
|
+
var isVisible = prev.includes(label);
|
|
1715
|
+
var next = isVisible ? prev.filter(function (l) {
|
|
1716
|
+
return l !== label;
|
|
1717
|
+
}) : [].concat(prev, [label]);
|
|
1718
|
+
return next.length === 0 ? [data[0].label] : next;
|
|
1719
|
+
});
|
|
1720
|
+
};
|
|
1721
|
+
var allCategories = React.useMemo(function () {
|
|
1722
|
+
var set = new Set();
|
|
1723
|
+
data.forEach(function (series) {
|
|
1724
|
+
return series.data.forEach(function (d) {
|
|
1725
|
+
return set.add(getPrimary(d));
|
|
1726
|
+
});
|
|
1727
|
+
});
|
|
1728
|
+
return Array.from(set);
|
|
1729
|
+
}, [data, getPrimary]);
|
|
1730
|
+
var chartData = React.useMemo(function () {
|
|
1731
|
+
var sortedSeries = data.filter(function (series) {
|
|
1732
|
+
return visibleSeries.includes(series.label);
|
|
1733
|
+
}).sort(function (a, b) {
|
|
1734
|
+
// Ensure bars come before lines
|
|
1735
|
+
if (a.type === 'bar' && b.type === 'line') return -1;
|
|
1736
|
+
if (a.type === 'line' && b.type === 'bar') return 1;
|
|
1737
|
+
return 0;
|
|
1738
|
+
});
|
|
1739
|
+
return {
|
|
1740
|
+
labels: allCategories,
|
|
1741
|
+
datasets: sortedSeries.map(function (series) {
|
|
1742
|
+
var _series$yAxisID;
|
|
1743
|
+
return {
|
|
1744
|
+
type: series.type,
|
|
1745
|
+
label: series.label,
|
|
1746
|
+
yAxisID: (_series$yAxisID = series.yAxisID) != null ? _series$yAxisID : 'y',
|
|
1747
|
+
data: allCategories.map(function (cat) {
|
|
1748
|
+
var found = series.data.find(function (d) {
|
|
1749
|
+
return getPrimary(d) === cat;
|
|
1750
|
+
});
|
|
1751
|
+
return found ? getSecondary(found) : 0;
|
|
1752
|
+
}),
|
|
1753
|
+
backgroundColor: seriesColors[series.label],
|
|
1754
|
+
borderColor: seriesColors[series.label],
|
|
1755
|
+
fill: series.type === 'bar',
|
|
1756
|
+
tension: series.type === 'line' ? 0.4 : 0,
|
|
1757
|
+
pointRadius: series.type === 'line' ? 3 : 0,
|
|
1758
|
+
borderWidth: series.type === 'line' ? 2 : 1,
|
|
1759
|
+
order: series.type === 'bar' ? 1 : 0
|
|
1760
|
+
};
|
|
1761
|
+
})
|
|
1762
|
+
};
|
|
1763
|
+
}, [data, visibleSeries, allCategories, getPrimary, getSecondary, seriesColors]);
|
|
1764
|
+
var _useMemo = React.useMemo(function () {
|
|
1765
|
+
return {
|
|
1766
|
+
fontFamily: theme.fontFamilyBase,
|
|
1767
|
+
fontSize: parseInt(theme.fontSizeBase200.replace('px', '')) || 14,
|
|
1768
|
+
labelColor: theme.colorNeutralForeground1,
|
|
1769
|
+
gridColor: theme.colorNeutralStroke2
|
|
1770
|
+
};
|
|
1771
|
+
}, [theme]),
|
|
1772
|
+
fontFamily = _useMemo.fontFamily,
|
|
1773
|
+
fontSize = _useMemo.fontSize,
|
|
1774
|
+
labelColor = _useMemo.labelColor,
|
|
1775
|
+
gridColor = _useMemo.gridColor;
|
|
1776
|
+
var options = React.useMemo(function () {
|
|
1777
|
+
return {
|
|
1778
|
+
responsive: true,
|
|
1779
|
+
maintainAspectRatio: false,
|
|
1780
|
+
plugins: {
|
|
1781
|
+
title: {
|
|
1782
|
+
display: !!title,
|
|
1783
|
+
text: title,
|
|
1784
|
+
font: {
|
|
1785
|
+
size: 14,
|
|
1786
|
+
family: theme.fontFamilyBase,
|
|
1787
|
+
weight: theme.fontWeightSemibold
|
|
1788
|
+
},
|
|
1789
|
+
color: theme.colorNeutralForeground1,
|
|
1790
|
+
padding: {
|
|
1791
|
+
top: 20,
|
|
1792
|
+
bottom: 20
|
|
1793
|
+
}
|
|
1794
|
+
},
|
|
1795
|
+
datalabels: {
|
|
1796
|
+
display: showDataLabels,
|
|
1797
|
+
color: theme.colorNeutralForeground1,
|
|
1798
|
+
font: {
|
|
1799
|
+
family: theme.fontFamilyBase,
|
|
1800
|
+
size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14
|
|
1801
|
+
}
|
|
1802
|
+
},
|
|
1803
|
+
legend: {
|
|
1804
|
+
display: false
|
|
1805
|
+
},
|
|
1806
|
+
tooltip: createFluentTooltip(theme)
|
|
1807
|
+
},
|
|
1808
|
+
scales: {
|
|
1809
|
+
x: {
|
|
1810
|
+
ticks: {
|
|
1811
|
+
color: labelColor,
|
|
1812
|
+
font: {
|
|
1813
|
+
family: fontFamily,
|
|
1814
|
+
size: fontSize
|
|
1815
|
+
}
|
|
1816
|
+
},
|
|
1817
|
+
grid: {
|
|
1818
|
+
color: gridColor
|
|
1819
|
+
}
|
|
1820
|
+
},
|
|
1821
|
+
y: {
|
|
1822
|
+
position: 'left',
|
|
1823
|
+
ticks: {
|
|
1824
|
+
color: labelColor,
|
|
1825
|
+
font: {
|
|
1826
|
+
family: fontFamily,
|
|
1827
|
+
size: fontSize
|
|
1828
|
+
}
|
|
1829
|
+
},
|
|
1830
|
+
grid: {
|
|
1831
|
+
color: gridColor
|
|
1832
|
+
},
|
|
1833
|
+
stacked: false
|
|
1834
|
+
}
|
|
1835
|
+
}
|
|
1836
|
+
};
|
|
1837
|
+
}, [title, showDataLabels, theme, fontFamily, fontSize, labelColor, gridColor, createFluentTooltip]);
|
|
1838
|
+
return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
|
|
1839
|
+
className: styles.chartWithLegend
|
|
1840
|
+
}, React__default.createElement("div", {
|
|
1841
|
+
className: styles.chartArea
|
|
1842
|
+
}, React__default.createElement(reactChartjs2.Chart, {
|
|
1843
|
+
type: "bar",
|
|
1844
|
+
data: chartData,
|
|
1845
|
+
options: options
|
|
1846
|
+
})), React__default.createElement("div", {
|
|
1847
|
+
className: styles.legendArea
|
|
1848
|
+
}, React__default.createElement(RenderLegend, {
|
|
1849
|
+
data: data,
|
|
1850
|
+
visibleSeries: visibleSeries,
|
|
1851
|
+
seriesColors: seriesColors,
|
|
1852
|
+
toggleSeries: toggleSeries
|
|
1853
|
+
}))));
|
|
1854
|
+
}
|
|
1855
|
+
|
|
1831
1856
|
var RenderValueLegend = function RenderValueLegend(_ref) {
|
|
1832
1857
|
var entries = _ref.entries,
|
|
1833
1858
|
visibleLabels = _ref.visibleLabels,
|
|
@@ -3509,6 +3534,268 @@ var useDashboardStyles = function useDashboardStyles() {
|
|
|
3509
3534
|
};
|
|
3510
3535
|
};
|
|
3511
3536
|
|
|
3537
|
+
var CACHE = "application-cache";
|
|
3538
|
+
var openDatabase = /*#__PURE__*/function () {
|
|
3539
|
+
var _ref = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
3540
|
+
return _regenerator().w(function (_context) {
|
|
3541
|
+
while (1) switch (_context.n) {
|
|
3542
|
+
case 0:
|
|
3543
|
+
return _context.a(2, idb.openDB('app-cache-db', 1, {
|
|
3544
|
+
upgrade: function upgrade(db) {
|
|
3545
|
+
db.createObjectStore(CACHE);
|
|
3546
|
+
}
|
|
3547
|
+
}));
|
|
3548
|
+
}
|
|
3549
|
+
}, _callee);
|
|
3550
|
+
}));
|
|
3551
|
+
return function openDatabase() {
|
|
3552
|
+
return _ref.apply(this, arguments);
|
|
3553
|
+
};
|
|
3554
|
+
}();
|
|
3555
|
+
var getCachedData = /*#__PURE__*/function () {
|
|
3556
|
+
var _ref2 = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(key) {
|
|
3557
|
+
var db, cached;
|
|
3558
|
+
return _regenerator().w(function (_context2) {
|
|
3559
|
+
while (1) switch (_context2.n) {
|
|
3560
|
+
case 0:
|
|
3561
|
+
_context2.n = 1;
|
|
3562
|
+
return openDatabase();
|
|
3563
|
+
case 1:
|
|
3564
|
+
db = _context2.v;
|
|
3565
|
+
_context2.n = 2;
|
|
3566
|
+
return db.get(CACHE, key);
|
|
3567
|
+
case 2:
|
|
3568
|
+
cached = _context2.v;
|
|
3569
|
+
return _context2.a(2, cached ? cached.data : undefined);
|
|
3570
|
+
}
|
|
3571
|
+
}, _callee2);
|
|
3572
|
+
}));
|
|
3573
|
+
return function getCachedData(_x) {
|
|
3574
|
+
return _ref2.apply(this, arguments);
|
|
3575
|
+
};
|
|
3576
|
+
}();
|
|
3577
|
+
var setCachedData = /*#__PURE__*/function () {
|
|
3578
|
+
var _ref3 = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(key, data) {
|
|
3579
|
+
var db;
|
|
3580
|
+
return _regenerator().w(function (_context3) {
|
|
3581
|
+
while (1) switch (_context3.n) {
|
|
3582
|
+
case 0:
|
|
3583
|
+
_context3.n = 1;
|
|
3584
|
+
return openDatabase();
|
|
3585
|
+
case 1:
|
|
3586
|
+
db = _context3.v;
|
|
3587
|
+
_context3.n = 2;
|
|
3588
|
+
return db.put(CACHE, {
|
|
3589
|
+
data: data,
|
|
3590
|
+
timestamp: Date.now()
|
|
3591
|
+
}, key);
|
|
3592
|
+
case 2:
|
|
3593
|
+
return _context3.a(2);
|
|
3594
|
+
}
|
|
3595
|
+
}, _callee3);
|
|
3596
|
+
}));
|
|
3597
|
+
return function setCachedData(_x2, _x3) {
|
|
3598
|
+
return _ref3.apply(this, arguments);
|
|
3599
|
+
};
|
|
3600
|
+
}();
|
|
3601
|
+
var deleteCachedData = /*#__PURE__*/function () {
|
|
3602
|
+
var _ref4 = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(key) {
|
|
3603
|
+
var db;
|
|
3604
|
+
return _regenerator().w(function (_context4) {
|
|
3605
|
+
while (1) switch (_context4.n) {
|
|
3606
|
+
case 0:
|
|
3607
|
+
_context4.n = 1;
|
|
3608
|
+
return openDatabase();
|
|
3609
|
+
case 1:
|
|
3610
|
+
db = _context4.v;
|
|
3611
|
+
_context4.n = 2;
|
|
3612
|
+
return db["delete"](CACHE, key);
|
|
3613
|
+
case 2:
|
|
3614
|
+
return _context4.a(2);
|
|
3615
|
+
}
|
|
3616
|
+
}, _callee4);
|
|
3617
|
+
}));
|
|
3618
|
+
return function deleteCachedData(_x4) {
|
|
3619
|
+
return _ref4.apply(this, arguments);
|
|
3620
|
+
};
|
|
3621
|
+
}();
|
|
3622
|
+
var clearCache = /*#__PURE__*/function () {
|
|
3623
|
+
var _ref5 = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
|
|
3624
|
+
var db;
|
|
3625
|
+
return _regenerator().w(function (_context5) {
|
|
3626
|
+
while (1) switch (_context5.n) {
|
|
3627
|
+
case 0:
|
|
3628
|
+
_context5.n = 1;
|
|
3629
|
+
return openDatabase();
|
|
3630
|
+
case 1:
|
|
3631
|
+
db = _context5.v;
|
|
3632
|
+
_context5.n = 2;
|
|
3633
|
+
return db.clear(CACHE);
|
|
3634
|
+
case 2:
|
|
3635
|
+
return _context5.a(2);
|
|
3636
|
+
}
|
|
3637
|
+
}, _callee5);
|
|
3638
|
+
}));
|
|
3639
|
+
return function clearCache() {
|
|
3640
|
+
return _ref5.apply(this, arguments);
|
|
3641
|
+
};
|
|
3642
|
+
}();
|
|
3643
|
+
var clearExpiredCache = /*#__PURE__*/function () {
|
|
3644
|
+
var _ref6 = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(maxAge) {
|
|
3645
|
+
var db, allKeys, now, _iterator, _step, key, cached;
|
|
3646
|
+
return _regenerator().w(function (_context6) {
|
|
3647
|
+
while (1) switch (_context6.n) {
|
|
3648
|
+
case 0:
|
|
3649
|
+
_context6.n = 1;
|
|
3650
|
+
return openDatabase();
|
|
3651
|
+
case 1:
|
|
3652
|
+
db = _context6.v;
|
|
3653
|
+
_context6.n = 2;
|
|
3654
|
+
return db.getAllKeys(CACHE);
|
|
3655
|
+
case 2:
|
|
3656
|
+
allKeys = _context6.v;
|
|
3657
|
+
now = Date.now();
|
|
3658
|
+
_iterator = _createForOfIteratorHelperLoose(allKeys);
|
|
3659
|
+
case 3:
|
|
3660
|
+
if ((_step = _iterator()).done) {
|
|
3661
|
+
_context6.n = 6;
|
|
3662
|
+
break;
|
|
3663
|
+
}
|
|
3664
|
+
key = _step.value;
|
|
3665
|
+
_context6.n = 4;
|
|
3666
|
+
return db.get(CACHE, key);
|
|
3667
|
+
case 4:
|
|
3668
|
+
cached = _context6.v;
|
|
3669
|
+
if (!(cached && now - cached.timestamp > maxAge)) {
|
|
3670
|
+
_context6.n = 5;
|
|
3671
|
+
break;
|
|
3672
|
+
}
|
|
3673
|
+
_context6.n = 5;
|
|
3674
|
+
return db["delete"](CACHE, key);
|
|
3675
|
+
case 5:
|
|
3676
|
+
_context6.n = 3;
|
|
3677
|
+
break;
|
|
3678
|
+
case 6:
|
|
3679
|
+
return _context6.a(2);
|
|
3680
|
+
}
|
|
3681
|
+
}, _callee6);
|
|
3682
|
+
}));
|
|
3683
|
+
return function clearExpiredCache(_x5) {
|
|
3684
|
+
return _ref6.apply(this, arguments);
|
|
3685
|
+
};
|
|
3686
|
+
}();
|
|
3687
|
+
var DEFAULT_MAX_AGE = 24 * 60 * 60 * 1000; // 1 day in milliseconds
|
|
3688
|
+
/**
|
|
3689
|
+
* Custom hook to manage IndexedDB cache with a specified maximum age.
|
|
3690
|
+
*
|
|
3691
|
+
* @template T - The type of data to be cached.
|
|
3692
|
+
* @param {number} [maxAge=DEFAULT_MAX_AGE] - The maximum age (in milliseconds) for cached data before it is considered expired.
|
|
3693
|
+
* @returns {UseIndexedDBCacheReturn<T>} An object containing methods to interact with the cache.
|
|
3694
|
+
*
|
|
3695
|
+
* @example
|
|
3696
|
+
* const { getData, setData, deleteData, clearAllCache } = useIndexedDBCache<MyDataType>(3600000);
|
|
3697
|
+
*
|
|
3698
|
+
* @function
|
|
3699
|
+
* @name useIndexedDBCache
|
|
3700
|
+
* @memberof hooks
|
|
3701
|
+
* @inner
|
|
3702
|
+
*
|
|
3703
|
+
* @typedef {Object} UseIndexedDBCacheReturn<T>
|
|
3704
|
+
* @property {function(string): Promise<T | undefined>} getData - Retrieves cached data by key.
|
|
3705
|
+
* @property {function(string, T): Promise<void>} setData - Caches data with a specified key.
|
|
3706
|
+
* @property {function(string): Promise<void>} deleteData - Deletes cached data by key.
|
|
3707
|
+
* @property {function(): Promise<void>} clearAllCache - Clears all cached data.
|
|
3708
|
+
*/
|
|
3709
|
+
var useIndexedDBCache = function useIndexedDBCache(maxAge) {
|
|
3710
|
+
if (maxAge === void 0) {
|
|
3711
|
+
maxAge = DEFAULT_MAX_AGE;
|
|
3712
|
+
}
|
|
3713
|
+
React.useEffect(function () {
|
|
3714
|
+
// Clear expired cache on component mount
|
|
3715
|
+
_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {
|
|
3716
|
+
return _regenerator().w(function (_context7) {
|
|
3717
|
+
while (1) switch (_context7.n) {
|
|
3718
|
+
case 0:
|
|
3719
|
+
_context7.n = 1;
|
|
3720
|
+
return clearExpiredCache(maxAge);
|
|
3721
|
+
case 1:
|
|
3722
|
+
return _context7.a(2);
|
|
3723
|
+
}
|
|
3724
|
+
}, _callee7);
|
|
3725
|
+
}))();
|
|
3726
|
+
}, [maxAge]);
|
|
3727
|
+
var getData = /*#__PURE__*/function () {
|
|
3728
|
+
var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(key) {
|
|
3729
|
+
return _regenerator().w(function (_context8) {
|
|
3730
|
+
while (1) switch (_context8.n) {
|
|
3731
|
+
case 0:
|
|
3732
|
+
_context8.n = 1;
|
|
3733
|
+
return getCachedData(key);
|
|
3734
|
+
case 1:
|
|
3735
|
+
return _context8.a(2, _context8.v);
|
|
3736
|
+
}
|
|
3737
|
+
}, _callee8);
|
|
3738
|
+
}));
|
|
3739
|
+
return function getData(_x6) {
|
|
3740
|
+
return _ref8.apply(this, arguments);
|
|
3741
|
+
};
|
|
3742
|
+
}();
|
|
3743
|
+
var setData = /*#__PURE__*/function () {
|
|
3744
|
+
var _ref9 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9(key, data) {
|
|
3745
|
+
return _regenerator().w(function (_context9) {
|
|
3746
|
+
while (1) switch (_context9.n) {
|
|
3747
|
+
case 0:
|
|
3748
|
+
_context9.n = 1;
|
|
3749
|
+
return setCachedData(key, data);
|
|
3750
|
+
case 1:
|
|
3751
|
+
return _context9.a(2);
|
|
3752
|
+
}
|
|
3753
|
+
}, _callee9);
|
|
3754
|
+
}));
|
|
3755
|
+
return function setData(_x7, _x8) {
|
|
3756
|
+
return _ref9.apply(this, arguments);
|
|
3757
|
+
};
|
|
3758
|
+
}();
|
|
3759
|
+
var deleteData = /*#__PURE__*/function () {
|
|
3760
|
+
var _ref0 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0(key) {
|
|
3761
|
+
return _regenerator().w(function (_context0) {
|
|
3762
|
+
while (1) switch (_context0.n) {
|
|
3763
|
+
case 0:
|
|
3764
|
+
_context0.n = 1;
|
|
3765
|
+
return deleteCachedData(key);
|
|
3766
|
+
case 1:
|
|
3767
|
+
return _context0.a(2);
|
|
3768
|
+
}
|
|
3769
|
+
}, _callee0);
|
|
3770
|
+
}));
|
|
3771
|
+
return function deleteData(_x9) {
|
|
3772
|
+
return _ref0.apply(this, arguments);
|
|
3773
|
+
};
|
|
3774
|
+
}();
|
|
3775
|
+
var clearAllCache = /*#__PURE__*/function () {
|
|
3776
|
+
var _ref1 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee1() {
|
|
3777
|
+
return _regenerator().w(function (_context1) {
|
|
3778
|
+
while (1) switch (_context1.n) {
|
|
3779
|
+
case 0:
|
|
3780
|
+
_context1.n = 1;
|
|
3781
|
+
return clearCache();
|
|
3782
|
+
case 1:
|
|
3783
|
+
return _context1.a(2);
|
|
3784
|
+
}
|
|
3785
|
+
}, _callee1);
|
|
3786
|
+
}));
|
|
3787
|
+
return function clearAllCache() {
|
|
3788
|
+
return _ref1.apply(this, arguments);
|
|
3789
|
+
};
|
|
3790
|
+
}();
|
|
3791
|
+
return {
|
|
3792
|
+
getData: getData,
|
|
3793
|
+
setData: setData,
|
|
3794
|
+
deleteData: deleteData,
|
|
3795
|
+
clearAllCache: clearAllCache
|
|
3796
|
+
};
|
|
3797
|
+
};
|
|
3798
|
+
|
|
3512
3799
|
var MINIMUM_DASHBOARD_WIDTH = 600;
|
|
3513
3800
|
var MAX_ROWS = 4;
|
|
3514
3801
|
var DASHBOARD_LAYOUT_CACHE_KEY = 'dashboard-layout-settings';
|
|
@@ -3526,11 +3813,11 @@ var Dashboard = function Dashboard(_ref) {
|
|
|
3526
3813
|
var _useChartFactory = useChartFactory(),
|
|
3527
3814
|
getChartComponent = _useChartFactory.getChartComponent;
|
|
3528
3815
|
// Cache with 30-day expiration for dashboard layout settings
|
|
3529
|
-
var _useIndexedDBCache =
|
|
3816
|
+
var _useIndexedDBCache = useIndexedDBCache(CACHE_EXPIRATION_DAYS * 24 * 60 * 60 * 1000),
|
|
3530
3817
|
getData = _useIndexedDBCache.getData,
|
|
3531
3818
|
setData = _useIndexedDBCache.setData;
|
|
3532
3819
|
// Cache for card order
|
|
3533
|
-
var _useIndexedDBCache2 =
|
|
3820
|
+
var _useIndexedDBCache2 = useIndexedDBCache(CACHE_EXPIRATION_DAYS * 24 * 60 * 60 * 1000),
|
|
3534
3821
|
getOrderData = _useIndexedDBCache2.getData,
|
|
3535
3822
|
setOrderData = _useIndexedDBCache2.setData;
|
|
3536
3823
|
var _useState = React.useState([]),
|
|
@@ -3612,7 +3899,7 @@ var Dashboard = function Dashboard(_ref) {
|
|
|
3612
3899
|
};
|
|
3613
3900
|
}();
|
|
3614
3901
|
initializeData();
|
|
3615
|
-
}, [cardCharts
|
|
3902
|
+
}, [cardCharts]); // Only depend on cardCharts - getData/getOrderData are stable
|
|
3616
3903
|
// Save sizes to cache whenever they change
|
|
3617
3904
|
React.useEffect(function () {
|
|
3618
3905
|
var saveSizesToCache = /*#__PURE__*/function () {
|
|
@@ -3644,7 +3931,7 @@ var Dashboard = function Dashboard(_ref) {
|
|
|
3644
3931
|
if (Object.keys(sizes).length > 0) {
|
|
3645
3932
|
saveSizesToCache();
|
|
3646
3933
|
}
|
|
3647
|
-
}, [sizes
|
|
3934
|
+
}, [sizes]); // Only depend on sizes - setData is stable
|
|
3648
3935
|
// Save card order to cache whenever it changes
|
|
3649
3936
|
React.useEffect(function () {
|
|
3650
3937
|
var saveOrderToCache = /*#__PURE__*/function () {
|
|
@@ -3679,7 +3966,7 @@ var Dashboard = function Dashboard(_ref) {
|
|
|
3679
3966
|
if (CardChartContainer.length > 0) {
|
|
3680
3967
|
saveOrderToCache();
|
|
3681
3968
|
}
|
|
3682
|
-
}, [CardChartContainer
|
|
3969
|
+
}, [CardChartContainer]); // Only depend on CardChartContainer - setOrderData is stable
|
|
3683
3970
|
React.useEffect(function () {
|
|
3684
3971
|
if (containerWidth <= MINIMUM_DASHBOARD_WIDTH) {
|
|
3685
3972
|
setSizes(function () {
|
|
@@ -3803,7 +4090,21 @@ var Dashboard = function Dashboard(_ref) {
|
|
|
3803
4090
|
}, renderCards));
|
|
3804
4091
|
};
|
|
3805
4092
|
|
|
4093
|
+
exports.AreaChart = AreaChart;
|
|
4094
|
+
exports.BarChart = BarChart;
|
|
4095
|
+
exports.BarHorizontalChart = BarHorizontalChart;
|
|
4096
|
+
exports.BubbleChart = BubbleChart;
|
|
4097
|
+
exports.ComboChart = ComboChart;
|
|
3806
4098
|
exports.Dashboard = Dashboard;
|
|
4099
|
+
exports.DoughnutChart = DoughnutChart;
|
|
4100
|
+
exports.FloatingBarChart = FloatingBarChart;
|
|
4101
|
+
exports.LineChart = LineChart;
|
|
4102
|
+
exports.PieChart = PieChart;
|
|
4103
|
+
exports.PolarChart = PolarChart;
|
|
4104
|
+
exports.RadarChart = RadarChart;
|
|
4105
|
+
exports.ScatterChart = ScatterChart;
|
|
4106
|
+
exports.StackedLineChart = StackedLineChart;
|
|
4107
|
+
exports.SteamChart = SteamChart;
|
|
3807
4108
|
exports.createAxisLabelFormatter = createAxisLabelFormatter;
|
|
3808
4109
|
exports.createFluentTooltip = createFluentTooltip;
|
|
3809
4110
|
exports.getFluentPalette = getFluentPalette;
|