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