@spteck/fluentui-react-charts 1.0.1 → 1.0.2

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.
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { IDashboardProps } from './IDashboardProps';
3
- declare const Dashboard: React.FC<IDashboardProps>;
3
+ export declare const Dashboard: React.FC<IDashboardProps>;
4
4
  export default Dashboard;
@@ -12,8 +12,8 @@ var ChartDataLabels = _interopDefault(require('chartjs-plugin-datalabels'));
12
12
  var reactChartjs2 = require('react-chartjs-2');
13
13
  var css = require('@emotion/css');
14
14
  var resizeObserver = require('@juggle/resize-observer');
15
- require('@fluentui/react-icons');
16
- require('@iconify/react');
15
+ var reactIcons = require('@fluentui/react-icons');
16
+ var react = require('@iconify/react');
17
17
 
18
18
  function _extends() {
19
19
  return _extends = Object.assign ? Object.assign.bind() : function (n) {
@@ -2910,6 +2910,618 @@ function BarChart(_ref) {
2910
2910
  })));
2911
2911
  }
2912
2912
 
2913
+ var BusinessReportIcon = function BusinessReportIcon(_ref) {
2914
+ var _ref$width = _ref.width,
2915
+ width = _ref$width === void 0 ? 200 : _ref$width,
2916
+ _ref$height = _ref.height,
2917
+ height = _ref$height === void 0 ? 200 : _ref$height,
2918
+ className = _ref.className,
2919
+ style = _ref.style;
2920
+ return React__default.createElement("svg", {
2921
+ width: width,
2922
+ height: height,
2923
+ viewBox: "200 400 1400 1000",
2924
+ className: className,
2925
+ style: _extends({
2926
+ fill: reactComponents.tokens.colorNeutralForeground2
2927
+ }, style),
2928
+ xmlns: "http://www.w3.org/2000/svg"
2929
+ }, React__default.createElement("g", {
2930
+ id: "BACKGROUND"
2931
+ }, React__default.createElement("rect", {
2932
+ style: {
2933
+ fill: reactComponents.tokens.colorNeutralBackground1
2934
+ },
2935
+ x: "200",
2936
+ y: "400",
2937
+ width: "1400",
2938
+ height: "1000"
2939
+ })), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
2940
+ x: "486.006",
2941
+ y: "568.026",
2942
+ style: {
2943
+ fill: reactComponents.tokens.colorNeutralBackground1
2944
+ },
2945
+ width: "1038.994",
2946
+ height: "768.164"
2947
+ }), React__default.createElement("path", {
2948
+ style: {
2949
+ fill: reactComponents.tokens.colorNeutralStroke1
2950
+ },
2951
+ d: "M1527.5,1338.69H483.506V565.526H1527.5V1338.69z M488.506,1333.69H1522.5V570.526H488.506V1333.69z"
2952
+ })), React__default.createElement("g", null, React__default.createElement("rect", {
2953
+ x: "558.003",
2954
+ y: "1086.698",
2955
+ style: {
2956
+ fill: reactComponents.tokens.colorNeutralForeground3,
2957
+ opacity: 0.3
2958
+ },
2959
+ width: "85",
2960
+ height: "164.492"
2961
+ }), React__default.createElement("rect", {
2962
+ x: "693.003",
2963
+ y: "1004.672",
2964
+ style: {
2965
+ fill: reactComponents.tokens.colorNeutralForeground3,
2966
+ opacity: 0.3
2967
+ },
2968
+ width: "85",
2969
+ height: "246.519"
2970
+ }), React__default.createElement("rect", {
2971
+ x: "828.003",
2972
+ y: "835.487",
2973
+ style: {
2974
+ fill: reactComponents.tokens.colorNeutralForeground3,
2975
+ opacity: 0.3
2976
+ },
2977
+ width: "85",
2978
+ height: "415.703"
2979
+ }), React__default.createElement("rect", {
2980
+ x: "963.003",
2981
+ y: "955.6",
2982
+ style: {
2983
+ fill: reactComponents.tokens.colorNeutralForeground3,
2984
+ opacity: 0.3
2985
+ },
2986
+ width: "85",
2987
+ height: "295.591"
2988
+ }), React__default.createElement("rect", {
2989
+ x: "1098.003",
2990
+ y: "825.238",
2991
+ style: {
2992
+ fill: reactComponents.tokens.colorNeutralForeground3,
2993
+ opacity: 0.3
2994
+ },
2995
+ width: "85",
2996
+ height: "425.952"
2997
+ }), React__default.createElement("rect", {
2998
+ x: "1233.003",
2999
+ y: "847.489",
3000
+ style: {
3001
+ fill: reactComponents.tokens.colorNeutralForeground3,
3002
+ opacity: 0.3
3003
+ },
3004
+ width: "85",
3005
+ height: "403.701"
3006
+ }), React__default.createElement("rect", {
3007
+ x: "1368.003",
3008
+ y: "699.989",
3009
+ style: {
3010
+ fill: reactComponents.tokens.colorNeutralForeground3,
3011
+ opacity: 0.3
3012
+ },
3013
+ width: "85",
3014
+ height: "551.201"
3015
+ }), React__default.createElement("polygon", {
3016
+ style: {
3017
+ fill: reactComponents.tokens.colorBrandBackground
3018
+ },
3019
+ 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"
3020
+ })), React__default.createElement("rect", {
3021
+ x: "796.336",
3022
+ y: "662.857",
3023
+ style: {
3024
+ fill: reactComponents.tokens.colorBrandBackground
3025
+ },
3026
+ width: "418.333",
3027
+ height: "5"
3028
+ }), React__default.createElement("rect", {
3029
+ x: "937.543",
3030
+ y: "717.857",
3031
+ style: {
3032
+ fill: reactComponents.tokens.colorBrandBackground
3033
+ },
3034
+ width: "135.92",
3035
+ height: "5"
3036
+ })), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
3037
+ x: "264.978",
3038
+ y: "441.049",
3039
+ style: {
3040
+ fill: reactComponents.tokens.colorNeutralBackground1
3041
+ },
3042
+ width: "482.581",
3043
+ height: "379.067"
3044
+ }), React__default.createElement("path", {
3045
+ style: {
3046
+ fill: reactComponents.tokens.colorNeutralStroke1
3047
+ },
3048
+ d: "M750.06,822.616H262.478V438.549H750.06V822.616z M267.478,817.616H745.06V443.549H267.478V817.616z"
3049
+ })), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
3050
+ x: "330.537",
3051
+ y: "503.15",
3052
+ style: {
3053
+ fill: reactComponents.tokens.colorNeutralForeground3,
3054
+ opacity: 0.3
3055
+ },
3056
+ width: "108.842",
3057
+ height: "61.633"
3058
+ }), React__default.createElement("g", null, React__default.createElement("rect", {
3059
+ x: "485.277",
3060
+ y: "509.093",
3061
+ style: {
3062
+ fill: reactComponents.tokens.colorBrandBackground
3063
+ },
3064
+ width: "198.014",
3065
+ height: "2.623"
3066
+ }), React__default.createElement("rect", {
3067
+ x: "485.277",
3068
+ y: "532.656",
3069
+ style: {
3070
+ fill: reactComponents.tokens.colorNeutralForeground3,
3071
+ opacity: 0.3
3072
+ },
3073
+ width: "198.014",
3074
+ height: "2.623"
3075
+ }), React__default.createElement("rect", {
3076
+ x: "485.277",
3077
+ y: "556.218",
3078
+ style: {
3079
+ fill: reactComponents.tokens.colorNeutralForeground3,
3080
+ opacity: 0.3
3081
+ },
3082
+ width: "198.014",
3083
+ height: "2.623"
3084
+ }))), React__default.createElement("g", null, React__default.createElement("g", null, React__default.createElement("rect", {
3085
+ x: "381.691",
3086
+ y: "687.747",
3087
+ style: {
3088
+ fill: reactComponents.tokens.colorNeutralForeground3,
3089
+ opacity: 0.3
3090
+ },
3091
+ width: "22.73",
3092
+ height: "70.417"
3093
+ }), React__default.createElement("rect", {
3094
+ x: "404.421",
3095
+ y: "653.482",
3096
+ style: {
3097
+ fill: reactComponents.tokens.colorBrandBackground
3098
+ },
3099
+ width: "22.73",
3100
+ height: "104.682"
3101
+ })), React__default.createElement("g", null, React__default.createElement("rect", {
3102
+ x: "466.491",
3103
+ y: "641.634",
3104
+ style: {
3105
+ fill: reactComponents.tokens.colorNeutralForeground3,
3106
+ opacity: 0.3
3107
+ },
3108
+ width: "22.73",
3109
+ height: "116.089"
3110
+ }), React__default.createElement("rect", {
3111
+ x: "489.221",
3112
+ y: "714.758",
3113
+ style: {
3114
+ fill: reactComponents.tokens.colorBrandBackground
3115
+ },
3116
+ width: "22.73",
3117
+ height: "42.965"
3118
+ }))))));
3119
+ };
3120
+
3121
+ var NoDashboards = function NoDashboards(props) {
3122
+ var height = props.height;
3123
+ return React.createElement(React.Fragment, null, React.createElement(Stack, {
3124
+ style: {
3125
+ height: height || "100%"
3126
+ },
3127
+ justifyContent: "Center",
3128
+ alignItems: "Center"
3129
+ }, React.createElement(BusinessReportIcon, {
3130
+ width: 200,
3131
+ height: 200
3132
+ }), React.createElement(reactComponents.Text, {
3133
+ size: 500,
3134
+ weight: 'semibold'
3135
+ }, "No Dashboards Available")));
3136
+ };
3137
+
3138
+ var useRenderLabelStyles = /*#__PURE__*/reactComponents.makeStyles({
3139
+ labelContainer: /*#__PURE__*/_extends({
3140
+ display: "flex",
3141
+ flexDirection: "row",
3142
+ justifyContent: "flex-start",
3143
+ alignItems: "center"
3144
+ }, /*#__PURE__*/reactComponents.shorthands.gap("6px")),
3145
+ iconStyles: {
3146
+ width: "26px"
3147
+ },
3148
+ item: {
3149
+ paddingLeft: "15px"
3150
+ }
3151
+ });
3152
+
3153
+ var RenderLabel = function RenderLabel(props) {
3154
+ var label = props.label,
3155
+ icon = props.icon,
3156
+ isRequired = props.isRequired;
3157
+ var styles = useRenderLabelStyles();
3158
+ return React.createElement(React.Fragment, null, React.createElement("div", {
3159
+ className: styles.labelContainer
3160
+ }, icon && React.isValidElement(icon) ? icon : React.createElement(react.Icon, {
3161
+ icon: icon,
3162
+ className: styles.iconStyles,
3163
+ width: "20px",
3164
+ height: "20px",
3165
+ color: reactComponents.tokens.colorBrandForeground1
3166
+ }), React.createElement(reactComponents.Caption1, {
3167
+ style: {
3168
+ color: reactComponents.tokens.colorBrandForeground1
3169
+ }
3170
+ }, label), React.createElement(reactComponents.Caption1, {
3171
+ style: {
3172
+ color: reactComponents.tokens.colorPaletteRedForeground1
3173
+ }
3174
+ }, isRequired ? " *" : "")));
3175
+ };
3176
+
3177
+ var _templateObject$1, _templateObject2$1, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
3178
+ var useStyles = function useStyles() {
3179
+ return {
3180
+ gridContainer: css.css(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteralLoose(["\n display: grid;\n gap: 4px;\n padding: 8px;\n justify-content: center;\n "]))),
3181
+ cell: css.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 "])), reactComponents.tokens.colorNeutralStroke1, reactComponents.tokens.colorNeutralBackground1),
3182
+ hoveredCell: css.css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n background-color: ", ";\n transform: scale(1.05);\n "])), reactComponents.tokens.colorNeutralBackground1Hover),
3183
+ selectedCell: css.css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n background-color: ", ";\n "])), reactComponents.tokens.colorNeutralBackground1Selected),
3184
+ menuPopover: css.css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n min-width: fit-content;\n "]))),
3185
+ bottomText: css.css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n padding-left: 8px;\n padding-right: 8px;\n "])))
3186
+ };
3187
+ };
3188
+ var SelectZoom = function SelectZoom(props) {
3189
+ var onChange = props.onChange,
3190
+ defaultValues = props.values,
3191
+ maxCols = props.maxCols,
3192
+ maxRows = props.maxRows;
3193
+ var Settings = reactIcons.bundleIcon(reactIcons.Settings20Filled, reactIcons.Settings20Regular);
3194
+ var styles = useStyles();
3195
+ var _React$useState = React.useState(defaultValues),
3196
+ values = _React$useState[0],
3197
+ setValues = _React$useState[1];
3198
+ var _React$useState2 = React.useState(null),
3199
+ hovered = _React$useState2[0],
3200
+ setHovered = _React$useState2[1];
3201
+ var _React$useState3 = React.useState(false),
3202
+ open = _React$useState3[0],
3203
+ setOpen = _React$useState3[1];
3204
+ React.useEffect(function () {
3205
+ setValues(defaultValues);
3206
+ }, [defaultValues]);
3207
+ var onOpenChange = function onOpenChange(_, data) {
3208
+ setOpen(data.open);
3209
+ setHovered(null);
3210
+ };
3211
+ var handleCellClick = function handleCellClick(row, col) {
3212
+ var newValues = {
3213
+ spanCols: col + 1,
3214
+ spanRows: row + 1
3215
+ };
3216
+ setValues(newValues);
3217
+ onChange == null || onChange(newValues);
3218
+ setOpen(false);
3219
+ };
3220
+ var handleCellHover = function handleCellHover(row, col) {
3221
+ setHovered({
3222
+ spanCols: col + 1,
3223
+ spanRows: row + 1
3224
+ });
3225
+ };
3226
+ var handleMouseLeave = function handleMouseLeave() {
3227
+ setHovered(null);
3228
+ };
3229
+ var renderGridCells = function renderGridCells() {
3230
+ var cells = [];
3231
+ var _loop = function _loop(row) {
3232
+ var _loop2 = function _loop2(col) {
3233
+ var isSelected = row < values.spanRows && col < values.spanCols;
3234
+ var isHovered = hovered && row < hovered.spanRows && col < hovered.spanCols;
3235
+ cells.push(React.createElement("div", {
3236
+ key: row + "-" + col,
3237
+ className: styles.cell + " " + (isHovered ? styles.hoveredCell : "") + " " + (isSelected ? styles.selectedCell : ""),
3238
+ onMouseEnter: function onMouseEnter() {
3239
+ return handleCellHover(row, col);
3240
+ },
3241
+ onClick: function onClick() {
3242
+ return handleCellClick(row, col);
3243
+ }
3244
+ }));
3245
+ };
3246
+ for (var col = 0; col < maxCols; col++) {
3247
+ _loop2(col);
3248
+ }
3249
+ };
3250
+ for (var row = 0; row < maxRows; row++) {
3251
+ _loop(row);
3252
+ }
3253
+ return cells;
3254
+ };
3255
+ // Compute popover width dynamically
3256
+ var popoverWidth = React.useMemo(function () {
3257
+ return 30 * maxCols + 4 * (maxCols - 1) + 32;
3258
+ }, [maxCols]); // 30px for each cell, 4px gap, and 32px padding (16 left and right)
3259
+ return React.createElement(reactComponents.Menu, {
3260
+ open: open,
3261
+ onOpenChange: onOpenChange
3262
+ }, React.createElement(reactComponents.MenuTrigger, {
3263
+ disableButtonEnhancement: true
3264
+ }, React.createElement(reactComponents.Tooltip, {
3265
+ content: "Configure",
3266
+ relationship: "label"
3267
+ }, React.createElement(reactComponents.MenuButton, {
3268
+ icon: React.createElement(Settings, null),
3269
+ size: "small",
3270
+ appearance: "transparent"
3271
+ }))), React.createElement(reactComponents.MenuPopover, {
3272
+ style: {
3273
+ width: popoverWidth + "px",
3274
+ minWidth: "120px",
3275
+ padding: 8
3276
+ }
3277
+ }, React.createElement("div", {
3278
+ style: {
3279
+ display: "flex",
3280
+ flexDirection: "row",
3281
+ alignItems: "center",
3282
+ gap: "6px",
3283
+ width: "100%",
3284
+ boxSizing: "border-box",
3285
+ padding: "8px"
3286
+ }
3287
+ }, React.createElement(RenderLabel, {
3288
+ label: "Selected Span (" + values.spanCols + " \xD7 " + values.spanRows + ")",
3289
+ icon: React.createElement(react.Icon, {
3290
+ icon: "fluent:number-row-20-regular",
3291
+ width: "32",
3292
+ height: "32"
3293
+ })
3294
+ })), React.createElement("div", {
3295
+ className: styles.gridContainer,
3296
+ style: {
3297
+ gridTemplateColumns: "repeat(" + maxCols + ", 30px)",
3298
+ gridTemplateRows: "repeat(" + maxRows + ", 30px)"
3299
+ },
3300
+ onMouseLeave: handleMouseLeave
3301
+ }, renderGridCells()), React.createElement(reactComponents.Caption1, {
3302
+ className: styles.bottomText
3303
+ }, "Click to set span")));
3304
+ };
3305
+
3306
+ var useDashboardStyles = function useDashboardStyles() {
3307
+ return {
3308
+ dashboardContainer: css.css({
3309
+ display: 'grid',
3310
+ padding: '20px',
3311
+ gap: '16px',
3312
+ backgroundColor: reactComponents.tokens.colorNeutralBackground2,
3313
+ gridTemplateColumns: 'repeat(auto-fill, minmax(350px, 1fr))',
3314
+ gridAutoRows: '350px',
3315
+ overflowY: 'auto',
3316
+ overflowX: 'hidden',
3317
+ // Scrollbar styles
3318
+ '::-webkit-scrollbar': {
3319
+ width: '5px',
3320
+ height: '5px'
3321
+ },
3322
+ '::-webkit-scrollbar-track': {
3323
+ background: reactComponents.tokens.colorNeutralBackground4,
3324
+ borderRadius: '10px'
3325
+ },
3326
+ '::-webkit-scrollbar-thumb': {
3327
+ background: reactComponents.tokens.colorBrandStroke2Hover,
3328
+ borderRadius: '10px'
3329
+ },
3330
+ '::-webkit-scrollbar-thumb:hover': {
3331
+ background: reactComponents.tokens.colorNeutralStroke2
3332
+ },
3333
+ justifyContent: 'center',
3334
+ gridAutoFlow: 'dense'
3335
+ }),
3336
+ cardBody: css.css({
3337
+ display: 'flex',
3338
+ flexDirection: 'column',
3339
+ height: '100%',
3340
+ minHeight: '320px'
3341
+ }),
3342
+ chartContainer: css.css({
3343
+ flex: 1,
3344
+ width: '100%',
3345
+ minHeight: '280px'
3346
+ }),
3347
+ cardDescription: css.css({
3348
+ color: "" + reactComponents.tokens.colorNeutralForeground2,
3349
+ marginTop: '4px'
3350
+ }),
3351
+ cardWrapper: css.css({
3352
+ position: 'relative',
3353
+ height: '100%',
3354
+ minHeight: '300px',
3355
+ borderRadius: reactComponents.tokens.borderRadiusMedium,
3356
+ transition: 'all 0.2s ease',
3357
+ '&:hover': {
3358
+ transform: 'translateY(-2px)',
3359
+ boxShadow: "" + reactComponents.tokens.shadow16
3360
+ },
3361
+ '&:active': {
3362
+ transform: 'translateY(0)',
3363
+ boxShadow: "" + reactComponents.tokens.shadow8
3364
+ }
3365
+ })
3366
+ };
3367
+ };
3368
+
3369
+ var MINIMUM_DASHBOARD_WIDTH = 600;
3370
+ var MAX_ROWS = 4;
3371
+ var Dashboard = function Dashboard(_ref) {
3372
+ var cardCharts = _ref.cardCharts,
3373
+ theme = _ref.theme,
3374
+ containerWidth = _ref.containerWidth,
3375
+ _ref$containerHeight = _ref.containerHeight,
3376
+ containerHeight = _ref$containerHeight === void 0 ? '100%' : _ref$containerHeight,
3377
+ _ref$maxSpanRows = _ref.maxSpanRows,
3378
+ maxSpanRows = _ref$maxSpanRows === void 0 ? MAX_ROWS : _ref$maxSpanRows;
3379
+ var styles = useDashboardStyles();
3380
+ var _useGraphUtils = useGraphUtils(theme),
3381
+ getChartComponent = _useGraphUtils.getChartComponent;
3382
+ var _useState = React.useState([]),
3383
+ CardChartContainer = _useState[0],
3384
+ setCardChartContainer = _useState[1];
3385
+ var _useState2 = React.useState({}),
3386
+ sizes = _useState2[0],
3387
+ setSizes = _useState2[1];
3388
+ var dragItem = React.useRef(null);
3389
+ var dragOverItem = React.useRef(null);
3390
+ var containerRef = React.useRef(null);
3391
+ React__default.useEffect(function () {
3392
+ setCardChartContainer(cardCharts);
3393
+ setSizes(function () {
3394
+ var initialSizes = {};
3395
+ cardCharts.forEach(function (c) {
3396
+ var _c$defaultSpan$spanCo, _c$defaultSpan, _c$defaultSpan$spanRo, _c$defaultSpan2;
3397
+ initialSizes[c.id] = {
3398
+ spanCols: (_c$defaultSpan$spanCo = (_c$defaultSpan = c.defaultSpan) == null ? void 0 : _c$defaultSpan.spanCols) != null ? _c$defaultSpan$spanCo : 1,
3399
+ spanRows: (_c$defaultSpan$spanRo = (_c$defaultSpan2 = c.defaultSpan) == null ? void 0 : _c$defaultSpan2.spanRows) != null ? _c$defaultSpan$spanRo : 1
3400
+ };
3401
+ });
3402
+ return initialSizes;
3403
+ });
3404
+ }, [cardCharts]);
3405
+ React.useEffect(function () {
3406
+ if (containerWidth <= MINIMUM_DASHBOARD_WIDTH) {
3407
+ setSizes(function () {
3408
+ var reset = {};
3409
+ CardChartContainer.forEach(function (c) {
3410
+ reset[c.id] = {
3411
+ spanCols: 1,
3412
+ spanRows: 1
3413
+ };
3414
+ });
3415
+ return reset;
3416
+ });
3417
+ }
3418
+ }, [containerWidth, CardChartContainer]);
3419
+ var showZoom = React.useMemo(function () {
3420
+ return containerWidth > MINIMUM_DASHBOARD_WIDTH;
3421
+ }, [containerWidth]);
3422
+ var _useMemo = React.useMemo(function () {
3423
+ return {
3424
+ minCardWidth: 350,
3425
+ gridGap: 16,
3426
+ containerPadding: 20
3427
+ };
3428
+ }, []),
3429
+ minCardWidth = _useMemo.minCardWidth,
3430
+ gridGap = _useMemo.gridGap,
3431
+ containerPadding = _useMemo.containerPadding;
3432
+ var innerWidth = containerWidth - containerPadding * 2;
3433
+ var columns = React.useMemo(function () {
3434
+ return Math.floor((innerWidth + gridGap) / (minCardWidth + gridGap));
3435
+ }, [innerWidth, gridGap, minCardWidth]);
3436
+ var maxZoom = Math.max(columns, 1);
3437
+ var handleSort = React.useCallback(function () {
3438
+ if (dragItem.current !== null && dragOverItem.current !== null && dragItem.current !== dragOverItem.current) {
3439
+ var copy = [].concat(CardChartContainer);
3440
+ var _copy$splice = copy.splice(dragItem.current, 1),
3441
+ moved = _copy$splice[0];
3442
+ copy.splice(dragOverItem.current, 0, moved);
3443
+ setCardChartContainer(copy);
3444
+ }
3445
+ dragItem.current = null;
3446
+ dragOverItem.current = null;
3447
+ }, [CardChartContainer]);
3448
+ var handleZoomSelect = React.useCallback(function (id, span) {
3449
+ setSizes(function (prev) {
3450
+ var _extends2;
3451
+ return _extends({}, prev, (_extends2 = {}, _extends2[id] = {
3452
+ spanCols: Math.min(Math.max(span.spanCols, 1), maxZoom),
3453
+ spanRows: Math.min(Math.max(span.spanRows, 1), maxSpanRows)
3454
+ }, _extends2));
3455
+ });
3456
+ }, [maxZoom, maxSpanRows]);
3457
+ var defaultColsAndRowSpanBasedOnNumberColumns = React.useMemo(function () {
3458
+ return CardChartContainer.reduce(function (acc, card) {
3459
+ var _card$defaultSpan$spa, _card$defaultSpan, _card$defaultSpan$spa2, _card$defaultSpan2;
3460
+ acc[card.id] = {
3461
+ spanCols: Math.min((_card$defaultSpan$spa = (_card$defaultSpan = card.defaultSpan) == null ? void 0 : _card$defaultSpan.spanCols) != null ? _card$defaultSpan$spa : 1, columns),
3462
+ spanRows: (_card$defaultSpan$spa2 = (_card$defaultSpan2 = card.defaultSpan) == null ? void 0 : _card$defaultSpan2.spanRows) != null ? _card$defaultSpan$spa2 : 1
3463
+ };
3464
+ return acc;
3465
+ }, {});
3466
+ }, [CardChartContainer, columns]);
3467
+ var renderCards = React.useMemo(function () {
3468
+ return CardChartContainer.map(function (cardContainer, idx) {
3469
+ var _sizes$cardContainer$, _defaultColsAndRowSpa, _sizes$cardContainer$2, _defaultColsAndRowSpa2;
3470
+ return React__default.createElement("div", {
3471
+ className: styles.cardWrapper,
3472
+ key: cardContainer.id,
3473
+ draggable: true,
3474
+ onDragStart: function onDragStart() {
3475
+ return dragItem.current = idx;
3476
+ },
3477
+ onDragEnter: function onDragEnter() {
3478
+ return dragOverItem.current = idx;
3479
+ },
3480
+ onDragOver: function onDragOver(e) {
3481
+ return e.preventDefault();
3482
+ },
3483
+ onDragEnd: handleSort,
3484
+ style: {
3485
+ gridColumnEnd: (_sizes$cardContainer$ = sizes[cardContainer.id]) != null && _sizes$cardContainer$.spanCols ? "span " + sizes[cardContainer.id].spanCols : "span " + (((_defaultColsAndRowSpa = defaultColsAndRowSpanBasedOnNumberColumns[cardContainer.id]) == null ? void 0 : _defaultColsAndRowSpa.spanCols) || 1),
3486
+ gridRowEnd: (_sizes$cardContainer$2 = sizes[cardContainer.id]) != null && _sizes$cardContainer$2.spanRows ? "span " + sizes[cardContainer.id].spanRows : "span " + (((_defaultColsAndRowSpa2 = defaultColsAndRowSpanBasedOnNumberColumns[cardContainer.id]) == null ? void 0 : _defaultColsAndRowSpa2.spanRows) || 1)
3487
+ }
3488
+ }, React__default.createElement(reactComponents.Card, {
3489
+ className: styles.cardBody
3490
+ }, React__default.createElement(reactComponents.CardHeader, {
3491
+ header: React__default.createElement(reactComponents.Text, {
3492
+ weight: "semibold",
3493
+ size: 400
3494
+ }, cardContainer.cardTitle),
3495
+ action: showZoom ? React__default.createElement(SelectZoom, {
3496
+ values: sizes[cardContainer.id] || defaultColsAndRowSpanBasedOnNumberColumns[cardContainer.id] || {
3497
+ spanCols: 1,
3498
+ spanRows: 1
3499
+ },
3500
+ maxCols: maxZoom,
3501
+ maxRows: maxSpanRows,
3502
+ IsOpen: false,
3503
+ onChange: function onChange(v) {
3504
+ return handleZoomSelect(cardContainer.id, v);
3505
+ }
3506
+ }) : undefined
3507
+ }), React__default.createElement("div", {
3508
+ className: styles.chartContainer,
3509
+ style: {
3510
+ height: containerHeight
3511
+ }
3512
+ }, theme && theme.fontSizeBase100 && getChartComponent(cardContainer.chart, theme))));
3513
+ });
3514
+ }, [CardChartContainer, handleSort, sizes, styles.cardBody, styles.chartContainer, showZoom, maxZoom, getChartComponent, handleZoomSelect, theme]);
3515
+ if (CardChartContainer.length === 0) {
3516
+ return React__default.createElement(NoDashboards, null);
3517
+ }
3518
+ return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
3519
+ ref: containerRef,
3520
+ className: styles.dashboardContainer
3521
+ }, renderCards));
3522
+ };
3523
+
3524
+ exports.Dashboard = Dashboard;
2913
3525
  exports.createAxisLabelFormatter = createAxisLabelFormatter;
2914
3526
  exports.createFluentTooltip = createFluentTooltip;
2915
3527
  exports.getFluentPalette = getFluentPalette;