Index: node_modules/recharts/es6/animation/AnimationManager.js
===================================================================
--- node_modules/recharts/es6/animation/AnimationManager.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/animation/AnimationManager.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,66 @@
+/**
+ * Represents a single item in the ReactSmoothQueue.
+ * The item can be:
+ * - A number representing a delay in milliseconds.
+ * - An object representing a style change
+ * - A StartAnimationFunction that starts eased transition and calls different render
+ *      because of course in Recharts we have to have three ways to do everything
+ * - An arbitrary function to be executed
+ */
+
+export function createAnimateManager(timeoutController) {
+  var currStyle;
+  var handleChange = () => null;
+  var shouldStop = false;
+  var cancelTimeout = null;
+  var setStyle = _style => {
+    if (shouldStop) {
+      return;
+    }
+    if (Array.isArray(_style)) {
+      if (!_style.length) {
+        return;
+      }
+      var styles = _style;
+      var [curr, ...restStyles] = styles;
+      if (typeof curr === 'number') {
+        cancelTimeout = timeoutController.setTimeout(setStyle.bind(null, restStyles), curr);
+        return;
+      }
+      setStyle(curr);
+      cancelTimeout = timeoutController.setTimeout(setStyle.bind(null, restStyles));
+      return;
+    }
+    if (typeof _style === 'string') {
+      currStyle = _style;
+      handleChange(currStyle);
+    }
+    if (typeof _style === 'object') {
+      currStyle = _style;
+      handleChange(currStyle);
+    }
+    if (typeof _style === 'function') {
+      _style();
+    }
+  };
+  return {
+    stop: () => {
+      shouldStop = true;
+    },
+    start: style => {
+      shouldStop = false;
+      if (cancelTimeout) {
+        cancelTimeout();
+        cancelTimeout = null;
+      }
+      setStyle(style);
+    },
+    subscribe: _handleChange => {
+      handleChange = _handleChange;
+      return () => {
+        handleChange = () => null;
+      };
+    },
+    getTimeoutController: () => timeoutController
+  };
+}
Index: node_modules/recharts/es6/animation/CSSTransitionAnimate.js
===================================================================
--- node_modules/recharts/es6/animation/CSSTransitionAnimate.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/animation/CSSTransitionAnimate.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,85 @@
+import { useCallback, useEffect, useRef, useState } from 'react';
+import { noop } from '../util/DataUtils';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { useAnimationManager } from './useAnimationManager';
+import { getTransitionVal } from './util';
+import { Global } from '../util/Global';
+var defaultProps = {
+  begin: 0,
+  duration: 1000,
+  easing: 'ease',
+  isActive: true,
+  canBegin: true,
+  onAnimationEnd: () => {},
+  onAnimationStart: () => {}
+};
+export function CSSTransitionAnimate(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultProps);
+  var {
+    animationId,
+    from,
+    to,
+    attributeName,
+    isActive: isActiveProp,
+    canBegin,
+    duration,
+    easing,
+    begin,
+    onAnimationEnd,
+    onAnimationStart: onAnimationStartFromProps,
+    children
+  } = props;
+  var isActive = isActiveProp === 'auto' ? !Global.isSsr : isActiveProp;
+  var animationManager = useAnimationManager(animationId + attributeName, props.animationManager);
+  var [style, setStyle] = useState(() => {
+    if (!isActive) {
+      return to;
+    }
+    return from;
+  });
+  var initialized = useRef(false);
+  var onAnimationStart = useCallback(() => {
+    setStyle(from);
+    onAnimationStartFromProps();
+  }, [from, onAnimationStartFromProps]);
+  useEffect(() => {
+    if (!isActive || !canBegin) {
+      return noop;
+    }
+    initialized.current = true;
+    var unsubscribe = animationManager.subscribe(setStyle);
+    animationManager.start([onAnimationStart, begin, to, duration, onAnimationEnd]);
+    return () => {
+      animationManager.stop();
+      if (unsubscribe) {
+        unsubscribe();
+      }
+      onAnimationEnd();
+    };
+  }, [isActive, canBegin, duration, easing, begin, onAnimationStart, onAnimationEnd, animationManager, to, from]);
+  if (!isActive) {
+    /*
+     * With isActive=false, the component always renders with the final style, immediately,
+     * and ignores all other props.
+     * Also there is no transition applied.
+     */
+    return children({
+      [attributeName]: to
+    });
+  }
+  if (!canBegin) {
+    return children({
+      [attributeName]: from
+    });
+  }
+  if (initialized.current) {
+    var transition = getTransitionVal([attributeName], duration, easing);
+    return children({
+      transition,
+      [attributeName]: style
+    });
+  }
+  return children({
+    [attributeName]: from
+  });
+}
Index: node_modules/recharts/es6/animation/JavascriptAnimate.js
===================================================================
--- node_modules/recharts/es6/animation/JavascriptAnimate.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/animation/JavascriptAnimate.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,62 @@
+import { useEffect, useRef, useState } from 'react';
+import { noop } from '../util/DataUtils';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import configUpdate from './configUpdate';
+import { configEasing } from './easing';
+import { useAnimationManager } from './useAnimationManager';
+import { Global } from '../util/Global';
+var defaultJavascriptAnimateProps = {
+  begin: 0,
+  duration: 1000,
+  easing: 'ease',
+  isActive: true,
+  canBegin: true,
+  onAnimationEnd: () => {},
+  onAnimationStart: () => {}
+};
+var from = {
+  t: 0
+};
+var to = {
+  t: 1
+};
+export function JavascriptAnimate(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultJavascriptAnimateProps);
+  var {
+    isActive: isActiveProp,
+    canBegin,
+    duration,
+    easing,
+    begin,
+    onAnimationEnd,
+    onAnimationStart,
+    children
+  } = props;
+  var isActive = isActiveProp === 'auto' ? !Global.isSsr : isActiveProp;
+  var animationManager = useAnimationManager(props.animationId, props.animationManager);
+  var [style, setStyle] = useState(isActive ? from : to);
+  var stopJSAnimation = useRef(null);
+  useEffect(() => {
+    if (!isActive) {
+      setStyle(to);
+    }
+  }, [isActive]);
+  useEffect(() => {
+    if (!isActive || !canBegin) {
+      return noop;
+    }
+    var startAnimation = configUpdate(from, to, configEasing(easing), duration, setStyle, animationManager.getTimeoutController());
+    var onAnimationActive = () => {
+      stopJSAnimation.current = startAnimation();
+    };
+    animationManager.start([onAnimationStart, begin, onAnimationActive, duration, onAnimationEnd]);
+    return () => {
+      animationManager.stop();
+      if (stopJSAnimation.current) {
+        stopJSAnimation.current();
+      }
+      onAnimationEnd();
+    };
+  }, [isActive, canBegin, duration, easing, begin, onAnimationStart, onAnimationEnd, animationManager]);
+  return children(style.t);
+}
Index: node_modules/recharts/es6/animation/configUpdate.js
===================================================================
--- node_modules/recharts/es6/animation/configUpdate.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/animation/configUpdate.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,135 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { getIntersectionKeys, mapObject } from './util';
+export var alpha = (begin, end, k) => begin + (end - begin) * k;
+var needContinue = _ref => {
+  var {
+    from,
+    to
+  } = _ref;
+  return from !== to;
+};
+/*
+ * @description: cal new from value and velocity in each stepper
+ * @return: { [styleProperty]: { from, to, velocity } }
+ */
+var calStepperVals = (easing, preVals, steps) => {
+  var nextStepVals = mapObject((key, val) => {
+    if (needContinue(val)) {
+      var [newX, newV] = easing(val.from, val.to, val.velocity);
+      return _objectSpread(_objectSpread({}, val), {}, {
+        from: newX,
+        velocity: newV
+      });
+    }
+    return val;
+  }, preVals);
+  if (steps < 1) {
+    return mapObject((key, val) => {
+      if (needContinue(val) && nextStepVals[key] != null) {
+        return _objectSpread(_objectSpread({}, val), {}, {
+          velocity: alpha(val.velocity, nextStepVals[key].velocity, steps),
+          from: alpha(val.from, nextStepVals[key].from, steps)
+        });
+      }
+      return val;
+    }, preVals);
+  }
+  return calStepperVals(easing, nextStepVals, steps - 1);
+};
+function createStepperUpdate(from, to, easing, interKeys, render, timeoutController) {
+  var preTime;
+  var stepperStyle = interKeys.reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {
+    [key]: {
+      from: from[key],
+      velocity: 0,
+      to: to[key]
+    }
+  }), {});
+  var getCurrStyle = () => mapObject((key, val) => val.from, stepperStyle);
+  var shouldStopAnimation = () => !Object.values(stepperStyle).filter(needContinue).length;
+  var stopAnimation = null;
+  var stepperUpdate = now => {
+    if (!preTime) {
+      preTime = now;
+    }
+    var deltaTime = now - preTime;
+    var steps = deltaTime / easing.dt;
+    stepperStyle = calStepperVals(easing, stepperStyle, steps);
+    // get union set and add compatible prefix
+    render(_objectSpread(_objectSpread(_objectSpread({}, from), to), getCurrStyle()));
+    preTime = now;
+    if (!shouldStopAnimation()) {
+      stopAnimation = timeoutController.setTimeout(stepperUpdate);
+    }
+  };
+
+  // return start animation method
+  return () => {
+    stopAnimation = timeoutController.setTimeout(stepperUpdate);
+
+    // return stop animation method
+    return () => {
+      var _stopAnimation;
+      (_stopAnimation = stopAnimation) === null || _stopAnimation === void 0 || _stopAnimation();
+    };
+  };
+}
+function createTimingUpdate(from, to, easing, duration, interKeys, render, timeoutController) {
+  var stopAnimation = null;
+  var timingStyle = interKeys.reduce((res, key) => {
+    var fromElement = from[key];
+    var toElement = to[key];
+    if (fromElement == null || toElement == null) {
+      return res;
+    }
+    return _objectSpread(_objectSpread({}, res), {}, {
+      [key]: [fromElement, toElement]
+    });
+  }, {});
+  var beginTime;
+  var timingUpdate = now => {
+    if (!beginTime) {
+      beginTime = now;
+    }
+    var t = (now - beginTime) / duration;
+    var currStyle = mapObject((key, val) => alpha(...val, easing(t)), timingStyle);
+
+    // get union set and add compatible prefix
+    render(_objectSpread(_objectSpread(_objectSpread({}, from), to), currStyle));
+    if (t < 1) {
+      stopAnimation = timeoutController.setTimeout(timingUpdate);
+    } else {
+      var finalStyle = mapObject((key, val) => alpha(...val, easing(1)), timingStyle);
+      render(_objectSpread(_objectSpread(_objectSpread({}, from), to), finalStyle));
+    }
+  };
+
+  // return start animation method
+  return () => {
+    stopAnimation = timeoutController.setTimeout(timingUpdate);
+
+    // return stop animation method
+    return () => {
+      var _stopAnimation2;
+      (_stopAnimation2 = stopAnimation) === null || _stopAnimation2 === void 0 || _stopAnimation2();
+    };
+  };
+}
+
+// configure update function
+// eslint-disable-next-line import/no-default-export
+export default (from, to, easing, duration, render, timeoutController) => {
+  var interKeys = getIntersectionKeys(from, to);
+  if (easing == null) {
+    // no animation, just set to final state
+    return () => {
+      render(_objectSpread(_objectSpread({}, from), to));
+      return () => {};
+    };
+  }
+  return easing.isStepper === true ? createStepperUpdate(from, to, easing, interKeys, render, timeoutController) : createTimingUpdate(from, to, easing, duration, interKeys, render, timeoutController);
+};
Index: node_modules/recharts/es6/animation/createDefaultAnimationManager.js
===================================================================
--- node_modules/recharts/es6/animation/createDefaultAnimationManager.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/animation/createDefaultAnimationManager.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,5 @@
+import { createAnimateManager } from './AnimationManager';
+import { RequestAnimationFrameTimeoutController } from './timeoutController';
+export function createDefaultAnimationManager() {
+  return createAnimateManager(new RequestAnimationFrameTimeoutController());
+}
Index: node_modules/recharts/es6/animation/easing.js
===================================================================
--- node_modules/recharts/es6/animation/easing.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/animation/easing.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,135 @@
+export var ACCURACY = 1e-4;
+var cubicBezierFactor = (c1, c2) => [0, 3 * c1, 3 * c2 - 6 * c1, 3 * c1 - 3 * c2 + 1];
+var evaluatePolynomial = (params, t) => params.map((param, i) => param * t ** i).reduce((pre, curr) => pre + curr);
+var cubicBezier = (c1, c2) => t => {
+  var params = cubicBezierFactor(c1, c2);
+  return evaluatePolynomial(params, t);
+};
+var derivativeCubicBezier = (c1, c2) => t => {
+  var params = cubicBezierFactor(c1, c2);
+  var newParams = [...params.map((param, i) => param * i).slice(1), 0];
+  return evaluatePolynomial(newParams, t);
+};
+var parseCubicBezier = easing => {
+  var _easingParts$;
+  var easingParts = easing.split('(');
+  if (easingParts.length !== 2 || easingParts[0] !== 'cubic-bezier') {
+    return null;
+  }
+  var numbers = (_easingParts$ = easingParts[1]) === null || _easingParts$ === void 0 || (_easingParts$ = _easingParts$.split(')')[0]) === null || _easingParts$ === void 0 ? void 0 : _easingParts$.split(',');
+  if (numbers == null || numbers.length !== 4) {
+    return null;
+  }
+  var coords = numbers.map(x => parseFloat(x));
+  return [coords[0], coords[1], coords[2], coords[3]];
+};
+var getBezierCoordinates = function getBezierCoordinates() {
+  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+  if (args.length === 1) {
+    switch (args[0]) {
+      case 'linear':
+        return [0.0, 0.0, 1.0, 1.0];
+      case 'ease':
+        return [0.25, 0.1, 0.25, 1.0];
+      case 'ease-in':
+        return [0.42, 0.0, 1.0, 1.0];
+      case 'ease-out':
+        return [0.42, 0.0, 0.58, 1.0];
+      case 'ease-in-out':
+        return [0.0, 0.0, 0.58, 1.0];
+      default:
+        {
+          var easing = parseCubicBezier(args[0]);
+          if (easing) {
+            return easing;
+          }
+        }
+    }
+  }
+  if (args.length === 4) {
+    return args;
+  }
+
+  // Fallback for invalid inputs. The previous implementation was buggy and would lead to NaN.
+  // Returning linear easing is a safe default.
+  return [0.0, 0.0, 1.0, 1.0];
+};
+var createBezierEasing = (x1, y1, x2, y2) => {
+  var curveX = cubicBezier(x1, x2);
+  var curveY = cubicBezier(y1, y2);
+  var derCurveX = derivativeCubicBezier(x1, x2);
+  var rangeValue = value => {
+    if (value > 1) {
+      return 1;
+    }
+    if (value < 0) {
+      return 0;
+    }
+    return value;
+  };
+  var bezier = _t => {
+    var t = _t > 1 ? 1 : _t;
+    var x = t;
+    for (var i = 0; i < 8; ++i) {
+      var evalT = curveX(x) - t;
+      var derVal = derCurveX(x);
+      if (Math.abs(evalT - t) < ACCURACY || derVal < ACCURACY) {
+        return curveY(x);
+      }
+      x = rangeValue(x - evalT / derVal);
+    }
+    return curveY(x);
+  };
+  bezier.isStepper = false;
+  return bezier;
+};
+
+// calculate cubic-bezier using Newton's method
+export var configBezier = function configBezier() {
+  return createBezierEasing(...getBezierCoordinates(...arguments));
+};
+export var configSpring = function configSpring() {
+  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+  var {
+    stiff = 100,
+    damping = 8,
+    dt = 17
+  } = config;
+  var stepper = (currX, destX, currV) => {
+    var FSpring = -(currX - destX) * stiff;
+    var FDamping = currV * damping;
+    var newV = currV + (FSpring - FDamping) * dt / 1000;
+    var newX = currV * dt / 1000 + currX;
+    if (Math.abs(newX - destX) < ACCURACY && Math.abs(newV) < ACCURACY) {
+      return [destX, 0];
+    }
+    return [newX, newV];
+  };
+  stepper.isStepper = true;
+  stepper.dt = dt;
+  return stepper;
+};
+export var configEasing = easing => {
+  if (typeof easing === 'string') {
+    switch (easing) {
+      case 'ease':
+      case 'ease-in-out':
+      case 'ease-out':
+      case 'ease-in':
+      case 'linear':
+        return configBezier(easing);
+      case 'spring':
+        return configSpring();
+      default:
+        if (easing.split('(')[0] === 'cubic-bezier') {
+          return configBezier(easing);
+        }
+    }
+  }
+  if (typeof easing === 'function') {
+    return easing;
+  }
+  return null;
+};
Index: node_modules/recharts/es6/animation/timeoutController.js
===================================================================
--- node_modules/recharts/es6/animation/timeoutController.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/animation/timeoutController.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,31 @@
+/**
+ * Callback type for the timeout function.
+ * Receives current time in milliseconds as an argument.
+ */
+
+/**
+ * A function that, when called, cancels the timeout.
+ */
+
+export class RequestAnimationFrameTimeoutController {
+  setTimeout(callback) {
+    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+    var startTime = performance.now();
+    var requestId = null;
+    var executeCallback = now => {
+      if (now - startTime >= delay) {
+        callback(now);
+        // tests fail without the extra if, even when five lines below it's not needed
+        // TODO finish transition to the mocked timeout controller and then remove this condition
+      } else if (typeof requestAnimationFrame === 'function') {
+        requestId = requestAnimationFrame(executeCallback);
+      }
+    };
+    requestId = requestAnimationFrame(executeCallback);
+    return () => {
+      if (requestId != null) {
+        cancelAnimationFrame(requestId);
+      }
+    };
+  }
+}
Index: node_modules/recharts/es6/animation/useAnimationManager.js
===================================================================
--- node_modules/recharts/es6/animation/useAnimationManager.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/animation/useAnimationManager.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,7 @@
+import { createContext, useContext, useMemo } from 'react';
+import { createDefaultAnimationManager } from './createDefaultAnimationManager';
+export var AnimationManagerContext = /*#__PURE__*/createContext(createDefaultAnimationManager);
+export function useAnimationManager(animationId, animationManagerFromProps) {
+  var contextAnimationManager = useContext(AnimationManagerContext);
+  return useMemo(() => animationManagerFromProps !== null && animationManagerFromProps !== void 0 ? animationManagerFromProps : contextAnimationManager(animationId), [animationId, animationManagerFromProps, contextAnimationManager]);
+}
Index: node_modules/recharts/es6/animation/util.js
===================================================================
--- node_modules/recharts/es6/animation/util.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/animation/util.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,29 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/*
+ * @description: convert camel case to dash case
+ * string => string
+ */
+export var getDashCase = name => name.replace(/([A-Z])/g, v => "-".concat(v.toLowerCase()));
+export var getTransitionVal = (props, duration, easing) => props.map(prop => "".concat(getDashCase(prop), " ").concat(duration, "ms ").concat(easing)).join(',');
+
+/**
+ * Finds the intersection of keys between two objects
+ * @param {object} preObj previous object
+ * @param {object} nextObj next object
+ * @returns an array of keys that exist in both objects
+ */
+export var getIntersectionKeys = (preObj, nextObj) => [Object.keys(preObj), Object.keys(nextObj)].reduce((a, b) => a.filter(c => b.includes(c)));
+
+/**
+ * Maps an object to another object
+ * @param {function} fn function to map
+ * @param {object} obj object to map
+ * @returns mapped object
+ */
+export var mapObject = (fn, obj) => Object.keys(obj).reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {
+  [key]: fn(key, obj[key])
+}), {});
Index: node_modules/recharts/es6/cartesian/Area.js
===================================================================
--- node_modules/recharts/es6/cartesian/Area.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/Area.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,806 @@
+var _excluded = ["id"],
+  _excluded2 = ["activeDot", "animationBegin", "animationDuration", "animationEasing", "connectNulls", "dot", "fill", "fillOpacity", "hide", "isAnimationActive", "legendType", "stroke", "xAxisId", "yAxisId"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { PureComponent, useCallback, useMemo, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { Curve } from '../shape/Curve';
+import { Layer } from '../container/Layer';
+import { CartesianLabelListContextProvider, LabelListFromLabelProp } from '../component/LabelList';
+import { Dots } from '../component/Dots';
+import { Global } from '../util/Global';
+import { interpolate, isNan, isNullish, isNumber, noop } from '../util/DataUtils';
+import { getCateCoordinateOfLine, getNormalizedStackId, getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
+import { isClipDot } from '../util/ReactUtils';
+import { ActivePoints } from '../component/ActivePoints';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';
+import { selectArea } from '../state/selectors/areaSelectors';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { useCartesianChartLayout, useChartLayout } from '../context/chartLayoutContext';
+import { useChartName } from '../state/selectors/selectors';
+import { SetLegendPayload } from '../state/SetLegendPayload';
+import { useAppSelector } from '../state/hooks';
+import { useAnimationId } from '../util/useAnimationId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
+import { usePlotArea } from '../hooks';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+import { getRadiusAndStrokeWidthFromDot } from '../util/getRadiusAndStrokeWidthFromDot';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { propsAreEqual } from '../util/propsAreEqual';
+
+/**
+ * @inline
+ */
+
+/**
+ * Our base value array has payload in it, and we expose it externally too.
+ */
+
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+
+function getLegendItemColor(stroke, fill) {
+  return stroke && stroke !== 'none' ? stroke : fill;
+}
+var computeLegendPayloadFromAreaData = props => {
+  var {
+    dataKey,
+    name,
+    stroke,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: getLegendItemColor(stroke, fill),
+    value: getTooltipNameProp(name, dataKey),
+    payload: props
+  }];
+};
+var SetAreaTooltipEntrySettings = /*#__PURE__*/React.memo(_ref => {
+  var {
+    dataKey,
+    data,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    unit,
+    tooltipType,
+    id
+  } = _ref;
+  var tooltipEntrySettings = {
+    dataDefinedOnItem: data,
+    getPosition: noop,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey: undefined,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: getLegendItemColor(stroke, fill),
+      unit,
+      graphicalItemId: id
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+function AreaDotsWrapper(_ref2) {
+  var {
+    clipPathId,
+    points,
+    props
+  } = _ref2;
+  var {
+    needClip,
+    dot,
+    dataKey
+  } = props;
+  var areaProps = svgPropertiesNoEvents(props);
+  return /*#__PURE__*/React.createElement(Dots, {
+    points: points,
+    dot: dot,
+    className: "recharts-area-dots",
+    dotClassName: "recharts-area-dot",
+    dataKey: dataKey,
+    baseProps: areaProps,
+    needClip: needClip,
+    clipPathId: clipPathId
+  });
+}
+function AreaLabelListProvider(_ref3) {
+  var {
+    showLabels,
+    children,
+    points
+  } = _ref3;
+  var labelListEntries = points.map(point => {
+    var _point$x, _point$y;
+    var viewBox = {
+      x: (_point$x = point.x) !== null && _point$x !== void 0 ? _point$x : 0,
+      y: (_point$y = point.y) !== null && _point$y !== void 0 ? _point$y : 0,
+      width: 0,
+      lowerWidth: 0,
+      upperWidth: 0,
+      height: 0
+    };
+    return _objectSpread(_objectSpread({}, viewBox), {}, {
+      value: point.value,
+      payload: point.payload,
+      parentViewBox: undefined,
+      viewBox,
+      fill: undefined
+    });
+  });
+  return /*#__PURE__*/React.createElement(CartesianLabelListContextProvider, {
+    value: showLabels ? labelListEntries : undefined
+  }, children);
+}
+function StaticArea(_ref4) {
+  var {
+    points,
+    baseLine,
+    needClip,
+    clipPathId,
+    props
+  } = _ref4;
+  var {
+    layout,
+    type,
+    stroke,
+    connectNulls,
+    isRange
+  } = props;
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded);
+  var allOtherProps = svgPropertiesNoEvents(propsWithoutId);
+  var propsWithEvents = svgPropertiesAndEvents(propsWithoutId);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, (points === null || points === void 0 ? void 0 : points.length) > 1 && /*#__PURE__*/React.createElement(Layer, {
+    clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : undefined
+  }, /*#__PURE__*/React.createElement(Curve, _extends({}, propsWithEvents, {
+    id: id,
+    points: points,
+    connectNulls: connectNulls,
+    type: type,
+    baseLine: baseLine,
+    layout: layout,
+    stroke: "none",
+    className: "recharts-area-area"
+  })), stroke !== 'none' && /*#__PURE__*/React.createElement(Curve, _extends({}, allOtherProps, {
+    className: "recharts-area-curve",
+    layout: layout,
+    type: type,
+    connectNulls: connectNulls,
+    fill: "none",
+    points: points
+  })), stroke !== 'none' && isRange && /*#__PURE__*/React.createElement(Curve, _extends({}, allOtherProps, {
+    className: "recharts-area-curve",
+    layout: layout,
+    type: type,
+    connectNulls: connectNulls,
+    fill: "none",
+    points: baseLine
+  }))), /*#__PURE__*/React.createElement(AreaDotsWrapper, {
+    points: points,
+    props: propsWithoutId,
+    clipPathId: clipPathId
+  }));
+}
+function VerticalRect(_ref5) {
+  var _points$, _points;
+  var {
+    alpha,
+    baseLine,
+    points,
+    strokeWidth
+  } = _ref5;
+  var startY = (_points$ = points[0]) === null || _points$ === void 0 ? void 0 : _points$.y;
+  var endY = (_points = points[points.length - 1]) === null || _points === void 0 ? void 0 : _points.y;
+  if (!isWellBehavedNumber(startY) || !isWellBehavedNumber(endY)) {
+    return null;
+  }
+  var height = alpha * Math.abs(startY - endY);
+  var maxX = Math.max(...points.map(entry => entry.x || 0));
+  if (isNumber(baseLine)) {
+    maxX = Math.max(baseLine, maxX);
+  } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {
+    maxX = Math.max(...baseLine.map(entry => entry.x || 0), maxX);
+  }
+  if (isNumber(maxX)) {
+    return /*#__PURE__*/React.createElement("rect", {
+      x: 0,
+      y: startY < endY ? startY : startY - height,
+      width: maxX + (strokeWidth ? parseInt("".concat(strokeWidth), 10) : 1),
+      height: Math.floor(height)
+    });
+  }
+  return null;
+}
+function HorizontalRect(_ref6) {
+  var _points$2, _points2;
+  var {
+    alpha,
+    baseLine,
+    points,
+    strokeWidth
+  } = _ref6;
+  var startX = (_points$2 = points[0]) === null || _points$2 === void 0 ? void 0 : _points$2.x;
+  var endX = (_points2 = points[points.length - 1]) === null || _points2 === void 0 ? void 0 : _points2.x;
+  if (!isWellBehavedNumber(startX) || !isWellBehavedNumber(endX)) {
+    return null;
+  }
+  var width = alpha * Math.abs(startX - endX);
+  var maxY = Math.max(...points.map(entry => entry.y || 0));
+  if (isNumber(baseLine)) {
+    maxY = Math.max(baseLine, maxY);
+  } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {
+    maxY = Math.max(...baseLine.map(entry => entry.y || 0), maxY);
+  }
+  if (isNumber(maxY)) {
+    return /*#__PURE__*/React.createElement("rect", {
+      x: startX < endX ? startX : startX - width,
+      y: 0,
+      width: width,
+      height: Math.floor(maxY + (strokeWidth ? parseInt("".concat(strokeWidth), 10) : 1))
+    });
+  }
+  return null;
+}
+function ClipRect(_ref7) {
+  var {
+    alpha,
+    layout,
+    points,
+    baseLine,
+    strokeWidth
+  } = _ref7;
+  if (layout === 'vertical') {
+    return /*#__PURE__*/React.createElement(VerticalRect, {
+      alpha: alpha,
+      points: points,
+      baseLine: baseLine,
+      strokeWidth: strokeWidth
+    });
+  }
+  return /*#__PURE__*/React.createElement(HorizontalRect, {
+    alpha: alpha,
+    points: points,
+    baseLine: baseLine,
+    strokeWidth: strokeWidth
+  });
+}
+function AreaWithAnimation(_ref8) {
+  var {
+    needClip,
+    clipPathId,
+    props,
+    previousPointsRef,
+    previousBaselineRef
+  } = _ref8;
+  var {
+    points,
+    baseLine,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationStart,
+    onAnimationEnd
+  } = props;
+  var animationInput = useMemo(() => ({
+    points,
+    baseLine
+  }), [points, baseLine]);
+  var animationId = useAnimationId(animationInput, 'recharts-area-');
+  var layout = useCartesianChartLayout();
+  var [isAnimating, setIsAnimating] = useState(false);
+  var showLabels = !isAnimating;
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  if (layout == null) {
+    return null;
+  }
+  var prevPoints = previousPointsRef.current;
+  var prevBaseLine = previousBaselineRef.current;
+  return /*#__PURE__*/React.createElement(AreaLabelListProvider, {
+    showLabels: showLabels,
+    points: points
+  }, props.children, /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    animationId: animationId,
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    if (prevPoints) {
+      var prevPointsDiffFactor = prevPoints.length / points.length;
+      var stepPoints =
+      /*
+       * Here it is important that at the very end of the animation, on the last frame,
+       * we render the original points without any interpolation.
+       * This is needed because the code above is checking for reference equality to decide if the animation should run
+       * and if we create a new array instance (even if the numbers were the same)
+       * then we would break animations.
+       */
+      t === 1 ? points : points.map((entry, index) => {
+        var prevPointIndex = Math.floor(index * prevPointsDiffFactor);
+        if (prevPoints[prevPointIndex]) {
+          var prev = prevPoints[prevPointIndex];
+          return _objectSpread(_objectSpread({}, entry), {}, {
+            x: interpolate(prev.x, entry.x, t),
+            y: interpolate(prev.y, entry.y, t)
+          });
+        }
+        return entry;
+      });
+      var stepBaseLine;
+      if (isNumber(baseLine)) {
+        stepBaseLine = interpolate(prevBaseLine, baseLine, t);
+      } else if (isNullish(baseLine) || isNan(baseLine)) {
+        stepBaseLine = interpolate(prevBaseLine, 0, t);
+      } else {
+        stepBaseLine = baseLine.map((entry, index) => {
+          var prevPointIndex = Math.floor(index * prevPointsDiffFactor);
+          if (Array.isArray(prevBaseLine) && prevBaseLine[prevPointIndex]) {
+            var prev = prevBaseLine[prevPointIndex];
+            return _objectSpread(_objectSpread({}, entry), {}, {
+              x: interpolate(prev.x, entry.x, t),
+              y: interpolate(prev.y, entry.y, t)
+            });
+          }
+          return entry;
+        });
+      }
+      if (t > 0) {
+        /*
+         * We need to keep the refs in the parent component because we need to remember the last shape of the animation
+         * even if AreaWithAnimation is unmounted as that happens when changing props.
+         *
+         * And we need to update the refs here because here is where the interpolation is computed.
+         * Eslint doesn't like changing function arguments, but we need it so here is an eslint-disable.
+         */
+        // eslint-disable-next-line no-param-reassign
+        previousPointsRef.current = stepPoints;
+        // eslint-disable-next-line no-param-reassign
+        previousBaselineRef.current = stepBaseLine;
+      }
+      return /*#__PURE__*/React.createElement(StaticArea, {
+        points: stepPoints,
+        baseLine: stepBaseLine,
+        needClip: needClip,
+        clipPathId: clipPathId,
+        props: props
+      });
+    }
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = points;
+      // eslint-disable-next-line no-param-reassign
+      previousBaselineRef.current = baseLine;
+    }
+    return /*#__PURE__*/React.createElement(Layer, null, isAnimationActive && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("clipPath", {
+      id: "animationClipPath-".concat(clipPathId)
+    }, /*#__PURE__*/React.createElement(ClipRect, {
+      alpha: t,
+      points: points,
+      baseLine: baseLine,
+      layout: layout,
+      strokeWidth: props.strokeWidth
+    }))), /*#__PURE__*/React.createElement(Layer, {
+      clipPath: "url(#animationClipPath-".concat(clipPathId, ")")
+    }, /*#__PURE__*/React.createElement(StaticArea, {
+      points: points,
+      baseLine: baseLine,
+      needClip: needClip,
+      clipPathId: clipPathId,
+      props: props
+    })));
+  }), /*#__PURE__*/React.createElement(LabelListFromLabelProp, {
+    label: props.label
+  }));
+}
+
+/*
+ * This components decides if the area should be animated or not.
+ * It also holds the state of the animation.
+ */
+function RenderArea(_ref9) {
+  var {
+    needClip,
+    clipPathId,
+    props
+  } = _ref9;
+  /*
+   * These two must be refs, not state!
+   * Because we want to store the most recent shape of the animation in case we have to interrupt the animation;
+   * that happens when user initiates another animation before the current one finishes.
+   *
+   * If this was a useState, then every step in the animation would trigger a re-render.
+   * So, useRef it is.
+   */
+  var previousPointsRef = useRef(null);
+  var previousBaselineRef = useRef();
+  return /*#__PURE__*/React.createElement(AreaWithAnimation, {
+    needClip: needClip,
+    clipPathId: clipPathId,
+    props: props,
+    previousPointsRef: previousPointsRef,
+    previousBaselineRef: previousBaselineRef
+  });
+}
+class AreaWithState extends PureComponent {
+  render() {
+    var {
+      hide,
+      dot,
+      points,
+      className,
+      top,
+      left,
+      needClip,
+      xAxisId,
+      yAxisId,
+      width,
+      height,
+      id,
+      baseLine,
+      zIndex
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = clsx('recharts-area', className);
+    var clipPathId = id;
+    var {
+      r,
+      strokeWidth
+    } = getRadiusAndStrokeWidthFromDot(dot);
+    var clipDot = isClipDot(dot);
+    var dotSize = r * 2 + strokeWidth;
+    var activePointsClipPath = needClip ? "url(#clipPath-".concat(clipDot ? '' : 'dots-').concat(clipPathId, ")") : undefined;
+    return /*#__PURE__*/React.createElement(ZIndexLayer, {
+      zIndex: zIndex
+    }, /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass
+    }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(GraphicalItemClipPath, {
+      clipPathId: clipPathId,
+      xAxisId: xAxisId,
+      yAxisId: yAxisId
+    }), !clipDot && /*#__PURE__*/React.createElement("clipPath", {
+      id: "clipPath-dots-".concat(clipPathId)
+    }, /*#__PURE__*/React.createElement("rect", {
+      x: left - dotSize / 2,
+      y: top - dotSize / 2,
+      width: width + dotSize,
+      height: height + dotSize
+    }))), /*#__PURE__*/React.createElement(RenderArea, {
+      needClip: needClip,
+      clipPathId: clipPathId,
+      props: this.props
+    })), /*#__PURE__*/React.createElement(ActivePoints, {
+      points: points,
+      mainColor: getLegendItemColor(this.props.stroke, this.props.fill),
+      itemDataKey: this.props.dataKey,
+      activeDot: this.props.activeDot,
+      clipPath: activePointsClipPath
+    }), this.props.isRange && Array.isArray(baseLine) && /*#__PURE__*/React.createElement(ActivePoints, {
+      points: baseLine,
+      mainColor: getLegendItemColor(this.props.stroke, this.props.fill),
+      itemDataKey: this.props.dataKey,
+      activeDot: this.props.activeDot,
+      clipPath: activePointsClipPath
+    }));
+  }
+}
+export var defaultAreaProps = {
+  activeDot: true,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  connectNulls: false,
+  dot: false,
+  fill: '#3182bd',
+  fillOpacity: 0.6,
+  hide: false,
+  isAnimationActive: 'auto',
+  legendType: 'line',
+  stroke: '#3182bd',
+  strokeWidth: 1,
+  type: 'linear',
+  label: false,
+  xAxisId: 0,
+  yAxisId: 0,
+  zIndex: DefaultZIndexes.area
+};
+function AreaImpl(props) {
+  var _useAppSelector;
+  var _resolveDefaultProps = resolveDefaultProps(props, defaultAreaProps),
+    {
+      activeDot,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      connectNulls,
+      dot,
+      fill,
+      fillOpacity,
+      hide,
+      isAnimationActive,
+      legendType,
+      stroke,
+      xAxisId,
+      yAxisId
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded2);
+  var layout = useChartLayout();
+  var chartName = useChartName();
+  var {
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  var isPanorama = useIsPanorama();
+  var {
+    points,
+    isRange,
+    baseLine
+  } = (_useAppSelector = useAppSelector(state => selectArea(state, props.id, isPanorama))) !== null && _useAppSelector !== void 0 ? _useAppSelector : {};
+  var plotArea = usePlotArea();
+  if (layout !== 'horizontal' && layout !== 'vertical' || plotArea == null) {
+    // Can't render Area in an unsupported layout
+    return null;
+  }
+  if (chartName !== 'AreaChart' && chartName !== 'ComposedChart') {
+    // There is nothing stopping us from rendering Area in other charts, except for historical reasons. Do we want to allow that?
+    return null;
+  }
+  var {
+    height,
+    width,
+    x: left,
+    y: top
+  } = plotArea;
+  if (!points || !points.length) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(AreaWithState, _extends({}, everythingElse, {
+    activeDot: activeDot,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    baseLine: baseLine,
+    connectNulls: connectNulls,
+    dot: dot,
+    fill: fill,
+    fillOpacity: fillOpacity,
+    height: height,
+    hide: hide,
+    layout: layout,
+    isAnimationActive: isAnimationActive === 'auto' ? !Global.isSsr : isAnimationActive,
+    isRange: isRange,
+    legendType: legendType,
+    needClip: needClip,
+    points: points,
+    stroke: stroke,
+    width: width,
+    left: left,
+    top: top,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId
+  }));
+}
+export var getBaseValue = (layout, chartBaseValue, itemBaseValue, xAxis, yAxis) => {
+  // The baseValue can be defined both on the AreaChart, and on the Area.
+  // The value for the item takes precedence.
+  var baseValue = itemBaseValue !== null && itemBaseValue !== void 0 ? itemBaseValue : chartBaseValue;
+  if (isNumber(baseValue)) {
+    return baseValue;
+  }
+  var numericAxis = layout === 'horizontal' ? yAxis : xAxis;
+  // @ts-expect-error d3scale .domain() returns unknown, Math.max expects number
+  var domain = numericAxis.scale.domain();
+  if (numericAxis.type === 'number') {
+    var domainMax = Math.max(domain[0], domain[1]);
+    var domainMin = Math.min(domain[0], domain[1]);
+    if (baseValue === 'dataMin') {
+      return domainMin;
+    }
+    if (baseValue === 'dataMax') {
+      return domainMax;
+    }
+    return domainMax < 0 ? domainMax : Math.max(Math.min(domain[0], domain[1]), 0);
+  }
+  if (baseValue === 'dataMin') {
+    return domain[0];
+  }
+  if (baseValue === 'dataMax') {
+    return domain[1];
+  }
+  return domain[0];
+};
+export function computeArea(_ref0) {
+  var {
+    areaSettings: {
+      connectNulls,
+      baseValue: itemBaseValue,
+      dataKey
+    },
+    stackedData,
+    layout,
+    chartBaseValue,
+    xAxis,
+    yAxis,
+    displayedData,
+    dataStartIndex,
+    xAxisTicks,
+    yAxisTicks,
+    bandSize
+  } = _ref0;
+  var hasStack = stackedData && stackedData.length;
+  var baseValue = getBaseValue(layout, chartBaseValue, itemBaseValue, xAxis, yAxis);
+  var isHorizontalLayout = layout === 'horizontal';
+  var isRange = false;
+  var points = displayedData.map((entry, index) => {
+    var _valueAsArray$, _valueAsArray, _xAxis$scale$map;
+    var valueAsArray;
+    if (hasStack) {
+      valueAsArray = stackedData[dataStartIndex + index];
+    } else {
+      var rawValue = getValueByDataKey(entry, dataKey);
+      if (!Array.isArray(rawValue)) {
+        // @ts-expect-error getValueByDataKey is not checking its return value
+        valueAsArray = [baseValue, rawValue];
+      } else {
+        // @ts-expect-error getValueByDataKey is not checking its return value
+        valueAsArray = rawValue;
+        isRange = true;
+      }
+    }
+    var value1 = (_valueAsArray$ = (_valueAsArray = valueAsArray) === null || _valueAsArray === void 0 ? void 0 : _valueAsArray[1]) !== null && _valueAsArray$ !== void 0 ? _valueAsArray$ : null;
+    var isBreakPoint = value1 == null || hasStack && !connectNulls && getValueByDataKey(entry, dataKey) == null;
+    if (isHorizontalLayout) {
+      var _yAxis$scale$map;
+      return {
+        x: getCateCoordinateOfLine({
+          axis: xAxis,
+          ticks: xAxisTicks,
+          bandSize,
+          entry,
+          index
+        }),
+        y: isBreakPoint ? null : (_yAxis$scale$map = yAxis.scale.map(value1)) !== null && _yAxis$scale$map !== void 0 ? _yAxis$scale$map : null,
+        value: valueAsArray,
+        payload: entry
+      };
+    }
+    return {
+      x: isBreakPoint ? null : (_xAxis$scale$map = xAxis.scale.map(value1)) !== null && _xAxis$scale$map !== void 0 ? _xAxis$scale$map : null,
+      y: getCateCoordinateOfLine({
+        axis: yAxis,
+        ticks: yAxisTicks,
+        bandSize,
+        entry,
+        index
+      }),
+      value: valueAsArray,
+      payload: entry
+    };
+  });
+  var baseLine;
+  if (hasStack || isRange) {
+    baseLine = points.map(entry => {
+      var _xAxis$scale$map2;
+      var x = Array.isArray(entry.value) ? entry.value[0] : null;
+      if (isHorizontalLayout) {
+        var _yAxis$scale$map2;
+        return {
+          x: entry.x,
+          y: x != null && entry.y != null ? (_yAxis$scale$map2 = yAxis.scale.map(x)) !== null && _yAxis$scale$map2 !== void 0 ? _yAxis$scale$map2 : null : null,
+          payload: entry.payload
+        };
+      }
+      return {
+        x: x != null ? (_xAxis$scale$map2 = xAxis.scale.map(x)) !== null && _xAxis$scale$map2 !== void 0 ? _xAxis$scale$map2 : null : null,
+        y: entry.y,
+        payload: entry.payload
+      };
+    });
+  } else {
+    baseLine = isHorizontalLayout ? yAxis.scale.map(baseValue) : xAxis.scale.map(baseValue);
+  }
+  return {
+    points,
+    baseLine: baseLine !== null && baseLine !== void 0 ? baseLine : 0,
+    isRange
+  };
+}
+function AreaFn(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultAreaProps);
+  var isPanorama = useIsPanorama();
+  // Report all props to Redux store first, before calling any hooks, to avoid circular dependencies.
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: props.id,
+    type: "area"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromAreaData(props)
+  }), /*#__PURE__*/React.createElement(SetAreaTooltipEntrySettings, {
+    dataKey: props.dataKey,
+    data: props.data,
+    stroke: props.stroke,
+    strokeWidth: props.strokeWidth,
+    fill: props.fill,
+    name: props.name,
+    hide: props.hide,
+    unit: props.unit,
+    tooltipType: props.tooltipType,
+    id: id
+  }), /*#__PURE__*/React.createElement(SetCartesianGraphicalItem, {
+    type: "area",
+    id: id,
+    data: props.data,
+    dataKey: props.dataKey,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: 0,
+    stackId: getNormalizedStackId(props.stackId),
+    hide: props.hide,
+    barSize: undefined,
+    baseValue: props.baseValue,
+    isPanorama: isPanorama,
+    connectNulls: props.connectNulls
+  }), /*#__PURE__*/React.createElement(AreaImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+
+/**
+ * @provides LabelListContext
+ * @consumes CartesianChartContext
+ */
+export var Area = /*#__PURE__*/React.memo(AreaFn, propsAreEqual);
+Area.displayName = 'Area';
Index: node_modules/recharts/es6/cartesian/Bar.js
===================================================================
--- node_modules/recharts/es6/cartesian/Bar.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/Bar.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,705 @@
+var _excluded = ["onMouseEnter", "onMouseLeave", "onClick"],
+  _excluded2 = ["value", "background", "tooltipPosition"],
+  _excluded3 = ["id"],
+  _excluded4 = ["onMouseEnter", "onClick", "onMouseLeave"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { PureComponent, useCallback, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { Cell } from '../component/Cell';
+import { CartesianLabelListContextProvider, LabelListFromLabelProp } from '../component/LabelList';
+import { interpolate, isNan, mathSign, noop } from '../util/DataUtils';
+import { findAllByType } from '../util/ReactUtils';
+import { getBaseValueOfBar, getCateCoordinateOfBar, getTooltipNameProp, getValueByDataKey, truncateByDomain } from '../util/ChartUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { BarRectangle, minPointSizeCallback } from '../util/BarUtils';
+import { useMouseClickItemDispatch, useMouseEnterItemDispatch, useMouseLeaveItemDispatch } from '../context/tooltipContext';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { SetErrorBarContext } from '../context/ErrorBarContext';
+import { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';
+import { useChartLayout } from '../context/chartLayoutContext';
+import { selectBarRectangles } from '../state/selectors/barSelectors';
+import { useAppSelector } from '../state/hooks';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { selectActiveTooltipDataKey, selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';
+import { SetLegendPayload } from '../state/SetLegendPayload';
+import { useAnimationId } from '../util/useAnimationId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents, svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { getZIndexFromUnknown } from '../zIndex/getZIndexFromUnknown';
+import { propsAreEqual } from '../util/propsAreEqual';
+import { BarStackClipLayer, useStackId } from './BarStack';
+var computeLegendPayloadFromBarData = props => {
+  var {
+    dataKey,
+    name,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: fill,
+    value: getTooltipNameProp(name, dataKey),
+    payload: props
+  }];
+};
+var SetBarTooltipEntrySettings = /*#__PURE__*/React.memo(_ref => {
+  var {
+    dataKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    unit,
+    tooltipType,
+    id
+  } = _ref;
+  var tooltipEntrySettings = {
+    dataDefinedOnItem: undefined,
+    getPosition: noop,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey: undefined,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit,
+      graphicalItemId: id
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+function BarBackground(props) {
+  var activeIndex = useAppSelector(selectActiveTooltipIndex);
+  var {
+    data,
+    dataKey,
+    background: backgroundFromProps,
+    allOtherBarProps
+  } = props;
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onMouseLeave: onMouseLeaveFromProps,
+      onClick: onItemClickFromProps
+    } = allOtherBarProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherBarProps, _excluded);
+
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, dataKey, allOtherBarProps.id);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, dataKey, allOtherBarProps.id);
+  if (!backgroundFromProps || data == null) {
+    return null;
+  }
+  var backgroundProps = svgPropertiesNoEventsFromUnknown(backgroundFromProps);
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: getZIndexFromUnknown(backgroundFromProps, DefaultZIndexes.barBackground)
+  }, data.map((entry, i) => {
+    var {
+        value,
+        background: backgroundFromDataEntry,
+        tooltipPosition
+      } = entry,
+      rest = _objectWithoutProperties(entry, _excluded2);
+    if (!backgroundFromDataEntry) {
+      return null;
+    }
+
+    // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+    var onMouseEnter = onMouseEnterFromContext(entry, i);
+    // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+    var onMouseLeave = onMouseLeaveFromContext(entry, i);
+    // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+    var onClick = onClickFromContext(entry, i);
+    var barRectangleProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
+      option: backgroundFromProps,
+      isActive: String(i) === activeIndex
+    }, rest), {}, {
+      // @ts-expect-error backgroundProps is contributing unknown props
+      fill: '#eee'
+    }, backgroundFromDataEntry), backgroundProps), adaptEventsOfChild(restOfAllOtherProps, entry, i)), {}, {
+      onMouseEnter,
+      onMouseLeave,
+      onClick,
+      dataKey,
+      index: i,
+      className: 'recharts-bar-background-rectangle'
+    });
+    return /*#__PURE__*/React.createElement(BarRectangle, _extends({
+      key: "background-bar-".concat(i)
+    }, barRectangleProps));
+  }));
+}
+function BarLabelListProvider(_ref2) {
+  var {
+    showLabels,
+    children,
+    rects
+  } = _ref2;
+  var labelListEntries = rects === null || rects === void 0 ? void 0 : rects.map(entry => {
+    var viewBox = {
+      x: entry.x,
+      y: entry.y,
+      width: entry.width,
+      lowerWidth: entry.width,
+      upperWidth: entry.width,
+      height: entry.height
+    };
+    return _objectSpread(_objectSpread({}, viewBox), {}, {
+      value: entry.value,
+      payload: entry.payload,
+      parentViewBox: entry.parentViewBox,
+      viewBox,
+      fill: entry.fill
+    });
+  });
+  return /*#__PURE__*/React.createElement(CartesianLabelListContextProvider, {
+    value: showLabels ? labelListEntries : undefined
+  }, children);
+}
+function BarRectangleWithActiveState(props) {
+  var {
+    shape,
+    activeBar,
+    baseProps,
+    entry,
+    index,
+    dataKey
+  } = props;
+  var activeIndex = useAppSelector(selectActiveTooltipIndex);
+  var activeDataKey = useAppSelector(selectActiveTooltipDataKey);
+  /*
+   * Bars support stacking, meaning that there can be multiple bars at the same x value.
+   * With Tooltip shared=false we only want to highlight the currently active Bar, not all.
+   *
+   * Also, if the tooltip is shared, we want to highlight all bars at the same x value
+   * regardless of the dataKey.
+   *
+   * With shared Tooltip, the activeDataKey is undefined.
+   */
+  var isActive = activeBar && String(index) === activeIndex && (activeDataKey == null || dataKey === activeDataKey);
+  var option = isActive ? activeBar : shape;
+  if (isActive) {
+    return /*#__PURE__*/React.createElement(ZIndexLayer, {
+      zIndex: DefaultZIndexes.activeBar
+    }, /*#__PURE__*/React.createElement(BarStackClipLayer, {
+      index: index
+    }, /*#__PURE__*/React.createElement(BarRectangle, _extends({}, baseProps, {
+      name: String(baseProps.name)
+    }, entry, {
+      isActive: isActive,
+      option: option,
+      index: index,
+      dataKey: dataKey
+    }))));
+  }
+  return /*#__PURE__*/React.createElement(BarRectangle, _extends({}, baseProps, {
+    name: String(baseProps.name)
+  }, entry, {
+    isActive: isActive,
+    option: option,
+    index: index,
+    dataKey: dataKey
+  }));
+}
+function BarRectangleNeverActive(props) {
+  var {
+    shape,
+    baseProps,
+    entry,
+    index,
+    dataKey
+  } = props;
+  return /*#__PURE__*/React.createElement(BarRectangle, _extends({}, baseProps, {
+    name: String(baseProps.name)
+  }, entry, {
+    isActive: false,
+    option: shape,
+    index: index,
+    dataKey: dataKey
+  }));
+}
+function BarRectangles(_ref3) {
+  var _svgPropertiesNoEvent;
+  var {
+    data,
+    props
+  } = _ref3;
+  var _ref4 = (_svgPropertiesNoEvent = svgPropertiesNoEvents(props)) !== null && _svgPropertiesNoEvent !== void 0 ? _svgPropertiesNoEvent : {},
+    {
+      id
+    } = _ref4,
+    baseProps = _objectWithoutProperties(_ref4, _excluded3);
+  var {
+    shape,
+    dataKey,
+    activeBar
+  } = props;
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = props,
+    restOfAllOtherProps = _objectWithoutProperties(props, _excluded4);
+
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, dataKey, id);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, dataKey, id);
+  if (!data) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(React.Fragment, null, data.map((entry, i) => {
+    return /*#__PURE__*/React.createElement(BarStackClipLayer, _extends({
+      index: i
+      // https://github.com/recharts/recharts/issues/5415
+      ,
+      key: "rectangle-".concat(entry === null || entry === void 0 ? void 0 : entry.x, "-").concat(entry === null || entry === void 0 ? void 0 : entry.y, "-").concat(entry === null || entry === void 0 ? void 0 : entry.value, "-").concat(i),
+      className: "recharts-bar-rectangle"
+    }, adaptEventsOfChild(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+      ,
+      onClick: onClickFromContext(entry, i)
+    }), activeBar ? /*#__PURE__*/React.createElement(BarRectangleWithActiveState, {
+      shape: shape,
+      activeBar: activeBar,
+      baseProps: baseProps,
+      entry: entry,
+      index: i,
+      dataKey: dataKey
+    }) :
+    /*#__PURE__*/
+    /*
+     * If the `activeBar` prop is falsy, then let's call the variant without hooks.
+     * Using the `selectActiveTooltipIndex` selector is usually fast
+     * but in charts with large-ish amount of data even the few nanoseconds add up to a noticeable jank.
+     * If the activeBar is false then we don't need to know which index is active - because we won't use it anyway.
+     * So let's just skip the hooks altogether. That way, React can skip rendering the component,
+     * and can skip the tree reconciliation for its children too.
+     * Because we can't call hooks conditionally, we need to have a separate component for that.
+     */
+    React.createElement(BarRectangleNeverActive, {
+      shape: shape,
+      baseProps: baseProps,
+      entry: entry,
+      index: i,
+      dataKey: dataKey
+    }));
+  }));
+}
+function RectanglesWithAnimation(_ref5) {
+  var {
+    props,
+    previousRectanglesRef
+  } = _ref5;
+  var {
+    data,
+    layout,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevData = previousRectanglesRef.current;
+  var animationId = useAnimationId(props, 'recharts-bar-');
+  var [isAnimating, setIsAnimating] = useState(false);
+  var showLabels = !isAnimating;
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(BarLabelListProvider, {
+    showLabels: showLabels,
+    rects: data
+  }, /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    animationId: animationId,
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    var stepData = t === 1 ? data : data === null || data === void 0 ? void 0 : data.map((entry, index) => {
+      var prev = prevData && prevData[index];
+      if (prev) {
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: interpolate(prev.x, entry.x, t),
+          y: interpolate(prev.y, entry.y, t),
+          width: interpolate(prev.width, entry.width, t),
+          height: interpolate(prev.height, entry.height, t)
+        });
+      }
+      if (layout === 'horizontal') {
+        var height = interpolate(0, entry.height, t);
+        var y = interpolate(entry.stackedBarStart, entry.y, t);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          y,
+          height
+        });
+      }
+      var w = interpolate(0, entry.width, t);
+      var x = interpolate(entry.stackedBarStart, entry.x, t);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        width: w,
+        x
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousRectanglesRef.current = stepData !== null && stepData !== void 0 ? stepData : null;
+    }
+    if (stepData == null) {
+      return null;
+    }
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(BarRectangles, {
+      props: props,
+      data: stepData
+    }));
+  }), /*#__PURE__*/React.createElement(LabelListFromLabelProp, {
+    label: props.label
+  }), props.children);
+}
+function RenderRectangles(props) {
+  var previousRectanglesRef = useRef(null);
+  return /*#__PURE__*/React.createElement(RectanglesWithAnimation, {
+    previousRectanglesRef: previousRectanglesRef,
+    props: props
+  });
+}
+var defaultMinPointSize = 0;
+var errorBarDataPointFormatter = (dataPoint, dataKey) => {
+  /**
+   * if the value coming from `selectBarRectangles` is an array then this is a stacked bar chart.
+   * arr[1] represents end value of the bar since the data is in the form of [startValue, endValue].
+   * */
+  var value = Array.isArray(dataPoint.value) ? dataPoint.value[1] : dataPoint.value;
+  return {
+    x: dataPoint.x,
+    y: dataPoint.y,
+    value,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    errorVal: getValueByDataKey(dataPoint, dataKey)
+  };
+};
+class BarWithState extends PureComponent {
+  render() {
+    var {
+      hide,
+      data,
+      dataKey,
+      className,
+      xAxisId,
+      yAxisId,
+      needClip,
+      background,
+      id
+    } = this.props;
+    if (hide || data == null) {
+      return null;
+    }
+    var layerClass = clsx('recharts-bar', className);
+    var clipPathId = id;
+    return /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass,
+      id: id
+    }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(GraphicalItemClipPath, {
+      clipPathId: clipPathId,
+      xAxisId: xAxisId,
+      yAxisId: yAxisId
+    })), /*#__PURE__*/React.createElement(Layer, {
+      className: "recharts-bar-rectangles",
+      clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : undefined
+    }, /*#__PURE__*/React.createElement(BarBackground, {
+      data: data,
+      dataKey: dataKey,
+      background: background,
+      allOtherBarProps: this.props
+    }), /*#__PURE__*/React.createElement(RenderRectangles, this.props)));
+  }
+}
+export var defaultBarProps = {
+  activeBar: false,
+  animationBegin: 0,
+  animationDuration: 400,
+  animationEasing: 'ease',
+  background: false,
+  hide: false,
+  isAnimationActive: 'auto',
+  label: false,
+  legendType: 'rect',
+  minPointSize: defaultMinPointSize,
+  xAxisId: 0,
+  yAxisId: 0,
+  zIndex: DefaultZIndexes.bar
+};
+function BarImpl(props) {
+  var {
+    xAxisId,
+    yAxisId,
+    hide,
+    legendType,
+    minPointSize,
+    activeBar,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    isAnimationActive
+  } = props;
+  var {
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  var layout = useChartLayout();
+  var isPanorama = useIsPanorama();
+  var cells = findAllByType(props.children, Cell);
+  var rects = useAppSelector(state => selectBarRectangles(state, props.id, isPanorama, cells));
+  if (layout !== 'vertical' && layout !== 'horizontal') {
+    return null;
+  }
+  var errorBarOffset;
+  var firstDataPoint = rects === null || rects === void 0 ? void 0 : rects[0];
+  if (firstDataPoint == null || firstDataPoint.height == null || firstDataPoint.width == null) {
+    errorBarOffset = 0;
+  } else {
+    errorBarOffset = layout === 'vertical' ? firstDataPoint.height / 2 : firstDataPoint.width / 2;
+  }
+  return /*#__PURE__*/React.createElement(SetErrorBarContext, {
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    data: rects,
+    dataPointFormatter: errorBarDataPointFormatter,
+    errorBarOffset: errorBarOffset
+  }, /*#__PURE__*/React.createElement(BarWithState, _extends({}, props, {
+    layout: layout,
+    needClip: needClip,
+    data: rects,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    hide: hide,
+    legendType: legendType,
+    minPointSize: minPointSize,
+    activeBar: activeBar,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive
+  })));
+}
+export function computeBarRectangles(_ref6) {
+  var {
+    layout,
+    barSettings: {
+      dataKey,
+      minPointSize: minPointSizeProp
+    },
+    pos,
+    bandSize,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    stackedData,
+    displayedData,
+    offset,
+    cells,
+    parentViewBox,
+    dataStartIndex
+  } = _ref6;
+  var numericAxis = layout === 'horizontal' ? yAxis : xAxis;
+  // @ts-expect-error this assumes that the domain is always numeric, but doesn't check for it
+  var stackedDomain = stackedData ? numericAxis.scale.domain() : null;
+  var baseValue = getBaseValueOfBar({
+    numericAxis
+  });
+  var stackedBarStart = numericAxis.scale.map(baseValue);
+  return displayedData.map((entry, index) => {
+    var value, x, y, width, height, background;
+    if (stackedData) {
+      // Use dataStartIndex to access the correct element in the full stackedData array
+      var untruncatedValue = stackedData[index + dataStartIndex];
+      if (untruncatedValue == null) {
+        return null;
+      }
+      value = truncateByDomain(untruncatedValue, stackedDomain);
+    } else {
+      value = getValueByDataKey(entry, dataKey);
+      if (!Array.isArray(value)) {
+        value = [baseValue, value];
+      }
+    }
+    var minPointSize = minPointSizeCallback(minPointSizeProp, defaultMinPointSize)(value[1], index);
+    if (layout === 'horizontal') {
+      var _ref7;
+      var baseValueScale = yAxis.scale.map(value[0]);
+      var currentValueScale = yAxis.scale.map(value[1]);
+      if (baseValueScale == null || currentValueScale == null) {
+        return null;
+      }
+      x = getCateCoordinateOfBar({
+        axis: xAxis,
+        ticks: xAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      y = (_ref7 = currentValueScale !== null && currentValueScale !== void 0 ? currentValueScale : baseValueScale) !== null && _ref7 !== void 0 ? _ref7 : undefined;
+      width = pos.size;
+      var computedHeight = baseValueScale - currentValueScale;
+      height = isNan(computedHeight) ? 0 : computedHeight;
+      background = {
+        x,
+        y: offset.top,
+        width,
+        height: offset.height
+      };
+      if (Math.abs(minPointSize) > 0 && Math.abs(height) < Math.abs(minPointSize)) {
+        var delta = mathSign(height || minPointSize) * (Math.abs(minPointSize) - Math.abs(height));
+        y -= delta;
+        height += delta;
+      }
+    } else {
+      var _baseValueScale = xAxis.scale.map(value[0]);
+      var _currentValueScale = xAxis.scale.map(value[1]);
+      if (_baseValueScale == null || _currentValueScale == null) {
+        return null;
+      }
+      x = _baseValueScale;
+      y = getCateCoordinateOfBar({
+        axis: yAxis,
+        ticks: yAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      width = _currentValueScale - _baseValueScale;
+      height = pos.size;
+      background = {
+        x: offset.left,
+        y,
+        width: offset.width,
+        height
+      };
+      if (Math.abs(minPointSize) > 0 && Math.abs(width) < Math.abs(minPointSize)) {
+        var _delta = mathSign(width || minPointSize) * (Math.abs(minPointSize) - Math.abs(width));
+        width += _delta;
+      }
+    }
+    if (x == null || y == null || width == null || height == null) {
+      return null;
+    }
+    var barRectangleItem = _objectSpread(_objectSpread({}, entry), {}, {
+      stackedBarStart,
+      x,
+      y,
+      width,
+      height,
+      value: stackedData ? value : value[1],
+      payload: entry,
+      background,
+      tooltipPosition: {
+        x: x + width / 2,
+        y: y + height / 2
+      },
+      parentViewBox
+    }, cells && cells[index] && cells[index].props);
+    return barRectangleItem;
+  }).filter(Boolean);
+}
+function BarFn(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultBarProps);
+  // stackId may arrive from props or from BarStack context
+  var stackId = useStackId(props.stackId);
+  var isPanorama = useIsPanorama();
+  // Report all props to Redux store first, before calling any hooks, to avoid circular dependencies.
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: props.id,
+    type: "bar"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromBarData(props)
+  }), /*#__PURE__*/React.createElement(SetBarTooltipEntrySettings, {
+    dataKey: props.dataKey,
+    stroke: props.stroke,
+    strokeWidth: props.strokeWidth,
+    fill: props.fill,
+    name: props.name,
+    hide: props.hide,
+    unit: props.unit,
+    tooltipType: props.tooltipType,
+    id: id
+  }), /*#__PURE__*/React.createElement(SetCartesianGraphicalItem, {
+    type: "bar",
+    id: id
+    // Bar does not allow setting data directly on the graphical item (why?)
+    ,
+    data: undefined,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: 0,
+    dataKey: props.dataKey,
+    stackId: stackId,
+    hide: props.hide,
+    barSize: props.barSize,
+    minPointSize: props.minPointSize,
+    maxBarSize: props.maxBarSize,
+    isPanorama: isPanorama
+  }), /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(BarImpl, _extends({}, props, {
+    id: id
+  })))));
+}
+
+/**
+ * @provides ErrorBarContext
+ * @provides LabelListContext
+ * @provides CellReader
+ * @consumes CartesianChartContext
+ * @consumes BarStackContext
+ */
+export var Bar = /*#__PURE__*/React.memo(BarFn, propsAreEqual);
+Bar.displayName = 'Bar';
Index: node_modules/recharts/es6/cartesian/BarStack.js
===================================================================
--- node_modules/recharts/es6/cartesian/BarStack.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/BarStack.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,122 @@
+var _excluded = ["index"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { createContext, useContext, useMemo } from 'react';
+import { getNormalizedStackId } from '../util/ChartUtils';
+import { useUniqueId } from '../util/useUniqueId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { useAppSelector } from '../state/hooks';
+import { selectStackRects } from '../state/selectors/barStackSelectors';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { Layer } from '../container/Layer';
+import { Rectangle } from '../shape/Rectangle';
+import { propsAreEqual } from '../util/propsAreEqual';
+var BarStackContext = /*#__PURE__*/createContext(undefined);
+
+/**
+ * Hook to resolve the stack ID for a Bar component.
+ * If a stack ID is provided via props, it is used directly.
+ * Otherwise, this will read stack ID from BarStack context if available.
+ * If both are undefined, it returns undefined.
+ * @param childStackId
+ */
+export var useStackId = childStackId => {
+  var stackSettings = useContext(BarStackContext);
+  if (stackSettings != null) {
+    return stackSettings.stackId;
+  }
+  if (childStackId == null) {
+    return undefined;
+  }
+  return getNormalizedStackId(childStackId);
+};
+export var defaultBarStackProps = {
+  radius: 0
+};
+var getClipPathId = (stackId, index) => {
+  return "recharts-bar-stack-clip-path-".concat(stackId, "-").concat(index);
+};
+export var useBarStackClipPathUrl = index => {
+  var barStackContext = useContext(BarStackContext);
+  if (barStackContext == null) {
+    return undefined;
+  }
+  var {
+    stackId
+  } = barStackContext;
+  return "url(#".concat(getClipPathId(stackId, index), ")");
+};
+export var BarStackClipLayer = _ref => {
+  var {
+      index
+    } = _ref,
+    rest = _objectWithoutProperties(_ref, _excluded);
+  var clipPathUrl = useBarStackClipPathUrl(index);
+  return /*#__PURE__*/React.createElement(Layer, _extends({
+    className: "recharts-bar-stack-layer",
+    clipPath: clipPathUrl
+  }, rest));
+};
+
+/**
+ * This React component will render a clipPath that the individual bars in the stack will reference
+ * to achieve rounded corners for the entire stack.
+ */
+var BarStackClipPath = _ref2 => {
+  var {
+    stackId,
+    radius
+  } = _ref2;
+  var isPanorama = useIsPanorama();
+  var positions = useAppSelector(state => selectStackRects(state, stackId, isPanorama));
+  if (positions == null || positions.length === 0) {
+    return null;
+  }
+  /*
+   * Render one clipPath per rectangle in the stack.
+   * Each rectangle corresponds to one data entry in the chart.
+   */
+  return /*#__PURE__*/React.createElement("defs", null, positions.map((pos, index) => {
+    if (pos == null) {
+      return null;
+    }
+    var clipPathId = getClipPathId(stackId, index);
+    return /*#__PURE__*/React.createElement("clipPath", {
+      key: clipPathId,
+      id: clipPathId
+    }, /*#__PURE__*/React.createElement(Rectangle, {
+      isAnimationActive: false,
+      isUpdateAnimationActive: false,
+      x: pos.x,
+      y: pos.y,
+      width: pos.width,
+      height: pos.height,
+      radius: radius
+    }));
+  }));
+};
+var BarStackImpl = props => {
+  var resolvedStackId = useUniqueId('recharts-bar-stack', getNormalizedStackId(props.stackId));
+  var {
+    children,
+    radius
+  } = resolveDefaultProps(props, defaultBarStackProps);
+  var context = useMemo(() => ({
+    stackId: resolvedStackId,
+    radius
+  }), [resolvedStackId, radius]);
+  return /*#__PURE__*/React.createElement(BarStackContext.Provider, {
+    value: context
+  }, /*#__PURE__*/React.createElement(BarStackClipPath, {
+    stackId: resolvedStackId,
+    radius: radius
+  }), children);
+};
+
+/**
+ * @provides BarStackContext
+ * @since 3.6
+ */
+export var BarStack = /*#__PURE__*/React.memo(BarStackImpl, propsAreEqual);
Index: node_modules/recharts/es6/cartesian/Brush.js
===================================================================
--- node_modules/recharts/es6/cartesian/Brush.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/Brush.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,902 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { Children, PureComponent, useCallback, useContext, useEffect } from 'react';
+import { clsx } from 'clsx';
+import { scalePoint } from 'victory-vendor/d3-scale';
+import range from 'es-toolkit/compat/range';
+import { Layer } from '../container/Layer';
+import { Text } from '../component/Text';
+import { getValueByDataKey } from '../util/ChartUtils';
+import { isNumber, isNotNil } from '../util/DataUtils';
+import { generatePrefixStyle } from '../util/CssPrefixUtils';
+import { useChartData, useDataIndex } from '../context/chartDataContext';
+import { BrushUpdateDispatchContext } from '../context/brushUpdateContext';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { setDataStartEndIndexes } from '../state/chartDataSlice';
+import { setBrushSettings } from '../state/brushSlice';
+import { PanoramaContextProvider } from '../context/PanoramaContext';
+import { selectBrushDimensions } from '../state/selectors/brushSelectors';
+import { useBrushChartSynchronisation } from '../synchronisation/useChartSynchronisation';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+
+// Why is this tickFormatter different from the other TickFormatters? This one allows to return numbers too for some reason.
+
+function DefaultTraveller(props) {
+  var {
+    x,
+    y,
+    width,
+    height,
+    stroke
+  } = props;
+  var lineY = Math.floor(y + height / 2) - 1;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("rect", {
+    x: x,
+    y: y,
+    width: width,
+    height: height,
+    fill: stroke,
+    stroke: "none"
+  }), /*#__PURE__*/React.createElement("line", {
+    x1: x + 1,
+    y1: lineY,
+    x2: x + width - 1,
+    y2: lineY,
+    fill: "none",
+    stroke: "#fff"
+  }), /*#__PURE__*/React.createElement("line", {
+    x1: x + 1,
+    y1: lineY + 2,
+    x2: x + width - 1,
+    y2: lineY + 2,
+    fill: "none",
+    stroke: "#fff"
+  }));
+}
+function Traveller(props) {
+  var {
+    travellerProps,
+    travellerType
+  } = props;
+  if (/*#__PURE__*/React.isValidElement(travellerType)) {
+    // @ts-expect-error element cloning disagrees with the types (and it should)
+    return /*#__PURE__*/React.cloneElement(travellerType, travellerProps);
+  }
+  if (typeof travellerType === 'function') {
+    return travellerType(travellerProps);
+  }
+  return /*#__PURE__*/React.createElement(DefaultTraveller, travellerProps);
+}
+function getNameFromUnknown(value) {
+  if (isNotNil(value) && typeof value === 'object' && 'name' in value && typeof value.name === 'string') {
+    return value.name;
+  }
+  return undefined;
+}
+function getAriaLabel(data, startIndex, endIndex) {
+  var start = getNameFromUnknown(data[startIndex]);
+  var end = getNameFromUnknown(data[endIndex]);
+  return "Min value: ".concat(start, ", Max value: ").concat(end);
+}
+function TravellerLayer(_ref) {
+  var {
+    otherProps,
+    travellerX,
+    id,
+    onMouseEnter,
+    onMouseLeave,
+    onMouseDown,
+    onTouchStart,
+    onTravellerMoveKeyboard,
+    onFocus,
+    onBlur
+  } = _ref;
+  var {
+    y,
+    x: xFromProps,
+    travellerWidth,
+    height,
+    traveller,
+    ariaLabel,
+    data,
+    startIndex,
+    endIndex
+  } = otherProps;
+  var x = Math.max(travellerX, xFromProps);
+  var travellerProps = _objectSpread(_objectSpread({}, svgPropertiesNoEvents(otherProps)), {}, {
+    x,
+    y,
+    width: travellerWidth,
+    height
+  });
+  var ariaLabelBrush = ariaLabel || getAriaLabel(data, startIndex, endIndex);
+  return /*#__PURE__*/React.createElement(Layer, {
+    tabIndex: 0,
+    role: "slider",
+    "aria-label": ariaLabelBrush,
+    "aria-valuenow": travellerX,
+    className: "recharts-brush-traveller",
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onMouseDown: onMouseDown,
+    onTouchStart: onTouchStart,
+    onKeyDown: e => {
+      if (!['ArrowLeft', 'ArrowRight'].includes(e.key)) {
+        return;
+      }
+      e.preventDefault();
+      e.stopPropagation();
+      onTravellerMoveKeyboard(e.key === 'ArrowRight' ? 1 : -1, id);
+    },
+    onFocus: onFocus,
+    onBlur: onBlur,
+    style: {
+      cursor: 'col-resize'
+    }
+  }, /*#__PURE__*/React.createElement(Traveller, {
+    travellerType: traveller,
+    travellerProps: travellerProps
+  }));
+}
+/*
+ * This one cannot be a React Component because React is not happy with it returning only string | number.
+ * React wants a full React.JSX.Element but that is not compatible with Text component.
+ */
+function getTextOfTick(props) {
+  var {
+    index,
+    data,
+    tickFormatter,
+    dataKey
+  } = props;
+  // @ts-expect-error getValueByDataKey does not validate the output type
+  var text = getValueByDataKey(data[index], dataKey, index);
+  return typeof tickFormatter === 'function' ? tickFormatter(text, index) : text;
+}
+function getIndexInRange(valueRange, x) {
+  var len = valueRange.length;
+  var start = 0;
+  var end = len - 1;
+  while (end - start > 1) {
+    var middle = Math.floor((start + end) / 2);
+    var middleValue = valueRange[middle];
+    if (middleValue != null && middleValue > x) {
+      end = middle;
+    } else {
+      start = middle;
+    }
+  }
+  var endValue = valueRange[end];
+  return endValue != null && x >= endValue ? end : start;
+}
+function getIndex(_ref2) {
+  var {
+    startX,
+    endX,
+    scaleValues,
+    gap,
+    data
+  } = _ref2;
+  var lastIndex = data.length - 1;
+  var min = Math.min(startX, endX);
+  var max = Math.max(startX, endX);
+  var minIndex = getIndexInRange(scaleValues, min);
+  var maxIndex = getIndexInRange(scaleValues, max);
+  return {
+    startIndex: minIndex - minIndex % gap,
+    endIndex: maxIndex === lastIndex ? lastIndex : maxIndex - maxIndex % gap
+  };
+}
+function Background(_ref3) {
+  var {
+    x,
+    y,
+    width,
+    height,
+    fill,
+    stroke
+  } = _ref3;
+  return /*#__PURE__*/React.createElement("rect", {
+    stroke: stroke,
+    fill: fill,
+    x: x,
+    y: y,
+    width: width,
+    height: height
+  });
+}
+function BrushText(_ref4) {
+  var {
+    startIndex,
+    endIndex,
+    y,
+    height,
+    travellerWidth,
+    stroke,
+    tickFormatter,
+    dataKey,
+    data,
+    startX,
+    endX
+  } = _ref4;
+  var offset = 5;
+  var attrs = {
+    pointerEvents: 'none',
+    fill: stroke
+  };
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-brush-texts"
+  }, /*#__PURE__*/React.createElement(Text, _extends({
+    textAnchor: "end",
+    verticalAnchor: "middle",
+    x: Math.min(startX, endX) - offset,
+    y: y + height / 2
+  }, attrs), getTextOfTick({
+    index: startIndex,
+    tickFormatter,
+    dataKey,
+    data
+  })), /*#__PURE__*/React.createElement(Text, _extends({
+    textAnchor: "start",
+    verticalAnchor: "middle",
+    x: Math.max(startX, endX) + travellerWidth + offset,
+    y: y + height / 2
+  }, attrs), getTextOfTick({
+    index: endIndex,
+    tickFormatter,
+    dataKey,
+    data
+  })));
+}
+function Slide(_ref5) {
+  var {
+    y,
+    height,
+    stroke,
+    travellerWidth,
+    startX,
+    endX,
+    onMouseEnter,
+    onMouseLeave,
+    onMouseDown,
+    onTouchStart
+  } = _ref5;
+  var x = Math.min(startX, endX) + travellerWidth;
+  var width = Math.max(Math.abs(endX - startX) - travellerWidth, 0);
+  return /*#__PURE__*/React.createElement("rect", {
+    className: "recharts-brush-slide",
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onMouseDown: onMouseDown,
+    onTouchStart: onTouchStart,
+    style: {
+      cursor: 'move'
+    },
+    stroke: "none",
+    fill: stroke,
+    fillOpacity: 0.2,
+    x: x,
+    y: y,
+    width: width,
+    height: height
+  });
+}
+function Panorama(_ref6) {
+  var {
+    x,
+    y,
+    width,
+    height,
+    data,
+    children,
+    padding
+  } = _ref6;
+  var isPanoramic = React.Children.count(children) === 1;
+  if (!isPanoramic) {
+    return null;
+  }
+  var chartElement = Children.only(children);
+  if (!chartElement) {
+    return null;
+  }
+  return /*#__PURE__*/React.cloneElement(chartElement, {
+    x,
+    y,
+    width,
+    height,
+    margin: padding,
+    compact: true,
+    data
+  });
+}
+var createScale = _ref7 => {
+  var {
+    data,
+    startIndex,
+    endIndex,
+    x,
+    width,
+    travellerWidth
+  } = _ref7;
+  if (!data || !data.length) {
+    return {};
+  }
+  var len = data.length;
+  var scale = scalePoint().domain(range(0, len)).range([x, x + width - travellerWidth]);
+  var scaleValues = scale.domain().map(entry => scale(entry)).filter(isNotNil);
+  return {
+    isTextActive: false,
+    isSlideMoving: false,
+    isTravellerMoving: false,
+    isTravellerFocused: false,
+    startX: scale(startIndex),
+    endX: scale(endIndex),
+    scale,
+    scaleValues
+  };
+};
+var isTouch = e => e.changedTouches && !!e.changedTouches.length;
+class BrushWithState extends PureComponent {
+  constructor(props) {
+    super(props);
+    _defineProperty(this, "handleDrag", e => {
+      if (this.leaveTimer) {
+        clearTimeout(this.leaveTimer);
+        this.leaveTimer = null;
+      }
+      if (this.state.isTravellerMoving) {
+        this.handleTravellerMove(e);
+      } else if (this.state.isSlideMoving) {
+        this.handleSlideDrag(e);
+      }
+    });
+    _defineProperty(this, "handleTouchMove", e => {
+      var _e$changedTouches;
+      var touch = (_e$changedTouches = e.changedTouches) === null || _e$changedTouches === void 0 ? void 0 : _e$changedTouches[0];
+      if (touch != null) {
+        this.handleDrag(touch);
+      }
+    });
+    _defineProperty(this, "handleDragEnd", () => {
+      this.setState({
+        isTravellerMoving: false,
+        isSlideMoving: false
+      }, () => {
+        var {
+          endIndex,
+          onDragEnd,
+          startIndex
+        } = this.props;
+        onDragEnd === null || onDragEnd === void 0 || onDragEnd({
+          endIndex,
+          startIndex
+        });
+      });
+      this.detachDragEndListener();
+    });
+    _defineProperty(this, "handleLeaveWrapper", () => {
+      if (this.state.isTravellerMoving || this.state.isSlideMoving) {
+        this.leaveTimer = window.setTimeout(this.handleDragEnd, this.props.leaveTimeOut);
+      }
+    });
+    _defineProperty(this, "handleEnterSlideOrTraveller", () => {
+      this.setState({
+        isTextActive: true
+      });
+    });
+    _defineProperty(this, "handleLeaveSlideOrTraveller", () => {
+      this.setState({
+        isTextActive: false
+      });
+    });
+    _defineProperty(this, "handleSlideDragStart", e => {
+      var event = isTouch(e) ? e.changedTouches[0] : e;
+      if (event == null) {
+        return;
+      }
+      this.setState({
+        isTravellerMoving: false,
+        isSlideMoving: true,
+        slideMoveStartX: event.pageX
+      });
+      this.attachDragEndListener();
+    });
+    _defineProperty(this, "handleTravellerMoveKeyboard", (direction, id) => {
+      var {
+        data,
+        gap,
+        startIndex,
+        endIndex
+      } = this.props;
+      // scaleValues are a list of coordinates. For example: [65, 250, 435, 620, 805, 990].
+      var {
+        scaleValues,
+        startX,
+        endX
+      } = this.state;
+      if (scaleValues == null) {
+        return;
+      }
+
+      // unless we search for the closest scaleValue to the current coordinate
+      // we need to move travelers via index when using the keyboard
+      var currentIndex = -1;
+      if (id === 'startX') {
+        currentIndex = startIndex;
+      } else if (id === 'endX') {
+        currentIndex = endIndex;
+      }
+      if (currentIndex < 0 || currentIndex >= data.length) {
+        return;
+      }
+      var newIndex = currentIndex + direction;
+      if (newIndex === -1 || newIndex >= scaleValues.length) {
+        return;
+      }
+      var newScaleValue = scaleValues[newIndex];
+      if (newScaleValue == null) {
+        return;
+      }
+
+      // Prevent travellers from being on top of each other or overlapping
+      if (id === 'startX' && newScaleValue >= endX || id === 'endX' && newScaleValue <= startX) {
+        return;
+      }
+      this.setState(
+      // @ts-expect-error not sure why typescript is not happy with this, partial update is fine in React
+      {
+        [id]: newScaleValue
+      }, () => {
+        this.props.onChange(getIndex({
+          startX: this.state.startX,
+          endX: this.state.endX,
+          data,
+          gap,
+          scaleValues
+        }));
+      });
+    });
+    this.travellerDragStartHandlers = {
+      startX: this.handleTravellerDragStart.bind(this, 'startX'),
+      endX: this.handleTravellerDragStart.bind(this, 'endX')
+    };
+    this.state = {
+      brushMoveStartX: 0,
+      movingTravellerId: undefined,
+      endX: 0,
+      startX: 0,
+      slideMoveStartX: 0
+    };
+  }
+  static getDerivedStateFromProps(nextProps, prevState) {
+    var {
+      data,
+      width,
+      x,
+      travellerWidth,
+      startIndex,
+      endIndex,
+      startIndexControlledFromProps,
+      endIndexControlledFromProps
+    } = nextProps;
+    if (data !== prevState.prevData) {
+      return _objectSpread({
+        prevData: data,
+        prevTravellerWidth: travellerWidth,
+        prevX: x,
+        prevWidth: width
+      }, data && data.length ? createScale({
+        data,
+        width,
+        x,
+        travellerWidth,
+        startIndex,
+        endIndex
+      }) : {
+        scale: undefined,
+        scaleValues: undefined
+      });
+    }
+    var prevScale = prevState.scale;
+    if (prevScale && (width !== prevState.prevWidth || x !== prevState.prevX || travellerWidth !== prevState.prevTravellerWidth)) {
+      prevScale.range([x, x + width - travellerWidth]);
+      var scaleValues = prevScale.domain().map(entry => prevScale(entry)).filter(value => value != null);
+      return {
+        prevData: data,
+        prevTravellerWidth: travellerWidth,
+        prevX: x,
+        prevWidth: width,
+        startX: prevScale(nextProps.startIndex),
+        endX: prevScale(nextProps.endIndex),
+        scaleValues
+      };
+    }
+    if (prevState.scale && !prevState.isSlideMoving && !prevState.isTravellerMoving && !prevState.isTravellerFocused && !prevState.isTextActive) {
+      /*
+       * If the startIndex or endIndex are controlled from the outside,
+       * we need to keep the startX and end up to date.
+       * Also we do not want to do that while user is interacting in the brush,
+       * because this will trigger re-render and interrupt the drag&drop.
+       */
+      if (startIndexControlledFromProps != null && prevState.prevStartIndexControlledFromProps !== startIndexControlledFromProps) {
+        return {
+          startX: prevState.scale(startIndexControlledFromProps),
+          prevStartIndexControlledFromProps: startIndexControlledFromProps
+        };
+      }
+      if (endIndexControlledFromProps != null && prevState.prevEndIndexControlledFromProps !== endIndexControlledFromProps) {
+        return {
+          endX: prevState.scale(endIndexControlledFromProps),
+          prevEndIndexControlledFromProps: endIndexControlledFromProps
+        };
+      }
+    }
+    return null;
+  }
+  componentWillUnmount() {
+    if (this.leaveTimer) {
+      clearTimeout(this.leaveTimer);
+      this.leaveTimer = null;
+    }
+    this.detachDragEndListener();
+  }
+  attachDragEndListener() {
+    window.addEventListener('mouseup', this.handleDragEnd, true);
+    window.addEventListener('touchend', this.handleDragEnd, true);
+    window.addEventListener('mousemove', this.handleDrag, true);
+  }
+  detachDragEndListener() {
+    window.removeEventListener('mouseup', this.handleDragEnd, true);
+    window.removeEventListener('touchend', this.handleDragEnd, true);
+    window.removeEventListener('mousemove', this.handleDrag, true);
+  }
+  handleSlideDrag(e) {
+    var {
+      slideMoveStartX,
+      startX,
+      endX,
+      scaleValues
+    } = this.state;
+    if (scaleValues == null) {
+      return;
+    }
+    var {
+      x,
+      width,
+      travellerWidth,
+      startIndex,
+      endIndex,
+      onChange,
+      data,
+      gap
+    } = this.props;
+    var delta = e.pageX - slideMoveStartX;
+    if (delta > 0) {
+      delta = Math.min(delta, x + width - travellerWidth - endX, x + width - travellerWidth - startX);
+    } else if (delta < 0) {
+      delta = Math.max(delta, x - startX, x - endX);
+    }
+    var newIndex = getIndex({
+      startX: startX + delta,
+      endX: endX + delta,
+      data,
+      gap,
+      scaleValues
+    });
+    if ((newIndex.startIndex !== startIndex || newIndex.endIndex !== endIndex) && onChange) {
+      onChange(newIndex);
+    }
+    this.setState({
+      startX: startX + delta,
+      endX: endX + delta,
+      slideMoveStartX: e.pageX
+    });
+  }
+  handleTravellerDragStart(id, e) {
+    var event = isTouch(e) ? e.changedTouches[0] : e;
+    if (event == null) {
+      return;
+    }
+    this.setState({
+      isSlideMoving: false,
+      isTravellerMoving: true,
+      movingTravellerId: id,
+      brushMoveStartX: event.pageX
+    });
+    this.attachDragEndListener();
+  }
+  handleTravellerMove(e) {
+    var {
+      brushMoveStartX,
+      movingTravellerId,
+      endX,
+      startX,
+      scaleValues
+    } = this.state;
+    if (movingTravellerId == null || scaleValues == null) {
+      return;
+    }
+    var prevValue = this.state[movingTravellerId];
+    var {
+      x,
+      width,
+      travellerWidth,
+      onChange,
+      gap,
+      data
+    } = this.props;
+    var params = {
+      startX: this.state.startX,
+      endX: this.state.endX,
+      data,
+      gap,
+      scaleValues
+    };
+    var delta = e.pageX - brushMoveStartX;
+    if (delta > 0) {
+      delta = Math.min(delta, x + width - travellerWidth - prevValue);
+    } else if (delta < 0) {
+      delta = Math.max(delta, x - prevValue);
+    }
+    params[movingTravellerId] = prevValue + delta;
+    var newIndex = getIndex(params);
+    var {
+      startIndex,
+      endIndex
+    } = newIndex;
+    var isFullGap = () => {
+      var lastIndex = data.length - 1;
+      if (movingTravellerId === 'startX' && (endX > startX ? startIndex % gap === 0 : endIndex % gap === 0) || endX < startX && endIndex === lastIndex || movingTravellerId === 'endX' && (endX > startX ? endIndex % gap === 0 : startIndex % gap === 0) || endX > startX && endIndex === lastIndex) {
+        return true;
+      }
+      return false;
+    };
+    this.setState(
+    // @ts-expect-error not sure why typescript is not happy with this, partial update is fine in React
+    {
+      [movingTravellerId]: prevValue + delta,
+      brushMoveStartX: e.pageX
+    }, () => {
+      if (onChange) {
+        if (isFullGap()) {
+          onChange(newIndex);
+        }
+      }
+    });
+  }
+  render() {
+    var {
+      data,
+      className,
+      children,
+      x,
+      y,
+      dy,
+      width,
+      height,
+      alwaysShowText,
+      fill,
+      stroke,
+      startIndex,
+      endIndex,
+      travellerWidth,
+      tickFormatter,
+      dataKey,
+      padding
+    } = this.props;
+    var {
+      startX,
+      endX,
+      isTextActive,
+      isSlideMoving,
+      isTravellerMoving,
+      isTravellerFocused
+    } = this.state;
+    if (!data || !data.length || !isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || width <= 0 || height <= 0) {
+      return null;
+    }
+    var layerClass = clsx('recharts-brush', className);
+    var style = generatePrefixStyle('userSelect', 'none');
+    var calculatedY = y + (dy !== null && dy !== void 0 ? dy : 0);
+    return /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass,
+      onMouseLeave: this.handleLeaveWrapper,
+      onTouchMove: this.handleTouchMove,
+      style: style
+    }, /*#__PURE__*/React.createElement(Background, {
+      x: x,
+      y: calculatedY,
+      width: width,
+      height: height,
+      fill: fill,
+      stroke: stroke
+    }), /*#__PURE__*/React.createElement(PanoramaContextProvider, null, /*#__PURE__*/React.createElement(Panorama, {
+      x: x,
+      y: calculatedY,
+      width: width,
+      height: height,
+      data: data,
+      padding: padding
+    }, children)), /*#__PURE__*/React.createElement(Slide, {
+      y: calculatedY,
+      height: height,
+      stroke: stroke,
+      travellerWidth: travellerWidth,
+      startX: startX,
+      endX: endX,
+      onMouseEnter: this.handleEnterSlideOrTraveller,
+      onMouseLeave: this.handleLeaveSlideOrTraveller,
+      onMouseDown: this.handleSlideDragStart,
+      onTouchStart: this.handleSlideDragStart
+    }), /*#__PURE__*/React.createElement(TravellerLayer, {
+      travellerX: startX,
+      id: "startX",
+      otherProps: _objectSpread(_objectSpread({}, this.props), {}, {
+        y: calculatedY
+      }),
+      onMouseEnter: this.handleEnterSlideOrTraveller,
+      onMouseLeave: this.handleLeaveSlideOrTraveller,
+      onMouseDown: this.travellerDragStartHandlers.startX,
+      onTouchStart: this.travellerDragStartHandlers.startX,
+      onTravellerMoveKeyboard: this.handleTravellerMoveKeyboard,
+      onFocus: () => {
+        this.setState({
+          isTravellerFocused: true
+        });
+      },
+      onBlur: () => {
+        this.setState({
+          isTravellerFocused: false
+        });
+      }
+    }), /*#__PURE__*/React.createElement(TravellerLayer, {
+      travellerX: endX,
+      id: "endX",
+      otherProps: _objectSpread(_objectSpread({}, this.props), {}, {
+        y: calculatedY
+      }),
+      onMouseEnter: this.handleEnterSlideOrTraveller,
+      onMouseLeave: this.handleLeaveSlideOrTraveller,
+      onMouseDown: this.travellerDragStartHandlers.endX,
+      onTouchStart: this.travellerDragStartHandlers.endX,
+      onTravellerMoveKeyboard: this.handleTravellerMoveKeyboard,
+      onFocus: () => {
+        this.setState({
+          isTravellerFocused: true
+        });
+      },
+      onBlur: () => {
+        this.setState({
+          isTravellerFocused: false
+        });
+      }
+    }), (isTextActive || isSlideMoving || isTravellerMoving || isTravellerFocused || alwaysShowText) && /*#__PURE__*/React.createElement(BrushText, {
+      startIndex: startIndex,
+      endIndex: endIndex,
+      y: calculatedY,
+      height: height,
+      travellerWidth: travellerWidth,
+      stroke: stroke,
+      tickFormatter: tickFormatter,
+      dataKey: dataKey,
+      data: data,
+      startX: startX,
+      endX: endX
+    }));
+  }
+}
+function BrushInternal(props) {
+  var dispatch = useAppDispatch();
+  var chartData = useChartData();
+  var dataIndexes = useDataIndex();
+  var onChangeFromContext = useContext(BrushUpdateDispatchContext);
+  var onChangeFromProps = props.onChange;
+  var {
+    startIndex: startIndexFromProps,
+    endIndex: endIndexFromProps
+  } = props;
+  useEffect(() => {
+    // start and end index can be controlled from props, and we need them to stay up-to-date in the Redux state too
+    dispatch(setDataStartEndIndexes({
+      startIndex: startIndexFromProps,
+      endIndex: endIndexFromProps
+    }));
+  }, [dispatch, endIndexFromProps, startIndexFromProps]);
+  useBrushChartSynchronisation();
+  var onChange = useCallback(nextState => {
+    if (dataIndexes == null) {
+      return;
+    }
+    var {
+      startIndex,
+      endIndex
+    } = dataIndexes;
+    if (nextState.startIndex !== startIndex || nextState.endIndex !== endIndex) {
+      onChangeFromContext === null || onChangeFromContext === void 0 || onChangeFromContext(nextState);
+      onChangeFromProps === null || onChangeFromProps === void 0 || onChangeFromProps(nextState);
+      dispatch(setDataStartEndIndexes(nextState));
+    }
+  }, [onChangeFromProps, onChangeFromContext, dispatch, dataIndexes]);
+  var brushDimensions = useAppSelector(selectBrushDimensions);
+  if (brushDimensions == null || dataIndexes == null || chartData == null || !chartData.length) {
+    return null;
+  }
+  var {
+    startIndex,
+    endIndex
+  } = dataIndexes;
+  var {
+    x,
+    y,
+    width
+  } = brushDimensions;
+  var contextProperties = {
+    data: chartData,
+    x,
+    y,
+    width,
+    startIndex,
+    endIndex,
+    onChange
+  };
+  return /*#__PURE__*/React.createElement(BrushWithState, _extends({}, props, contextProperties, {
+    startIndexControlledFromProps: startIndexFromProps !== null && startIndexFromProps !== void 0 ? startIndexFromProps : undefined,
+    endIndexControlledFromProps: endIndexFromProps !== null && endIndexFromProps !== void 0 ? endIndexFromProps : undefined
+  }));
+}
+function BrushSettingsDispatcher(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setBrushSettings(props));
+    return () => {
+      dispatch(setBrushSettings(null));
+    };
+  }, [dispatch, props]);
+  return null;
+}
+export var defaultBrushProps = {
+  height: 40,
+  travellerWidth: 5,
+  gap: 1,
+  fill: '#fff',
+  stroke: '#666',
+  padding: {
+    top: 1,
+    right: 1,
+    bottom: 1,
+    left: 1
+  },
+  leaveTimeOut: 1000,
+  alwaysShowText: false
+};
+
+/**
+ * Renders a scrollbar that allows the user to zoom and pan in the chart along its XAxis.
+ * It also allows you to render a small overview of the chart inside the brush that is always visible
+ * and shows the full data set so that the user can see where they are zoomed in.
+ *
+ * If a chart is synchronized with other charts using the `syncId` prop on the chart,
+ * the brush will also synchronize the zooming and panning between all synchronized charts.
+ *
+ * @see {@link https://recharts.github.io/en-US/examples/BrushBarChart/ BarChart with Brush}
+ * @see {@link https://recharts.github.io/en-US/examples/SynchronizedLineChart/ Synchronized Brush}
+ *
+ * @consumes CartesianChartContext
+ */
+export function Brush(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultBrushProps);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(BrushSettingsDispatcher, {
+    height: props.height,
+    x: props.x,
+    y: props.y,
+    width: props.width,
+    padding: props.padding
+  }), /*#__PURE__*/React.createElement(BrushInternal, props));
+}
+Brush.displayName = 'Brush';
Index: node_modules/recharts/es6/cartesian/CartesianAxis.js
===================================================================
--- node_modules/recharts/es6/cartesian/CartesianAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/CartesianAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,447 @@
+var _excluded = ["axisLine", "width", "height", "className", "hide", "ticks", "axisType"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * @fileOverview Cartesian Axis
+ */
+import * as React from 'react';
+import { useState, useRef, useCallback, forwardRef, useImperativeHandle } from 'react';
+import get from 'es-toolkit/compat/get';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { Text } from '../component/Text';
+import { CartesianLabelContextProvider, CartesianLabelFromLabelProp } from '../component/Label';
+import { isNumber } from '../util/DataUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { getTicks } from './getTicks';
+import { svgPropertiesNoEvents, svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
+import { getCalculatedYAxisWidth } from '../util/YAxisUtils';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { getClassNameFromUnknown } from '../util/getClassNameFromUnknown';
+
+/** The orientation of the axis in correspondence to the chart */
+
+/** A unit to be appended to a value */
+
+/** The formatter function of tick */
+
+export var defaultCartesianAxisProps = {
+  x: 0,
+  y: 0,
+  width: 0,
+  height: 0,
+  viewBox: {
+    x: 0,
+    y: 0,
+    width: 0,
+    height: 0
+  },
+  // The orientation of axis
+  orientation: 'bottom',
+  // The ticks
+  ticks: [],
+  stroke: '#666',
+  tickLine: true,
+  axisLine: true,
+  tick: true,
+  mirror: false,
+  minTickGap: 5,
+  // The width or height of tick
+  tickSize: 6,
+  tickMargin: 2,
+  interval: 'preserveEnd',
+  zIndex: DefaultZIndexes.axis
+};
+
+/*
+ * `viewBox` and `scale` are SVG attributes.
+ * Recharts however - unfortunately - has its own attributes named `viewBox` and `scale`
+ * that are completely different data shape and different purpose.
+ */
+
+function AxisLine(axisLineProps) {
+  var {
+    x,
+    y,
+    width,
+    height,
+    orientation,
+    mirror,
+    axisLine,
+    otherSvgProps
+  } = axisLineProps;
+  if (!axisLine) {
+    return null;
+  }
+  var props = _objectSpread(_objectSpread(_objectSpread({}, otherSvgProps), svgPropertiesNoEvents(axisLine)), {}, {
+    fill: 'none'
+  });
+  if (orientation === 'top' || orientation === 'bottom') {
+    var needHeight = +(orientation === 'top' && !mirror || orientation === 'bottom' && mirror);
+    props = _objectSpread(_objectSpread({}, props), {}, {
+      x1: x,
+      y1: y + needHeight * height,
+      x2: x + width,
+      y2: y + needHeight * height
+    });
+  } else {
+    var needWidth = +(orientation === 'left' && !mirror || orientation === 'right' && mirror);
+    props = _objectSpread(_objectSpread({}, props), {}, {
+      x1: x + needWidth * width,
+      y1: y,
+      x2: x + needWidth * width,
+      y2: y + height
+    });
+  }
+  return /*#__PURE__*/React.createElement("line", _extends({}, props, {
+    className: clsx('recharts-cartesian-axis-line', get(axisLine, 'className'))
+  }));
+}
+
+/**
+ * Calculate the coordinates of endpoints in ticks.
+ * @param data The data of a simple tick.
+ * @param x The x-coordinate of the axis.
+ * @param y The y-coordinate of the axis.
+ * @param width The width of the axis.
+ * @param height The height of the axis.
+ * @param orientation The orientation of the axis.
+ * @param tickSize The length of the tick line.
+ * @param mirror If true, the ticks are mirrored.
+ * @param tickMargin The margin between the tick line and the tick text.
+ * @returns An object with `line` and `tick` coordinates.
+ * `line` is the coordinates for the tick line, and `tick` is the coordinate for the tick text.
+ */
+function getTickLineCoord(data, x, y, width, height, orientation, tickSize, mirror, tickMargin) {
+  var x1, x2, y1, y2, tx, ty;
+  var sign = mirror ? -1 : 1;
+  var finalTickSize = data.tickSize || tickSize;
+  var tickCoord = isNumber(data.tickCoord) ? data.tickCoord : data.coordinate;
+  switch (orientation) {
+    case 'top':
+      x1 = x2 = data.coordinate;
+      y2 = y + +!mirror * height;
+      y1 = y2 - sign * finalTickSize;
+      ty = y1 - sign * tickMargin;
+      tx = tickCoord;
+      break;
+    case 'left':
+      y1 = y2 = data.coordinate;
+      x2 = x + +!mirror * width;
+      x1 = x2 - sign * finalTickSize;
+      tx = x1 - sign * tickMargin;
+      ty = tickCoord;
+      break;
+    case 'right':
+      y1 = y2 = data.coordinate;
+      x2 = x + +mirror * width;
+      x1 = x2 + sign * finalTickSize;
+      tx = x1 + sign * tickMargin;
+      ty = tickCoord;
+      break;
+    default:
+      x1 = x2 = data.coordinate;
+      y2 = y + +mirror * height;
+      y1 = y2 + sign * finalTickSize;
+      ty = y1 + sign * tickMargin;
+      tx = tickCoord;
+      break;
+  }
+  return {
+    line: {
+      x1,
+      y1,
+      x2,
+      y2
+    },
+    tick: {
+      x: tx,
+      y: ty
+    }
+  };
+}
+
+/**
+ * @param orientation The orientation of the axis.
+ * @param mirror If true, the ticks are mirrored.
+ * @returns The text anchor of the tick.
+ */
+function getTickTextAnchor(orientation, mirror) {
+  switch (orientation) {
+    case 'left':
+      return mirror ? 'start' : 'end';
+    case 'right':
+      return mirror ? 'end' : 'start';
+    default:
+      return 'middle';
+  }
+}
+
+/**
+ * @param orientation The orientation of the axis.
+ * @param mirror If true, the ticks are mirrored.
+ * @returns The vertical text anchor of the tick.
+ */
+function getTickVerticalAnchor(orientation, mirror) {
+  switch (orientation) {
+    case 'left':
+    case 'right':
+      return 'middle';
+    case 'top':
+      return mirror ? 'start' : 'end';
+    default:
+      return mirror ? 'end' : 'start';
+  }
+}
+function TickItem(props) {
+  var {
+    option,
+    tickProps,
+    value
+  } = props;
+  var tickItem;
+  var combinedClassName = clsx(tickProps.className, 'recharts-cartesian-axis-tick-value');
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error element cloning is not typed
+    tickItem = /*#__PURE__*/React.cloneElement(option, _objectSpread(_objectSpread({}, tickProps), {}, {
+      className: combinedClassName
+    }));
+  } else if (typeof option === 'function') {
+    tickItem = option(_objectSpread(_objectSpread({}, tickProps), {}, {
+      className: combinedClassName
+    }));
+  } else {
+    var className = 'recharts-cartesian-axis-tick-value';
+    if (typeof option !== 'boolean') {
+      className = clsx(className, getClassNameFromUnknown(option));
+    }
+    tickItem = /*#__PURE__*/React.createElement(Text, _extends({}, tickProps, {
+      className: className
+    }), value);
+  }
+  return tickItem;
+}
+var Ticks = /*#__PURE__*/forwardRef((props, ref) => {
+  var {
+    ticks = [],
+    tick,
+    tickLine,
+    stroke,
+    tickFormatter,
+    unit,
+    padding,
+    tickTextProps,
+    orientation,
+    mirror,
+    x,
+    y,
+    width,
+    height,
+    tickSize,
+    tickMargin,
+    fontSize,
+    letterSpacing,
+    getTicksConfig,
+    events,
+    axisType
+  } = props;
+  // @ts-expect-error some properties are optional in props but required in getTicks
+  var finalTicks = getTicks(_objectSpread(_objectSpread({}, getTicksConfig), {}, {
+    ticks
+  }), fontSize, letterSpacing);
+  var textAnchor = getTickTextAnchor(orientation, mirror);
+  var verticalAnchor = getTickVerticalAnchor(orientation, mirror);
+  var axisProps = svgPropertiesNoEvents(getTicksConfig);
+  var customTickProps = svgPropertiesNoEventsFromUnknown(tick);
+  var tickLinePropsObject = {};
+  if (typeof tickLine === 'object') {
+    tickLinePropsObject = tickLine;
+  }
+  var tickLineProps = _objectSpread(_objectSpread({}, axisProps), {}, {
+    fill: 'none'
+  }, tickLinePropsObject);
+  var tickLineCoords = finalTicks.map(entry => _objectSpread({
+    entry
+  }, getTickLineCoord(entry, x, y, width, height, orientation, tickSize, mirror, tickMargin)));
+  var tickLines = tickLineCoords.map(_ref => {
+    var {
+      entry,
+      line: lineCoord
+    } = _ref;
+    return /*#__PURE__*/React.createElement(Layer, {
+      className: "recharts-cartesian-axis-tick",
+      key: "tick-".concat(entry.value, "-").concat(entry.coordinate, "-").concat(entry.tickCoord)
+    }, tickLine && /*#__PURE__*/React.createElement("line", _extends({}, tickLineProps, lineCoord, {
+      className: clsx('recharts-cartesian-axis-tick-line', get(tickLine, 'className'))
+    })));
+  });
+  var tickLabels = tickLineCoords.map((_ref2, i) => {
+    var _ref3, _tickTextProps$angle;
+    var {
+      entry,
+      tick: tickCoord
+    } = _ref2;
+    // @ts-expect-error we're not checking that padding and orientation types are in sync
+    var tickProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
+      verticalAnchor
+    }, axisProps), {}, {
+      textAnchor,
+      stroke: 'none',
+      fill: stroke
+    }, tickCoord), {}, {
+      index: i,
+      payload: entry,
+      visibleTicksCount: finalTicks.length,
+      tickFormatter,
+      padding
+    }, tickTextProps), {}, {
+      angle: (_ref3 = (_tickTextProps$angle = tickTextProps === null || tickTextProps === void 0 ? void 0 : tickTextProps.angle) !== null && _tickTextProps$angle !== void 0 ? _tickTextProps$angle : axisProps.angle) !== null && _ref3 !== void 0 ? _ref3 : 0
+    });
+
+    // @ts-expect-error customTickProps is contributing unknown props which we don't type properly
+    var finalTickProps = _objectSpread(_objectSpread({}, tickProps), customTickProps);
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      className: "recharts-cartesian-axis-tick-label",
+      key: "tick-label-".concat(entry.value, "-").concat(entry.coordinate, "-").concat(entry.tickCoord)
+    }, adaptEventsOfChild(events, entry, i)), tick && /*#__PURE__*/React.createElement(TickItem, {
+      option: tick,
+      tickProps: finalTickProps,
+      value: "".concat(typeof tickFormatter === 'function' ? tickFormatter(entry.value, i) : entry.value).concat(unit || '')
+    }));
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-axis-ticks recharts-".concat(axisType, "-ticks")
+  }, tickLabels.length > 0 && /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: DefaultZIndexes.label
+  }, /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-axis-tick-labels recharts-".concat(axisType, "-tick-labels"),
+    ref: ref
+  }, tickLabels)), tickLines.length > 0 && /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-axis-tick-lines recharts-".concat(axisType, "-tick-lines")
+  }, tickLines));
+});
+var CartesianAxisComponent = /*#__PURE__*/forwardRef((props, ref) => {
+  var {
+      axisLine,
+      width,
+      height,
+      className,
+      hide,
+      ticks,
+      axisType
+    } = props,
+    rest = _objectWithoutProperties(props, _excluded);
+  var [fontSize, setFontSize] = useState('');
+  var [letterSpacing, setLetterSpacing] = useState('');
+  var tickRefs = useRef(null);
+  useImperativeHandle(ref, () => ({
+    getCalculatedWidth: () => {
+      var _props$labelRef;
+      return getCalculatedYAxisWidth({
+        ticks: tickRefs.current,
+        label: (_props$labelRef = props.labelRef) === null || _props$labelRef === void 0 ? void 0 : _props$labelRef.current,
+        labelGapWithTick: 5,
+        tickSize: props.tickSize,
+        tickMargin: props.tickMargin
+      });
+    }
+  }));
+  var layerRef = useCallback(el => {
+    if (el) {
+      var tickNodes = el.getElementsByClassName('recharts-cartesian-axis-tick-value');
+      tickRefs.current = tickNodes;
+      var tick = tickNodes[0];
+      if (tick) {
+        var computedStyle = window.getComputedStyle(tick);
+        var calculatedFontSize = computedStyle.fontSize;
+        var calculatedLetterSpacing = computedStyle.letterSpacing;
+        if (calculatedFontSize !== fontSize || calculatedLetterSpacing !== letterSpacing) {
+          setFontSize(calculatedFontSize);
+          setLetterSpacing(calculatedLetterSpacing);
+        }
+      }
+    }
+  }, [fontSize, letterSpacing]);
+  if (hide) {
+    return null;
+  }
+
+  /*
+   * This is different condition from what validateWidthHeight is doing;
+   * the CartesianAxis does allow width or height to be undefined.
+   */
+  if (width != null && width <= 0 || height != null && height <= 0) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-cartesian-axis', className)
+  }, /*#__PURE__*/React.createElement(AxisLine, {
+    x: props.x,
+    y: props.y,
+    width: width,
+    height: height,
+    orientation: props.orientation,
+    mirror: props.mirror,
+    axisLine: axisLine,
+    otherSvgProps: svgPropertiesNoEvents(props)
+  }), /*#__PURE__*/React.createElement(Ticks, {
+    ref: layerRef,
+    axisType: axisType,
+    events: rest,
+    fontSize: fontSize,
+    getTicksConfig: props,
+    height: props.height,
+    letterSpacing: letterSpacing,
+    mirror: props.mirror,
+    orientation: props.orientation,
+    padding: props.padding,
+    stroke: props.stroke,
+    tick: props.tick,
+    tickFormatter: props.tickFormatter,
+    tickLine: props.tickLine,
+    tickMargin: props.tickMargin,
+    tickSize: props.tickSize,
+    tickTextProps: props.tickTextProps,
+    ticks: ticks,
+    unit: props.unit,
+    width: props.width,
+    x: props.x,
+    y: props.y
+  }), /*#__PURE__*/React.createElement(CartesianLabelContextProvider, {
+    x: props.x,
+    y: props.y,
+    width: props.width,
+    height: props.height,
+    lowerWidth: props.width,
+    upperWidth: props.width
+  }, /*#__PURE__*/React.createElement(CartesianLabelFromLabelProp, {
+    label: props.label,
+    labelRef: props.labelRef
+  }), props.children)));
+});
+
+/**
+ * @deprecated
+ *
+ * This component is not meant to be used directly in app code.
+ * Use XAxis or YAxis instead.
+ *
+ * Starting from Recharts v4.0 we will make this component internal only.
+ */
+export var CartesianAxis = /*#__PURE__*/React.forwardRef((outsideProps, ref) => {
+  var props = resolveDefaultProps(outsideProps, defaultCartesianAxisProps);
+  return /*#__PURE__*/React.createElement(CartesianAxisComponent, _extends({}, props, {
+    ref: ref
+  }));
+});
+CartesianAxis.displayName = 'CartesianAxis';
Index: node_modules/recharts/es6/cartesian/CartesianGrid.js
===================================================================
--- node_modules/recharts/es6/cartesian/CartesianGrid.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/CartesianGrid.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,411 @@
+var _excluded = ["x1", "y1", "x2", "y2", "key"],
+  _excluded2 = ["offset"],
+  _excluded3 = ["xAxisId", "yAxisId"],
+  _excluded4 = ["xAxisId", "yAxisId"];
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { warn } from '../util/LogUtils';
+import { isNumber } from '../util/DataUtils';
+import { getCoordinatesOfGrid, getTicksOfAxis } from '../util/ChartUtils';
+import { getTicks } from './getTicks';
+import { defaultCartesianAxisProps } from './CartesianAxis';
+import { useChartHeight, useChartWidth, useOffsetInternal } from '../context/chartLayoutContext';
+import { selectAxisPropsNeededForCartesianGridTicksGenerator } from '../state/selectors/axisSelectors';
+import { useAppSelector } from '../state/hooks';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+
+/**
+ * The <CartesianGrid horizontal
+ */
+
+var Background = props => {
+  var {
+    fill
+  } = props;
+  if (!fill || fill === 'none') {
+    return null;
+  }
+  var {
+    fillOpacity,
+    x,
+    y,
+    width,
+    height,
+    ry
+  } = props;
+  return /*#__PURE__*/React.createElement("rect", {
+    x: x,
+    y: y,
+    ry: ry,
+    width: width,
+    height: height,
+    stroke: "none",
+    fill: fill,
+    fillOpacity: fillOpacity,
+    className: "recharts-cartesian-grid-bg"
+  });
+};
+function LineItem(_ref) {
+  var {
+    option,
+    lineItemProps
+  } = _ref;
+  var lineItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error typescript does not see the props type when cloning an element
+    lineItem = /*#__PURE__*/React.cloneElement(option, lineItemProps);
+  } else if (typeof option === 'function') {
+    lineItem = option(lineItemProps);
+  } else {
+    var _svgPropertiesNoEvent;
+    var {
+        x1,
+        y1,
+        x2,
+        y2,
+        key
+      } = lineItemProps,
+      others = _objectWithoutProperties(lineItemProps, _excluded);
+    var _ref2 = (_svgPropertiesNoEvent = svgPropertiesNoEvents(others)) !== null && _svgPropertiesNoEvent !== void 0 ? _svgPropertiesNoEvent : {},
+      {
+        offset: __
+      } = _ref2,
+      restOfFilteredProps = _objectWithoutProperties(_ref2, _excluded2);
+    lineItem = /*#__PURE__*/React.createElement("line", _extends({}, restOfFilteredProps, {
+      x1: x1,
+      y1: y1,
+      x2: x2,
+      y2: y2,
+      fill: "none",
+      key: key
+    }));
+  }
+  return lineItem;
+}
+function HorizontalGridLines(props) {
+  var {
+    x,
+    width,
+    horizontal = true,
+    horizontalPoints
+  } = props;
+  if (!horizontal || !horizontalPoints || !horizontalPoints.length) {
+    return null;
+  }
+  var {
+      xAxisId,
+      yAxisId
+    } = props,
+    otherLineItemProps = _objectWithoutProperties(props, _excluded3);
+  var items = horizontalPoints.map((entry, i) => {
+    var lineItemProps = _objectSpread(_objectSpread({}, otherLineItemProps), {}, {
+      x1: x,
+      y1: entry,
+      x2: x + width,
+      y2: entry,
+      key: "line-".concat(i),
+      index: i
+    });
+    return /*#__PURE__*/React.createElement(LineItem, {
+      key: "line-".concat(i),
+      option: horizontal,
+      lineItemProps: lineItemProps
+    });
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-grid-horizontal"
+  }, items);
+}
+function VerticalGridLines(props) {
+  var {
+    y,
+    height,
+    vertical = true,
+    verticalPoints
+  } = props;
+  if (!vertical || !verticalPoints || !verticalPoints.length) {
+    return null;
+  }
+  var {
+      xAxisId,
+      yAxisId
+    } = props,
+    otherLineItemProps = _objectWithoutProperties(props, _excluded4);
+  var items = verticalPoints.map((entry, i) => {
+    var lineItemProps = _objectSpread(_objectSpread({}, otherLineItemProps), {}, {
+      x1: entry,
+      y1: y,
+      x2: entry,
+      y2: y + height,
+      key: "line-".concat(i),
+      index: i
+    });
+    return /*#__PURE__*/React.createElement(LineItem, {
+      option: vertical,
+      lineItemProps: lineItemProps,
+      key: "line-".concat(i)
+    });
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-grid-vertical"
+  }, items);
+}
+function HorizontalStripes(props) {
+  var {
+    horizontalFill,
+    fillOpacity,
+    x,
+    y,
+    width,
+    height,
+    horizontalPoints,
+    horizontal = true
+  } = props;
+  if (!horizontal || !horizontalFill || !horizontalFill.length || horizontalPoints == null) {
+    return null;
+  }
+  var roundedSortedHorizontalPoints = horizontalPoints.map(e => Math.round(e + y - y)).sort((a, b) => a - b);
+  // Why is this condition `!==` instead of `<=` ?
+  if (y !== roundedSortedHorizontalPoints[0]) {
+    roundedSortedHorizontalPoints.unshift(0);
+  }
+  var items = roundedSortedHorizontalPoints.map((entry, i) => {
+    // Why do we strip only the last stripe if it is invisible, and not all invisible stripes?
+    var nextPoint = roundedSortedHorizontalPoints[i + 1];
+    var lastStripe = nextPoint == null;
+    var lineHeight = lastStripe ? y + height - entry : nextPoint - entry;
+    if (lineHeight <= 0) {
+      return null;
+    }
+    var colorIndex = i % horizontalFill.length;
+    return /*#__PURE__*/React.createElement("rect", {
+      key: "react-".concat(i),
+      y: entry,
+      x: x,
+      height: lineHeight,
+      width: width,
+      stroke: "none",
+      fill: horizontalFill[colorIndex],
+      fillOpacity: fillOpacity,
+      className: "recharts-cartesian-grid-bg"
+    });
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-gridstripes-horizontal"
+  }, items);
+}
+function VerticalStripes(props) {
+  var {
+    vertical = true,
+    verticalFill,
+    fillOpacity,
+    x,
+    y,
+    width,
+    height,
+    verticalPoints
+  } = props;
+  if (!vertical || !verticalFill || !verticalFill.length) {
+    return null;
+  }
+  var roundedSortedVerticalPoints = verticalPoints.map(e => Math.round(e + x - x)).sort((a, b) => a - b);
+  if (x !== roundedSortedVerticalPoints[0]) {
+    roundedSortedVerticalPoints.unshift(0);
+  }
+  var items = roundedSortedVerticalPoints.map((entry, i) => {
+    var nextPoint = roundedSortedVerticalPoints[i + 1];
+    var lastStripe = nextPoint == null;
+    var lineWidth = lastStripe ? x + width - entry : nextPoint - entry;
+    if (lineWidth <= 0) {
+      return null;
+    }
+    var colorIndex = i % verticalFill.length;
+    return /*#__PURE__*/React.createElement("rect", {
+      key: "react-".concat(i),
+      x: entry,
+      y: y,
+      width: lineWidth,
+      height: height,
+      stroke: "none",
+      fill: verticalFill[colorIndex],
+      fillOpacity: fillOpacity,
+      className: "recharts-cartesian-grid-bg"
+    });
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-gridstripes-vertical"
+  }, items);
+}
+var defaultVerticalCoordinatesGenerator = (_ref3, syncWithTicks) => {
+  var {
+    xAxis,
+    width,
+    height,
+    offset
+  } = _ref3;
+  return getCoordinatesOfGrid(getTicks(_objectSpread(_objectSpread(_objectSpread({}, defaultCartesianAxisProps), xAxis), {}, {
+    ticks: getTicksOfAxis(xAxis, true),
+    viewBox: {
+      x: 0,
+      y: 0,
+      width,
+      height
+    }
+  })), offset.left, offset.left + offset.width, syncWithTicks);
+};
+var defaultHorizontalCoordinatesGenerator = (_ref4, syncWithTicks) => {
+  var {
+    yAxis,
+    width,
+    height,
+    offset
+  } = _ref4;
+  return getCoordinatesOfGrid(getTicks(_objectSpread(_objectSpread(_objectSpread({}, defaultCartesianAxisProps), yAxis), {}, {
+    ticks: getTicksOfAxis(yAxis, true),
+    viewBox: {
+      x: 0,
+      y: 0,
+      width,
+      height
+    }
+  })), offset.top, offset.top + offset.height, syncWithTicks);
+};
+export var defaultCartesianGridProps = {
+  horizontal: true,
+  vertical: true,
+  // The ordinates of horizontal grid lines
+  horizontalPoints: [],
+  // The abscissas of vertical grid lines
+  verticalPoints: [],
+  stroke: '#ccc',
+  fill: 'none',
+  // The fill of colors of grid lines
+  verticalFill: [],
+  horizontalFill: [],
+  xAxisId: 0,
+  yAxisId: 0,
+  syncWithTicks: false,
+  zIndex: DefaultZIndexes.grid
+};
+
+/**
+ * Renders background grid with lines and fill colors in a Cartesian chart.
+ *
+ * @consumes CartesianChartContext
+ */
+export function CartesianGrid(props) {
+  var chartWidth = useChartWidth();
+  var chartHeight = useChartHeight();
+  var offset = useOffsetInternal();
+  var propsIncludingDefaults = _objectSpread(_objectSpread({}, resolveDefaultProps(props, defaultCartesianGridProps)), {}, {
+    x: isNumber(props.x) ? props.x : offset.left,
+    y: isNumber(props.y) ? props.y : offset.top,
+    width: isNumber(props.width) ? props.width : offset.width,
+    height: isNumber(props.height) ? props.height : offset.height
+  });
+  var {
+    xAxisId,
+    yAxisId,
+    x,
+    y,
+    width,
+    height,
+    syncWithTicks,
+    horizontalValues,
+    verticalValues
+  } = propsIncludingDefaults;
+  var isPanorama = useIsPanorama();
+  var xAxis = useAppSelector(state => selectAxisPropsNeededForCartesianGridTicksGenerator(state, 'xAxis', xAxisId, isPanorama));
+  var yAxis = useAppSelector(state => selectAxisPropsNeededForCartesianGridTicksGenerator(state, 'yAxis', yAxisId, isPanorama));
+  if (!isPositiveNumber(width) || !isPositiveNumber(height) || !isNumber(x) || !isNumber(y)) {
+    return null;
+  }
+
+  /*
+   * verticalCoordinatesGenerator and horizontalCoordinatesGenerator are defined
+   * outside the propsIncludingDefaults because they were never part of the original props
+   * and they were never passed as a prop down to horizontal/vertical custom elements.
+   * If we add these two to propsIncludingDefaults then we are changing public API.
+   * Not a bad thing per se but also not necessary.
+   */
+  var verticalCoordinatesGenerator = propsIncludingDefaults.verticalCoordinatesGenerator || defaultVerticalCoordinatesGenerator;
+  var horizontalCoordinatesGenerator = propsIncludingDefaults.horizontalCoordinatesGenerator || defaultHorizontalCoordinatesGenerator;
+  var {
+    horizontalPoints,
+    verticalPoints
+  } = propsIncludingDefaults;
+
+  // No horizontal points are specified
+  if ((!horizontalPoints || !horizontalPoints.length) && typeof horizontalCoordinatesGenerator === 'function') {
+    var isHorizontalValues = horizontalValues && horizontalValues.length;
+    var generatorResult = horizontalCoordinatesGenerator({
+      yAxis: yAxis ? _objectSpread(_objectSpread({}, yAxis), {}, {
+        ticks: isHorizontalValues ? horizontalValues : yAxis.ticks
+      }) : undefined,
+      width: chartWidth !== null && chartWidth !== void 0 ? chartWidth : width,
+      height: chartHeight !== null && chartHeight !== void 0 ? chartHeight : height,
+      offset
+    }, isHorizontalValues ? true : syncWithTicks);
+    warn(Array.isArray(generatorResult), "horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof generatorResult, "]"));
+    if (Array.isArray(generatorResult)) {
+      horizontalPoints = generatorResult;
+    }
+  }
+
+  // No vertical points are specified
+  if ((!verticalPoints || !verticalPoints.length) && typeof verticalCoordinatesGenerator === 'function') {
+    var isVerticalValues = verticalValues && verticalValues.length;
+    var _generatorResult = verticalCoordinatesGenerator({
+      xAxis: xAxis ? _objectSpread(_objectSpread({}, xAxis), {}, {
+        ticks: isVerticalValues ? verticalValues : xAxis.ticks
+      }) : undefined,
+      width: chartWidth !== null && chartWidth !== void 0 ? chartWidth : width,
+      height: chartHeight !== null && chartHeight !== void 0 ? chartHeight : height,
+      offset
+    }, isVerticalValues ? true : syncWithTicks);
+    warn(Array.isArray(_generatorResult), "verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof _generatorResult, "]"));
+    if (Array.isArray(_generatorResult)) {
+      verticalPoints = _generatorResult;
+    }
+  }
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: propsIncludingDefaults.zIndex
+  }, /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-grid"
+  }, /*#__PURE__*/React.createElement(Background, {
+    fill: propsIncludingDefaults.fill,
+    fillOpacity: propsIncludingDefaults.fillOpacity,
+    x: propsIncludingDefaults.x,
+    y: propsIncludingDefaults.y,
+    width: propsIncludingDefaults.width,
+    height: propsIncludingDefaults.height,
+    ry: propsIncludingDefaults.ry
+  }), /*#__PURE__*/React.createElement(HorizontalStripes, _extends({}, propsIncludingDefaults, {
+    horizontalPoints: horizontalPoints
+  })), /*#__PURE__*/React.createElement(VerticalStripes, _extends({}, propsIncludingDefaults, {
+    verticalPoints: verticalPoints
+  })), /*#__PURE__*/React.createElement(HorizontalGridLines, _extends({}, propsIncludingDefaults, {
+    offset: offset,
+    horizontalPoints: horizontalPoints,
+    xAxis: xAxis,
+    yAxis: yAxis
+  })), /*#__PURE__*/React.createElement(VerticalGridLines, _extends({}, propsIncludingDefaults, {
+    offset: offset,
+    verticalPoints: verticalPoints,
+    xAxis: xAxis,
+    yAxis: yAxis
+  }))));
+}
+CartesianGrid.displayName = 'CartesianGrid';
Index: node_modules/recharts/es6/cartesian/ErrorBar.js
===================================================================
--- node_modules/recharts/es6/cartesian/ErrorBar.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/ErrorBar.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,257 @@
+var _excluded = ["direction", "width", "dataKey", "isAnimationActive", "animationBegin", "animationDuration", "animationEasing"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview Render a group of error bar
+ */
+import * as React from 'react';
+import { Layer } from '../container/Layer';
+import { ReportErrorBarSettings, useErrorBarContext } from '../context/ErrorBarContext';
+import { useXAxis, useYAxis } from '../hooks';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { useChartLayout } from '../context/chartLayoutContext';
+import { CSSTransitionAnimate } from '../animation/CSSTransitionAnimate';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+
+/**
+ * So usually the direction is decided by the chart layout.
+ * Horizontal layout means error bars are vertical means direction=y
+ * Vertical layout means error bars are horizontal means direction=x
+ *
+ * Except! In Scatter chart, error bars can go both ways.
+ *
+ * So this property is only ever used in Scatter chart, and ignored elsewhere.
+ */
+
+/**
+ * External ErrorBar props, visible for users of the library
+ */
+
+/**
+ * Props after defaults, and required props have been applied.
+ */
+
+function ErrorBarImpl(props) {
+  var {
+      direction,
+      width,
+      dataKey,
+      isAnimationActive,
+      animationBegin,
+      animationDuration,
+      animationEasing
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var svgProps = svgPropertiesNoEvents(others);
+  var {
+    data,
+    dataPointFormatter,
+    xAxisId,
+    yAxisId,
+    errorBarOffset: offset
+  } = useErrorBarContext();
+  var xAxis = useXAxis(xAxisId);
+  var yAxis = useYAxis(yAxisId);
+  if ((xAxis === null || xAxis === void 0 ? void 0 : xAxis.scale) == null || (yAxis === null || yAxis === void 0 ? void 0 : yAxis.scale) == null || data == null) {
+    return null;
+  }
+
+  // ErrorBar requires type number XAxis, why?
+  if (direction === 'x' && xAxis.type !== 'number') {
+    return null;
+  }
+  var errorBars = data.map((entry, dataIndex) => {
+    var {
+      x,
+      y,
+      value,
+      errorVal
+    } = dataPointFormatter(entry, dataKey, direction);
+    if (!errorVal || x == null || y == null) {
+      return null;
+    }
+    var lineCoordinates = [];
+    var lowBound, highBound;
+    if (Array.isArray(errorVal)) {
+      var [low, high] = errorVal;
+      if (low == null || high == null) {
+        return null;
+      }
+      lowBound = low;
+      highBound = high;
+    } else {
+      lowBound = highBound = errorVal;
+    }
+    if (direction === 'x') {
+      // error bar for horizontal charts, the y is fixed, x is a range value
+      var {
+        scale
+      } = xAxis;
+      var yMid = y + offset;
+      var yMin = yMid + width;
+      var yMax = yMid - width;
+      var xMin = scale.map(value - lowBound);
+      var xMax = scale.map(value + highBound);
+      if (xMin != null && xMax != null) {
+        // the right line of |--|
+        lineCoordinates.push({
+          x1: xMax,
+          y1: yMin,
+          x2: xMax,
+          y2: yMax
+        });
+        // the middle line of |--|
+        lineCoordinates.push({
+          x1: xMin,
+          y1: yMid,
+          x2: xMax,
+          y2: yMid
+        });
+        // the left line of |--|
+        lineCoordinates.push({
+          x1: xMin,
+          y1: yMin,
+          x2: xMin,
+          y2: yMax
+        });
+      }
+    } else if (direction === 'y') {
+      // error bar for horizontal charts, the x is fixed, y is a range value
+      var {
+        scale: _scale
+      } = yAxis;
+      var xMid = x + offset;
+      var _xMin = xMid - width;
+      var _xMax = xMid + width;
+      var _yMin = _scale.map(value - lowBound);
+      var _yMax = _scale.map(value + highBound);
+      if (_yMin != null && _yMax != null) {
+        // the top line
+        lineCoordinates.push({
+          x1: _xMin,
+          y1: _yMax,
+          x2: _xMax,
+          y2: _yMax
+        });
+        // the middle line
+        lineCoordinates.push({
+          x1: xMid,
+          y1: _yMin,
+          x2: xMid,
+          y2: _yMax
+        });
+        // the bottom line
+        lineCoordinates.push({
+          x1: _xMin,
+          y1: _yMin,
+          x2: _xMax,
+          y2: _yMin
+        });
+      }
+    }
+    var scaleDirection = direction === 'x' ? 'scaleX' : 'scaleY';
+    var transformOrigin = "".concat(x + offset, "px ").concat(y + offset, "px");
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      className: "recharts-errorBar",
+      key: "bar-".concat(x, "-").concat(y, "-").concat(value, "-").concat(dataIndex)
+    }, svgProps), lineCoordinates.map((c, lineIndex) => {
+      var lineStyle = isAnimationActive ? {
+        transformOrigin
+      } : undefined;
+      return /*#__PURE__*/React.createElement(CSSTransitionAnimate, {
+        animationId: "error-bar-".concat(direction, "_").concat(c.x1, "-").concat(c.x2, "-").concat(c.y1, "-").concat(c.y2),
+        from: "".concat(scaleDirection, "(0)"),
+        to: "".concat(scaleDirection, "(1)"),
+        attributeName: "transform",
+        begin: animationBegin,
+        easing: animationEasing,
+        isActive: isAnimationActive,
+        duration: animationDuration,
+        key: "errorbar-".concat(dataIndex, "-").concat(c.x1, "-").concat(c.y1, "-").concat(c.x2, "-").concat(c.y2, "-").concat(lineIndex)
+      }, style => /*#__PURE__*/React.createElement("line", _extends({}, c, {
+        style: _objectSpread(_objectSpread({}, lineStyle), style)
+      })));
+    }));
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-errorBars"
+  }, errorBars);
+}
+function useErrorBarDirection(directionFromProps) {
+  var layout = useChartLayout();
+  if (directionFromProps != null) {
+    return directionFromProps;
+  }
+  if (layout != null) {
+    return layout === 'horizontal' ? 'y' : 'x';
+  }
+  return 'x';
+}
+export var errorBarDefaultProps = {
+  stroke: 'black',
+  strokeWidth: 1.5,
+  width: 5,
+  offset: 0,
+  isAnimationActive: true,
+  animationBegin: 0,
+  animationDuration: 400,
+  animationEasing: 'ease-in-out',
+  zIndex: DefaultZIndexes.line
+};
+
+/**
+ * ErrorBar renders whiskers to represent error margins on a chart.
+ *
+ * It must be a child of a graphical element.
+ *
+ * ErrorBar expects data in one of the following forms:
+ * - Symmetric error bars: a single error value representing both lower and upper bounds.
+ * - Asymmetric error bars: an array of two values representing lower and upper bounds separately. First value is the lower bound, second value is the upper bound.
+ *
+ * The values provided are relative to the main data value.
+ * For example, if the main data value is 10 and the error value is 2,
+ * the error bar will extend from 8 to 12 for symmetric error bars.
+ *
+ * In other words, what ErrorBar will render is:
+ * - For symmetric error bars: [value - errorVal, value + errorVal]
+ * - For asymmetric error bars: [value - errorVal[0], value + errorVal[1]]
+ *
+ * In stacked or ranged Bar charts, ErrorBar will use the higher data value
+ * as the reference point for calculating the error bar positions.
+ *
+ * @consumes ErrorBarContext
+ */
+export function ErrorBar(outsideProps) {
+  var realDirection = useErrorBarDirection(outsideProps.direction);
+  var props = resolveDefaultProps(outsideProps, errorBarDefaultProps);
+  var {
+    width,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    zIndex
+  } = props;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportErrorBarSettings, {
+    dataKey: props.dataKey,
+    direction: realDirection
+  }), /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: zIndex
+  }, /*#__PURE__*/React.createElement(ErrorBarImpl, _extends({}, props, {
+    direction: realDirection,
+    width: width,
+    isAnimationActive: isAnimationActive,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing
+  }))));
+}
+ErrorBar.displayName = 'ErrorBar';
Index: node_modules/recharts/es6/cartesian/Funnel.js
===================================================================
--- node_modules/recharts/es6/cartesian/Funnel.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/Funnel.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,473 @@
+var _excluded = ["onMouseEnter", "onClick", "onMouseLeave", "shape", "activeShape"],
+  _excluded2 = ["id"],
+  _excluded3 = ["stroke", "fill", "legendType", "hide", "isAnimationActive", "animationBegin", "animationDuration", "animationEasing", "nameKey", "lastShapeType", "id"],
+  _excluded4 = ["id"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { useCallback, useMemo, useRef, useState } from 'react';
+import omit from 'es-toolkit/compat/omit';
+import { clsx } from 'clsx';
+import { selectActiveIndex } from '../state/selectors/selectors';
+import { useAppSelector } from '../state/hooks';
+import { Layer } from '../container/Layer';
+import { CartesianLabelListContextProvider, LabelListFromLabelProp } from '../component/LabelList';
+import { getPercentValue, interpolate } from '../util/DataUtils';
+import { getValueByDataKey } from '../util/ChartUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { FunnelTrapezoid } from '../util/FunnelUtils';
+import { useMouseClickItemDispatch, useMouseEnterItemDispatch, useMouseLeaveItemDispatch } from '../context/tooltipContext';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { selectFunnelTrapezoids } from '../state/selectors/funnelSelectors';
+import { findAllByType } from '../util/ReactUtils';
+import { Cell } from '../component/Cell';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { usePlotArea } from '../hooks';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+import { useAnimationId } from '../util/useAnimationId';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+var SetFunnelTooltipEntrySettings = /*#__PURE__*/React.memo(_ref => {
+  var {
+    dataKey,
+    nameKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType,
+    data,
+    trapezoids,
+    id
+  } = _ref;
+  var tooltipEntrySettings = {
+    dataDefinedOnItem: data,
+    getPosition: index => {
+      var _trapezoids$Number;
+      return (_trapezoids$Number = trapezoids[Number(index)]) === null || _trapezoids$Number === void 0 ? void 0 : _trapezoids$Number.tooltipPosition;
+    },
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      name,
+      nameKey,
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '',
+      // Funnel does not have unit, why?
+      graphicalItemId: id
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+function FunnelLabelListProvider(_ref2) {
+  var {
+    showLabels,
+    trapezoids,
+    children
+  } = _ref2;
+  var labelListEntries = useMemo(() => {
+    if (!showLabels) {
+      return undefined;
+    }
+    return trapezoids === null || trapezoids === void 0 ? void 0 : trapezoids.map(entry => {
+      var viewBox = entry.labelViewBox;
+      return _objectSpread(_objectSpread({}, viewBox), {}, {
+        value: entry.name,
+        payload: entry.payload,
+        parentViewBox: entry.parentViewBox,
+        viewBox,
+        fill: entry.fill
+      });
+    });
+  }, [showLabels, trapezoids]);
+  return /*#__PURE__*/React.createElement(CartesianLabelListContextProvider, {
+    value: labelListEntries
+  }, children);
+}
+function FunnelTrapezoids(props) {
+  var {
+    trapezoids,
+    allOtherFunnelProps
+  } = props;
+  var activeItemIndex = useAppSelector(state => selectActiveIndex(state, 'item', state.tooltip.settings.trigger, undefined));
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps,
+      shape,
+      activeShape
+    } = allOtherFunnelProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherFunnelProps, _excluded);
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherFunnelProps.dataKey, allOtherFunnelProps.id);
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherFunnelProps.dataKey, allOtherFunnelProps.id);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, trapezoids.map((entry, i) => {
+    var isActiveIndex = Boolean(activeShape) && activeItemIndex === String(i);
+    var trapezoidOptions = isActiveIndex ? activeShape : shape;
+    var _entry$option$isActiv = _objectSpread(_objectSpread({}, entry), {}, {
+        option: trapezoidOptions,
+        isActive: isActiveIndex,
+        stroke: entry.stroke
+      }),
+      {
+        id
+      } = _entry$option$isActiv,
+      trapezoidProps = _objectWithoutProperties(_entry$option$isActiv, _excluded2);
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      key: "trapezoid-".concat(entry === null || entry === void 0 ? void 0 : entry.x, "-").concat(entry === null || entry === void 0 ? void 0 : entry.y, "-").concat(entry === null || entry === void 0 ? void 0 : entry.name, "-").concat(entry === null || entry === void 0 ? void 0 : entry.value),
+      className: "recharts-funnel-trapezoid"
+    }, adaptEventsOfChild(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error the types need a bit of attention
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onClick: onClickFromContext(entry, i)
+    }), /*#__PURE__*/React.createElement(FunnelTrapezoid, trapezoidProps));
+  }));
+}
+function TrapezoidsWithAnimation(_ref3) {
+  var {
+    previousTrapezoidsRef,
+    props
+  } = _ref3;
+  var {
+    trapezoids,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevTrapezoids = previousTrapezoidsRef.current;
+  var [isAnimating, setIsAnimating] = useState(false);
+  var showLabels = !isAnimating;
+  var animationId = useAnimationId(trapezoids, 'recharts-funnel-');
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(FunnelLabelListProvider, {
+    showLabels: showLabels,
+    trapezoids: trapezoids
+  }, /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    animationId: animationId,
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    key: animationId,
+    onAnimationStart: handleAnimationStart,
+    onAnimationEnd: handleAnimationEnd
+  }, t => {
+    var stepData = t === 1 ? trapezoids : trapezoids.map((entry, index) => {
+      var prev = prevTrapezoids && prevTrapezoids[index];
+      if (prev) {
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: interpolate(prev.x, entry.x, t),
+          y: interpolate(prev.y, entry.y, t),
+          upperWidth: interpolate(prev.upperWidth, entry.upperWidth, t),
+          lowerWidth: interpolate(prev.lowerWidth, entry.lowerWidth, t),
+          height: interpolate(prev.height, entry.height, t)
+        });
+      }
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        x: interpolate(entry.x + entry.upperWidth / 2, entry.x, t),
+        y: interpolate(entry.y + entry.height / 2, entry.y, t),
+        upperWidth: interpolate(0, entry.upperWidth, t),
+        lowerWidth: interpolate(0, entry.lowerWidth, t),
+        height: interpolate(0, entry.height, t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousTrapezoidsRef.current = stepData;
+    }
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(FunnelTrapezoids, {
+      trapezoids: stepData,
+      allOtherFunnelProps: props
+    }));
+  }), /*#__PURE__*/React.createElement(LabelListFromLabelProp, {
+    label: props.label
+  }), props.children);
+}
+function RenderTrapezoids(props) {
+  var previousTrapezoidsRef = useRef(undefined);
+  return /*#__PURE__*/React.createElement(TrapezoidsWithAnimation, {
+    props: props,
+    previousTrapezoidsRef: previousTrapezoidsRef
+  });
+}
+var getRealWidthHeight = (customWidth, offset) => {
+  var {
+    width,
+    height,
+    left,
+    top
+  } = offset;
+  var realWidth = getPercentValue(customWidth, width, width);
+  return {
+    realWidth,
+    realHeight: height,
+    offsetX: left,
+    offsetY: top
+  };
+};
+export var defaultFunnelProps = {
+  animationBegin: 400,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  fill: '#808080',
+  hide: false,
+  isAnimationActive: 'auto',
+  lastShapeType: 'triangle',
+  legendType: 'rect',
+  nameKey: 'name',
+  reversed: false,
+  stroke: '#fff'
+};
+function FunnelImpl(props) {
+  var plotArea = usePlotArea();
+  var {
+      stroke,
+      fill,
+      legendType,
+      hide,
+      isAnimationActive,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      nameKey,
+      lastShapeType,
+      id
+    } = props,
+    everythingElse = _objectWithoutProperties(props, _excluded3);
+  var presentationProps = svgPropertiesNoEvents(props);
+  var cells = findAllByType(props.children, Cell);
+  var funnelSettings = useMemo(() => ({
+    dataKey: props.dataKey,
+    nameKey,
+    data: props.data,
+    tooltipType: props.tooltipType,
+    lastShapeType,
+    reversed: props.reversed,
+    customWidth: props.width,
+    cells,
+    presentationProps,
+    id
+  }), [props.dataKey, nameKey, props.data, props.tooltipType, lastShapeType, props.reversed, props.width, cells, presentationProps, id]);
+  var trapezoids = useAppSelector(state => selectFunnelTrapezoids(state, funnelSettings));
+  if (hide || !trapezoids || !trapezoids.length || !plotArea) {
+    return null;
+  }
+  var {
+    height,
+    width
+  } = plotArea;
+  var layerClass = clsx('recharts-trapezoids', props.className);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetFunnelTooltipEntrySettings, {
+    dataKey: props.dataKey,
+    nameKey: props.nameKey,
+    stroke: props.stroke,
+    strokeWidth: props.strokeWidth,
+    fill: props.fill,
+    name: props.name,
+    hide: props.hide,
+    tooltipType: props.tooltipType,
+    data: props.data,
+    trapezoids: trapezoids,
+    id: id
+  }), /*#__PURE__*/React.createElement(Layer, {
+    className: layerClass
+  }, /*#__PURE__*/React.createElement(RenderTrapezoids, _extends({}, everythingElse, {
+    id: id,
+    stroke: stroke,
+    fill: fill,
+    nameKey: nameKey,
+    lastShapeType: lastShapeType,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive,
+    hide: hide,
+    legendType: legendType,
+    height: height,
+    width: width,
+    trapezoids: trapezoids
+  }))));
+}
+export function computeFunnelTrapezoids(_ref4) {
+  var {
+    dataKey,
+    nameKey,
+    displayedData,
+    tooltipType,
+    lastShapeType,
+    reversed,
+    offset,
+    customWidth,
+    graphicalItemId
+  } = _ref4;
+  var {
+    realHeight,
+    realWidth,
+    offsetX,
+    offsetY
+  } = getRealWidthHeight(customWidth, offset);
+  var values = displayedData.map(entry => {
+    var val = getValueByDataKey(entry, dataKey, 0);
+    return typeof val === 'number' ? val : 0;
+  });
+  var maxValue = Math.max.apply(null, values);
+  var len = displayedData.length;
+  var rowHeight = realHeight / len;
+  var parentViewBox = {
+    x: offset.left,
+    y: offset.top,
+    width: offset.width,
+    height: offset.height
+  };
+  var trapezoids = displayedData.map((entry, i) => {
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    var rawVal = getValueByDataKey(entry, dataKey, 0);
+    var name = String(getValueByDataKey(entry, nameKey, i));
+    var val = rawVal;
+    var nextVal;
+    if (i !== len - 1) {
+      var nextDataValue = getValueByDataKey(displayedData[i + 1], dataKey, 0);
+      if (typeof nextDataValue === 'number') {
+        nextVal = nextDataValue;
+      } else if (Array.isArray(nextDataValue)) {
+        var [first, second] = nextDataValue;
+        if (typeof first === 'number') {
+          val = first;
+        }
+        if (typeof second === 'number') {
+          nextVal = second;
+        }
+      }
+    } else if (rawVal instanceof Array && rawVal.length === 2) {
+      var [_first, _second] = rawVal;
+      if (typeof _first === 'number') {
+        val = _first;
+      }
+      if (typeof _second === 'number') {
+        nextVal = _second;
+      }
+    } else if (lastShapeType === 'rectangle') {
+      nextVal = val;
+    } else {
+      nextVal = 0;
+    }
+
+    // @ts-expect-error this is a problem if we have ranged values because `val` can be an array
+    var x = (maxValue - val) * realWidth / (2 * maxValue) + offsetX;
+    var y = rowHeight * i + offsetY;
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    var upperWidth = val / maxValue * realWidth;
+    // @ts-expect-error nextVal could be an array
+    var lowerWidth = nextVal / maxValue * realWidth;
+    var tooltipPayload = [{
+      name,
+      value: val,
+      payload: entry,
+      dataKey,
+      type: tooltipType,
+      graphicalItemId
+    }];
+    var tooltipPosition = {
+      x: x + upperWidth / 2,
+      y: y + rowHeight / 2
+    };
+    var trapezoidViewBox = {
+      x,
+      y,
+      upperWidth,
+      lowerWidth,
+      width: Math.max(upperWidth, lowerWidth),
+      height: rowHeight
+    };
+    return _objectSpread(_objectSpread(_objectSpread({}, trapezoidViewBox), {}, {
+      name,
+      val,
+      tooltipPayload,
+      tooltipPosition
+    }, entry != null && typeof entry === 'object' ? omit(entry, ['width']) : {}), {}, {
+      payload: entry,
+      parentViewBox,
+      labelViewBox: trapezoidViewBox
+    });
+  });
+  if (reversed) {
+    trapezoids = trapezoids.map((entry, index) => {
+      var reversedViewBox = {
+        x: entry.x - (entry.lowerWidth - entry.upperWidth) / 2,
+        y: entry.y - index * rowHeight + (len - 1 - index) * rowHeight,
+        upperWidth: entry.lowerWidth,
+        lowerWidth: entry.upperWidth,
+        width: Math.max(entry.lowerWidth, entry.upperWidth),
+        height: rowHeight
+      };
+      return _objectSpread(_objectSpread(_objectSpread({}, entry), reversedViewBox), {}, {
+        tooltipPosition: _objectSpread(_objectSpread({}, entry.tooltipPosition), {}, {
+          y: entry.y - index * rowHeight + (len - 1 - index) * rowHeight + rowHeight / 2
+        }),
+        labelViewBox: reversedViewBox
+      });
+    });
+  }
+  return trapezoids;
+}
+
+/**
+ * @consumes CartesianViewBoxContext
+ * @provides LabelListContext
+ * @provides CellReader
+ */
+export function Funnel(outsideProps) {
+  var _resolveDefaultProps = resolveDefaultProps(outsideProps, defaultFunnelProps),
+    {
+      id: externalId
+    } = _resolveDefaultProps,
+    props = _objectWithoutProperties(_resolveDefaultProps, _excluded4);
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: externalId,
+    type: "funnel"
+  }, id => /*#__PURE__*/React.createElement(FunnelImpl, _extends({}, props, {
+    id: id
+  })));
+}
+Funnel.displayName = 'Funnel';
Index: node_modules/recharts/es6/cartesian/GraphicalItemClipPath.js
===================================================================
--- node_modules/recharts/es6/cartesian/GraphicalItemClipPath.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/GraphicalItemClipPath.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,47 @@
+import * as React from 'react';
+import { useAppSelector } from '../state/hooks';
+import { implicitXAxis, implicitYAxis, selectXAxisSettings, selectYAxisSettings } from '../state/selectors/axisSelectors';
+import { usePlotArea } from '../hooks';
+export function useNeedsClip(xAxisId, yAxisId) {
+  var _xAxis$allowDataOverf, _yAxis$allowDataOverf;
+  var xAxis = useAppSelector(state => selectXAxisSettings(state, xAxisId));
+  var yAxis = useAppSelector(state => selectYAxisSettings(state, yAxisId));
+  var needClipX = (_xAxis$allowDataOverf = xAxis === null || xAxis === void 0 ? void 0 : xAxis.allowDataOverflow) !== null && _xAxis$allowDataOverf !== void 0 ? _xAxis$allowDataOverf : implicitXAxis.allowDataOverflow;
+  var needClipY = (_yAxis$allowDataOverf = yAxis === null || yAxis === void 0 ? void 0 : yAxis.allowDataOverflow) !== null && _yAxis$allowDataOverf !== void 0 ? _yAxis$allowDataOverf : implicitYAxis.allowDataOverflow;
+  var needClip = needClipX || needClipY;
+  return {
+    needClip,
+    needClipX,
+    needClipY
+  };
+}
+export function GraphicalItemClipPath(_ref) {
+  var {
+    xAxisId,
+    yAxisId,
+    clipPathId
+  } = _ref;
+  var plotArea = usePlotArea();
+  var {
+    needClipX,
+    needClipY,
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  if (!needClip || !plotArea) {
+    return null;
+  }
+  var {
+    x,
+    y,
+    width,
+    height
+  } = plotArea;
+  return /*#__PURE__*/React.createElement("clipPath", {
+    id: "clipPath-".concat(clipPathId)
+  }, /*#__PURE__*/React.createElement("rect", {
+    x: needClipX ? x : x - width / 2,
+    y: needClipY ? y : y - height / 2,
+    width: needClipX ? width : width * 2,
+    height: needClipY ? height : height * 2
+  }));
+}
Index: node_modules/recharts/es6/cartesian/Line.js
===================================================================
--- node_modules/recharts/es6/cartesian/Line.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/Line.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,686 @@
+var _excluded = ["id"],
+  _excluded2 = ["type", "layout", "connectNulls", "needClip", "shape"],
+  _excluded3 = ["activeDot", "animateNewValues", "animationBegin", "animationDuration", "animationEasing", "connectNulls", "dot", "hide", "isAnimationActive", "label", "legendType", "xAxisId", "yAxisId", "id"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { Component, useCallback, useMemo, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { CartesianLabelListContextProvider, LabelListFromLabelProp } from '../component/LabelList';
+import { Dots } from '../component/Dots';
+import { interpolate, isNullish, noop } from '../util/DataUtils';
+import { isClipDot } from '../util/ReactUtils';
+import { getCateCoordinateOfLine, getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
+import { ActivePoints } from '../component/ActivePoints';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { SetErrorBarContext } from '../context/ErrorBarContext';
+import { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';
+import { useChartLayout } from '../context/chartLayoutContext';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { selectLinePoints } from '../state/selectors/lineSelectors';
+import { useAppSelector } from '../state/hooks';
+import { SetLegendPayload } from '../state/SetLegendPayload';
+import { useAnimationId } from '../util/useAnimationId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { usePlotArea } from '../hooks';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { getRadiusAndStrokeWidthFromDot } from '../util/getRadiusAndStrokeWidthFromDot';
+import { Shape } from '../util/ActiveShapeUtils';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { propsAreEqual } from '../util/propsAreEqual';
+
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+
+var computeLegendPayloadFromAreaData = props => {
+  var {
+    dataKey,
+    name,
+    stroke,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: stroke,
+    value: getTooltipNameProp(name, dataKey),
+    payload: props
+  }];
+};
+var SetLineTooltipEntrySettings = /*#__PURE__*/React.memo(_ref => {
+  var {
+    dataKey,
+    data,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    unit,
+    tooltipType,
+    id
+  } = _ref;
+  var tooltipEntrySettings = {
+    dataDefinedOnItem: data,
+    getPosition: noop,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey: undefined,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: stroke,
+      unit,
+      graphicalItemId: id
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+var generateSimpleStrokeDasharray = (totalLength, length) => {
+  return "".concat(length, "px ").concat(totalLength - length, "px");
+};
+function repeat(lines, count) {
+  var linesUnit = lines.length % 2 !== 0 ? [...lines, 0] : lines;
+  var result = [];
+  for (var i = 0; i < count; ++i) {
+    result = [...result, ...linesUnit];
+  }
+  return result;
+}
+var getStrokeDasharray = (length, totalLength, lines) => {
+  var lineLength = lines.reduce((pre, next) => pre + next);
+
+  // if lineLength is 0 return the default when no strokeDasharray is provided
+  if (!lineLength) {
+    return generateSimpleStrokeDasharray(totalLength, length);
+  }
+  var count = Math.floor(length / lineLength);
+  var remainLength = length % lineLength;
+  var restLength = totalLength - length;
+  var remainLines = [];
+  for (var i = 0, sum = 0; i < lines.length; sum += (_lines$i = lines[i]) !== null && _lines$i !== void 0 ? _lines$i : 0, ++i) {
+    var _lines$i;
+    var lineValue = lines[i];
+    if (lineValue != null && sum + lineValue > remainLength) {
+      remainLines = [...lines.slice(0, i), remainLength - sum];
+      break;
+    }
+  }
+  var emptyLines = remainLines.length % 2 === 0 ? [0, restLength] : [restLength];
+  return [...repeat(lines, count), ...remainLines, ...emptyLines].map(line => "".concat(line, "px")).join(', ');
+};
+function LineDotsWrapper(_ref2) {
+  var {
+    clipPathId,
+    points,
+    props
+  } = _ref2;
+  var {
+    dot,
+    dataKey,
+    needClip
+  } = props;
+
+  /*
+   * Exclude ID from the props passed to the Dots component
+   * because then the ID would be applied to multiple dots, and it would no longer be unique.
+   */
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded);
+  var lineProps = svgPropertiesNoEvents(propsWithoutId);
+  return /*#__PURE__*/React.createElement(Dots, {
+    points: points,
+    dot: dot,
+    className: "recharts-line-dots",
+    dotClassName: "recharts-line-dot",
+    dataKey: dataKey,
+    baseProps: lineProps,
+    needClip: needClip,
+    clipPathId: clipPathId
+  });
+}
+function LineLabelListProvider(_ref3) {
+  var {
+    showLabels,
+    children,
+    points
+  } = _ref3;
+  var labelListEntries = useMemo(() => {
+    return points === null || points === void 0 ? void 0 : points.map(point => {
+      var _point$x, _point$y;
+      var viewBox = {
+        x: (_point$x = point.x) !== null && _point$x !== void 0 ? _point$x : 0,
+        y: (_point$y = point.y) !== null && _point$y !== void 0 ? _point$y : 0,
+        width: 0,
+        lowerWidth: 0,
+        upperWidth: 0,
+        height: 0
+      };
+      return _objectSpread(_objectSpread({}, viewBox), {}, {
+        value: point.value,
+        payload: point.payload,
+        viewBox,
+        /*
+         * Line is not passing parentViewBox to the LabelList so the labels can escape - looks like a bug, should we pass parentViewBox?
+         * Or should this just be the root chart viewBox?
+         */
+        parentViewBox: undefined,
+        fill: undefined
+      });
+    });
+  }, [points]);
+  return /*#__PURE__*/React.createElement(CartesianLabelListContextProvider, {
+    value: showLabels ? labelListEntries : undefined
+  }, children);
+}
+function StaticCurve(_ref4) {
+  var {
+    clipPathId,
+    pathRef,
+    points,
+    strokeDasharray,
+    props
+  } = _ref4;
+  var {
+      type,
+      layout,
+      connectNulls,
+      needClip,
+      shape
+    } = props,
+    others = _objectWithoutProperties(props, _excluded2);
+  var curveProps = _objectSpread(_objectSpread({}, svgPropertiesAndEvents(others)), {}, {
+    fill: 'none',
+    className: 'recharts-line-curve',
+    clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : undefined,
+    points,
+    type,
+    layout,
+    connectNulls,
+    strokeDasharray: strokeDasharray !== null && strokeDasharray !== void 0 ? strokeDasharray : props.strokeDasharray
+  });
+  return /*#__PURE__*/React.createElement(React.Fragment, null, (points === null || points === void 0 ? void 0 : points.length) > 1 && /*#__PURE__*/React.createElement(Shape, _extends({
+    shapeType: "curve",
+    option: shape
+  }, curveProps, {
+    pathRef: pathRef
+  })), /*#__PURE__*/React.createElement(LineDotsWrapper, {
+    points: points,
+    clipPathId: clipPathId,
+    props: props
+  }));
+}
+function getTotalLength(mainCurve) {
+  try {
+    return mainCurve && mainCurve.getTotalLength && mainCurve.getTotalLength() || 0;
+  } catch (_unused) {
+    return 0;
+  }
+}
+function CurveWithAnimation(_ref5) {
+  var {
+    clipPathId,
+    props,
+    pathRef,
+    previousPointsRef,
+    longestAnimatedLengthRef
+  } = _ref5;
+  var {
+    points,
+    strokeDasharray,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    animateNewValues,
+    width,
+    height,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevPoints = previousPointsRef.current;
+  var animationId = useAnimationId(points, 'recharts-line-');
+  var animationIdRef = useRef(animationId);
+  var [isAnimating, setIsAnimating] = useState(false);
+  var showLabels = !isAnimating;
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  var totalLength = getTotalLength(pathRef.current);
+  /*
+   * Here we want to detect if the length animation has been interrupted.
+   * For that we keep a reference to the furthest length that has been animated.
+   *
+   * And then, to keep things smooth, we add to it the current length that is being animated right now.
+   *
+   * If we did Math.max then it makes the length animation "pause" but we want to keep it smooth
+   * so in case we have some "leftover" length from the previous animation we add it to the current length.
+   *
+   * This is not perfect because the animation changes speed due to easing. The default easing is 'ease' which is not linear
+   * and makes it stand out. But it's good enough I suppose.
+   * If we want to fix it then we need to keep track of multiple animations and their easing and timings.
+   *
+   * If you want to see this in action, try to change the dataKey of the line chart while the initial animation is running.
+   * The Line begins with zero length and slowly grows to the full length. While this growth is in progress,
+   * change the dataKey and the Line will continue growing from where it has grown so far.
+   *
+   * This is for the case when new animation triggers. When that happens we get new points, everything re-renders,
+   * and we get fresh new state in this component and use the ref stored above.
+   *
+   * In case when we get render without new animation - for example when opacity changes, or color changes,
+   * then the animationId remains the same, and we do not update the starting point.
+   * See https://github.com/recharts/recharts/issues/6044
+   */
+  var startingPointRef = useRef(0);
+  if (animationIdRef.current !== animationId) {
+    startingPointRef.current = longestAnimatedLengthRef.current;
+    animationIdRef.current = animationId;
+  }
+  var startingPoint = startingPointRef.current;
+  return /*#__PURE__*/React.createElement(LineLabelListProvider, {
+    points: points,
+    showLabels: showLabels
+  }, props.children, /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    animationId: animationId,
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    var lengthInterpolated = interpolate(startingPoint, totalLength + startingPoint, t);
+    var curLength = Math.min(lengthInterpolated, totalLength);
+    var currentStrokeDasharray;
+    if (isAnimationActive) {
+      if (strokeDasharray) {
+        var lines = "".concat(strokeDasharray).split(/[,\s]+/gim).map(num => parseFloat(num));
+        currentStrokeDasharray = getStrokeDasharray(curLength, totalLength, lines);
+      } else {
+        currentStrokeDasharray = generateSimpleStrokeDasharray(totalLength, curLength);
+      }
+    } else {
+      currentStrokeDasharray = strokeDasharray == null ? undefined : String(strokeDasharray);
+    }
+
+    /*
+     * Here it is important to wait a little bit with updating the previousPointsRef
+     * before the animation has a time to initialize.
+     * If we set the previous pointsRef immediately, we set it before the Legend height it calculated
+     * and before pathRef is set.
+     * If that happens, the Line will re-render again after Legend had reported its height
+     * which will start a new animation with the previous points as the starting point
+     * which gives the effect of the Line animating slightly upwards (where the animation distance equals the Legend height).
+     * Waiting for t > 0 is indirect but good enough to ensure that the Legend height is calculated and animation works properly.
+     *
+     * Total length similarly is calculated from the pathRef. We should not update the previousPointsRef
+     * before the pathRef is set, otherwise we will have a wrong total length.
+     */
+    if (t > 0 && totalLength > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = points;
+      /*
+       * totalLength is set from a ref and is not updated in the first tick of the animation.
+       * It defaults to zero which is exactly what we want here because we want to grow from zero,
+       * however the same happens when the data change.
+       *
+       * In that case we want to remember the previous length and continue from there, and only animate the shape.
+       *
+       * Therefore the totalLength > 0 check.
+       *
+       * The Animate is about to fire handleAnimationStart which will update the state
+       * and cause a re-render and read a new proper totalLength which will be used in the next tick
+       * and update the longestAnimatedLengthRef.
+       *
+       * Why Math.max? Sometimes the curve goes through a smaller length than previously recorded.
+       * If we just set it to curLength, then the next animation would start from a smaller length
+       * which looks weird. So we keep the longest length ever reached and then animate from there.
+       */
+      // eslint-disable-next-line no-param-reassign
+      longestAnimatedLengthRef.current = Math.max(longestAnimatedLengthRef.current, curLength);
+    }
+    if (prevPoints) {
+      var prevPointsDiffFactor = prevPoints.length / points.length;
+      var stepData = t === 1 ? points : points.map((entry, index) => {
+        var prevPointIndex = Math.floor(index * prevPointsDiffFactor);
+        if (prevPoints[prevPointIndex]) {
+          var prev = prevPoints[prevPointIndex];
+          return _objectSpread(_objectSpread({}, entry), {}, {
+            x: interpolate(prev.x, entry.x, t),
+            y: interpolate(prev.y, entry.y, t)
+          });
+        }
+
+        // magic number of faking previous x and y location
+        if (animateNewValues) {
+          return _objectSpread(_objectSpread({}, entry), {}, {
+            x: interpolate(width * 2, entry.x, t),
+            y: interpolate(height / 2, entry.y, t)
+          });
+        }
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: entry.x,
+          y: entry.y
+        });
+      });
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = stepData;
+      return /*#__PURE__*/React.createElement(StaticCurve, {
+        props: props,
+        points: stepData,
+        clipPathId: clipPathId,
+        pathRef: pathRef,
+        strokeDasharray: currentStrokeDasharray
+      });
+    }
+    return /*#__PURE__*/React.createElement(StaticCurve, {
+      props: props,
+      points: points,
+      clipPathId: clipPathId,
+      pathRef: pathRef,
+      strokeDasharray: currentStrokeDasharray
+    });
+  }), /*#__PURE__*/React.createElement(LabelListFromLabelProp, {
+    label: props.label
+  }));
+}
+function RenderCurve(_ref6) {
+  var {
+    clipPathId,
+    props
+  } = _ref6;
+  var previousPointsRef = useRef(null);
+  var longestAnimatedLengthRef = useRef(0);
+  var pathRef = useRef(null);
+  return /*#__PURE__*/React.createElement(CurveWithAnimation, {
+    props: props,
+    clipPathId: clipPathId,
+    previousPointsRef: previousPointsRef,
+    longestAnimatedLengthRef: longestAnimatedLengthRef,
+    pathRef: pathRef
+  });
+}
+var errorBarDataPointFormatter = (dataPoint, dataKey) => {
+  var _dataPoint$x, _dataPoint$y;
+  return {
+    x: (_dataPoint$x = dataPoint.x) !== null && _dataPoint$x !== void 0 ? _dataPoint$x : undefined,
+    y: (_dataPoint$y = dataPoint.y) !== null && _dataPoint$y !== void 0 ? _dataPoint$y : undefined,
+    value: dataPoint.value,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    errorVal: getValueByDataKey(dataPoint.payload, dataKey)
+  };
+};
+
+// eslint-disable-next-line react/prefer-stateless-function
+class LineWithState extends Component {
+  render() {
+    var {
+      hide,
+      dot,
+      points,
+      className,
+      xAxisId,
+      yAxisId,
+      top,
+      left,
+      width,
+      height,
+      id,
+      needClip,
+      zIndex
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = clsx('recharts-line', className);
+    var clipPathId = id;
+    var {
+      r,
+      strokeWidth
+    } = getRadiusAndStrokeWidthFromDot(dot);
+    var clipDot = isClipDot(dot);
+    var dotSize = r * 2 + strokeWidth;
+    var activePointsClipPath = needClip ? "url(#clipPath-".concat(clipDot ? '' : 'dots-').concat(clipPathId, ")") : undefined;
+    return /*#__PURE__*/React.createElement(ZIndexLayer, {
+      zIndex: zIndex
+    }, /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass
+    }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(GraphicalItemClipPath, {
+      clipPathId: clipPathId,
+      xAxisId: xAxisId,
+      yAxisId: yAxisId
+    }), !clipDot && /*#__PURE__*/React.createElement("clipPath", {
+      id: "clipPath-dots-".concat(clipPathId)
+    }, /*#__PURE__*/React.createElement("rect", {
+      x: left - dotSize / 2,
+      y: top - dotSize / 2,
+      width: width + dotSize,
+      height: height + dotSize
+    }))), /*#__PURE__*/React.createElement(SetErrorBarContext, {
+      xAxisId: xAxisId,
+      yAxisId: yAxisId,
+      data: points,
+      dataPointFormatter: errorBarDataPointFormatter,
+      errorBarOffset: 0
+    }, /*#__PURE__*/React.createElement(RenderCurve, {
+      props: this.props,
+      clipPathId: clipPathId
+    }))), /*#__PURE__*/React.createElement(ActivePoints, {
+      activeDot: this.props.activeDot,
+      points: points,
+      mainColor: this.props.stroke,
+      itemDataKey: this.props.dataKey,
+      clipPath: activePointsClipPath
+    }));
+  }
+}
+export var defaultLineProps = {
+  activeDot: true,
+  animateNewValues: true,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  connectNulls: false,
+  dot: true,
+  fill: '#fff',
+  hide: false,
+  isAnimationActive: 'auto',
+  label: false,
+  legendType: 'line',
+  stroke: '#3182bd',
+  strokeWidth: 1,
+  xAxisId: 0,
+  yAxisId: 0,
+  zIndex: DefaultZIndexes.line,
+  type: 'linear'
+};
+function LineImpl(props) {
+  var _resolveDefaultProps = resolveDefaultProps(props, defaultLineProps),
+    {
+      activeDot,
+      animateNewValues,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      connectNulls,
+      dot,
+      hide,
+      isAnimationActive,
+      label,
+      legendType,
+      xAxisId,
+      yAxisId,
+      id
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded3);
+  var {
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  var plotArea = usePlotArea();
+  var layout = useChartLayout();
+  var isPanorama = useIsPanorama();
+  var points = useAppSelector(state => selectLinePoints(state, xAxisId, yAxisId, isPanorama, id));
+  if (layout !== 'horizontal' && layout !== 'vertical' || points == null || plotArea == null) {
+    // Cannot render Line in an unsupported layout
+    return null;
+  }
+  var {
+    height,
+    width,
+    x: left,
+    y: top
+  } = plotArea;
+  return /*#__PURE__*/React.createElement(LineWithState, _extends({}, everythingElse, {
+    id: id,
+    connectNulls: connectNulls,
+    dot: dot,
+    activeDot: activeDot,
+    animateNewValues: animateNewValues,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive,
+    hide: hide,
+    label: label,
+    legendType: legendType,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    points: points,
+    layout: layout,
+    height: height,
+    width: width,
+    left: left,
+    top: top,
+    needClip: needClip
+  }));
+}
+export function computeLinePoints(_ref7) {
+  var {
+    layout,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    dataKey,
+    bandSize,
+    displayedData
+  } = _ref7;
+  return displayedData.map((entry, index) => {
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    var value = getValueByDataKey(entry, dataKey);
+    if (layout === 'horizontal') {
+      var _x = getCateCoordinateOfLine({
+        axis: xAxis,
+        ticks: xAxisTicks,
+        bandSize,
+        entry,
+        index
+      });
+      var _y = isNullish(value) ? null : yAxis.scale.map(value);
+      return {
+        x: _x,
+        y: _y !== null && _y !== void 0 ? _y : null,
+        value,
+        payload: entry
+      };
+    }
+    var x = isNullish(value) ? null : xAxis.scale.map(value);
+    var y = getCateCoordinateOfLine({
+      axis: yAxis,
+      ticks: yAxisTicks,
+      bandSize,
+      entry,
+      index
+    });
+    if (x == null || y == null) {
+      return null;
+    }
+    return {
+      x,
+      y,
+      value,
+      payload: entry
+    };
+  }).filter(Boolean);
+}
+function LineFn(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultLineProps);
+  var isPanorama = useIsPanorama();
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: props.id,
+    type: "line"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromAreaData(props)
+  }), /*#__PURE__*/React.createElement(SetLineTooltipEntrySettings, {
+    dataKey: props.dataKey,
+    data: props.data,
+    stroke: props.stroke,
+    strokeWidth: props.strokeWidth,
+    fill: props.fill,
+    name: props.name,
+    hide: props.hide,
+    unit: props.unit,
+    tooltipType: props.tooltipType,
+    id: id
+  }), /*#__PURE__*/React.createElement(SetCartesianGraphicalItem, {
+    type: "line",
+    id: id,
+    data: props.data,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: 0,
+    dataKey: props.dataKey,
+    hide: props.hide,
+    isPanorama: isPanorama
+  }), /*#__PURE__*/React.createElement(LineImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+
+/**
+ * @provides LabelListContext
+ * @provides ErrorBarContext
+ * @consumes CartesianChartContext
+ */
+export var Line = /*#__PURE__*/React.memo(LineFn, propsAreEqual);
+Line.displayName = 'Line';
Index: node_modules/recharts/es6/cartesian/ReferenceArea.js
===================================================================
--- node_modules/recharts/es6/cartesian/ReferenceArea.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/ReferenceArea.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,175 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { useEffect } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { CartesianLabelContextProvider, CartesianLabelFromLabelProp } from '../component/Label';
+import { rectWithPoints } from '../util/CartesianUtils';
+import { isNumOrStr } from '../util/DataUtils';
+import { Rectangle } from '../shape/Rectangle';
+import { addArea, removeArea } from '../state/referenceElementsSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectAxisScale } from '../state/selectors/axisSelectors';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { useClipPathId } from '../container/ClipPathProvider';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { CartesianScaleHelperImpl } from '../util/scale/CartesianScaleHelper';
+
+/*
+ * Omit width, height, x, y from SVGPropsAndEvents because ReferenceArea receives x1, x2, y1, y2 instead.
+ * The position is calculated internally instead.
+ */
+
+var getRect = (hasX1, hasX2, hasY1, hasY2, xAxisScale, yAxisScale, props) => {
+  var _xAxisScale$map, _yAxisScale$map, _xAxisScale$map2, _yAxisScale$map2;
+  var {
+    x1: xValue1,
+    x2: xValue2,
+    y1: yValue1,
+    y2: yValue2
+  } = props;
+  if (xAxisScale == null || yAxisScale == null) {
+    return null;
+  }
+  var scales = new CartesianScaleHelperImpl({
+    x: xAxisScale,
+    y: yAxisScale
+  });
+  var p1 = {
+    x: hasX1 ? (_xAxisScale$map = xAxisScale.map(xValue1, {
+      position: 'start'
+    })) !== null && _xAxisScale$map !== void 0 ? _xAxisScale$map : null : xAxisScale.rangeMin(),
+    y: hasY1 ? (_yAxisScale$map = yAxisScale.map(yValue1, {
+      position: 'start'
+    })) !== null && _yAxisScale$map !== void 0 ? _yAxisScale$map : null : yAxisScale.rangeMin()
+  };
+  var p2 = {
+    x: hasX2 ? (_xAxisScale$map2 = xAxisScale.map(xValue2, {
+      position: 'end'
+    })) !== null && _xAxisScale$map2 !== void 0 ? _xAxisScale$map2 : null : xAxisScale.rangeMax(),
+    y: hasY2 ? (_yAxisScale$map2 = yAxisScale.map(yValue2, {
+      position: 'end'
+    })) !== null && _yAxisScale$map2 !== void 0 ? _yAxisScale$map2 : null : yAxisScale.rangeMax()
+  };
+  if (props.ifOverflow === 'discard' && (!scales.isInRange(p1) || !scales.isInRange(p2))) {
+    return null;
+  }
+
+  // @ts-expect-error we're sending nullable coordinates but rectWithPoints expects non-nullable Coordinate
+  return rectWithPoints(p1, p2);
+};
+var renderRect = (option, props) => {
+  var rect;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error element cloning is not typed
+    rect = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    rect = option(props);
+  } else {
+    rect = /*#__PURE__*/React.createElement(Rectangle, _extends({}, props, {
+      className: "recharts-reference-area-rect"
+    }));
+  }
+  return rect;
+};
+function ReportReferenceArea(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(addArea(props));
+    return () => {
+      dispatch(removeArea(props));
+    };
+  });
+  return null;
+}
+function ReferenceAreaImpl(props) {
+  var {
+    x1,
+    x2,
+    y1,
+    y2,
+    className,
+    shape,
+    xAxisId,
+    yAxisId
+  } = props;
+  var clipPathId = useClipPathId();
+  var isPanorama = useIsPanorama();
+  var xAxisScale = useAppSelector(state => selectAxisScale(state, 'xAxis', xAxisId, isPanorama));
+  var yAxisScale = useAppSelector(state => selectAxisScale(state, 'yAxis', yAxisId, isPanorama));
+  if (xAxisScale == null || yAxisScale == null) {
+    return null;
+  }
+  var hasX1 = isNumOrStr(x1);
+  var hasX2 = isNumOrStr(x2);
+  var hasY1 = isNumOrStr(y1);
+  var hasY2 = isNumOrStr(y2);
+  if (!hasX1 && !hasX2 && !hasY1 && !hasY2 && !shape) {
+    return null;
+  }
+  var rect = getRect(hasX1, hasX2, hasY1, hasY2, xAxisScale, yAxisScale, props);
+  if (!rect && !shape) {
+    return null;
+  }
+  var isOverflowHidden = props.ifOverflow === 'hidden';
+  var clipPath = isOverflowHidden ? "url(#".concat(clipPathId, ")") : undefined;
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-reference-area', className)
+  }, renderRect(shape, _objectSpread(_objectSpread({
+    clipPath
+  }, svgPropertiesAndEvents(props)), rect)), rect != null && /*#__PURE__*/React.createElement(CartesianLabelContextProvider, _extends({}, rect, {
+    lowerWidth: rect.width,
+    upperWidth: rect.width
+  }), /*#__PURE__*/React.createElement(CartesianLabelFromLabelProp, {
+    label: props.label
+  }), props.children)));
+}
+export var referenceAreaDefaultProps = {
+  ifOverflow: 'discard',
+  xAxisId: 0,
+  yAxisId: 0,
+  radius: 0,
+  fill: '#ccc',
+  label: false,
+  fillOpacity: 0.5,
+  stroke: 'none',
+  strokeWidth: 1,
+  zIndex: DefaultZIndexes.area
+};
+/**
+ * Draws a rectangular area on the chart to highlight a specific range.
+ *
+ * This component, unlike {@link Rectangle} or {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/rect rect}, is aware of the cartesian coordinate system,
+ * so you specify the area by using data coordinates instead of pixels.
+ *
+ * ReferenceArea will calculate the pixels based on the provided data coordinates.
+ *
+ * If you prefer to render rectangles using pixels rather than data coordinates,
+ * consider using the {@link Rectangle} component instead.
+ *
+ * @provides CartesianLabelContext
+ * @consumes CartesianChartContext
+ */
+export function ReferenceArea(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, referenceAreaDefaultProps);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportReferenceArea, {
+    yAxisId: props.yAxisId,
+    xAxisId: props.xAxisId,
+    ifOverflow: props.ifOverflow,
+    x1: props.x1,
+    x2: props.x2,
+    y1: props.y1,
+    y2: props.y2
+  }), /*#__PURE__*/React.createElement(ReferenceAreaImpl, props));
+}
+ReferenceArea.displayName = 'ReferenceArea';
Index: node_modules/recharts/es6/cartesian/ReferenceDot.js
===================================================================
--- node_modules/recharts/es6/cartesian/ReferenceDot.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/ReferenceDot.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,161 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { useEffect } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { Dot } from '../shape/Dot';
+import { CartesianLabelContextProvider, CartesianLabelFromLabelProp } from '../component/Label';
+import { isNumOrStr } from '../util/DataUtils';
+import { addDot, removeDot } from '../state/referenceElementsSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectAxisScale } from '../state/selectors/axisSelectors';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { useClipPathId } from '../container/ClipPathProvider';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { CartesianScaleHelperImpl } from '../util/scale/CartesianScaleHelper';
+var useCoordinate = (x, y, xAxisId, yAxisId, ifOverflow) => {
+  var isX = isNumOrStr(x);
+  var isY = isNumOrStr(y);
+  var isPanorama = useIsPanorama();
+  var xAxisScale = useAppSelector(state => selectAxisScale(state, 'xAxis', xAxisId, isPanorama));
+  var yAxisScale = useAppSelector(state => selectAxisScale(state, 'yAxis', yAxisId, isPanorama));
+  if (!isX || !isY || xAxisScale == null || yAxisScale == null) {
+    return null;
+  }
+  var scales = new CartesianScaleHelperImpl({
+    x: xAxisScale,
+    y: yAxisScale
+  });
+  var result = scales.map({
+    x,
+    y
+  }, {
+    position: 'middle'
+  });
+  if (ifOverflow === 'discard' && !scales.isInRange(result)) {
+    return null;
+  }
+  return result;
+};
+function ReportReferenceDot(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(addDot(props));
+    return () => {
+      dispatch(removeDot(props));
+    };
+  });
+  return null;
+}
+var renderDot = (option, props) => {
+  var dot;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error element cloning is not typed
+    dot = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    dot = option(props);
+  } else {
+    dot = /*#__PURE__*/React.createElement(Dot, _extends({}, props, {
+      cx: props.cx,
+      cy: props.cy,
+      className: "recharts-reference-dot-dot"
+    }));
+  }
+  return dot;
+};
+function ReferenceDotImpl(props) {
+  var {
+    x,
+    y,
+    r
+  } = props;
+  var clipPathId = useClipPathId();
+  var coordinate = useCoordinate(x, y, props.xAxisId, props.yAxisId, props.ifOverflow);
+  if (!coordinate) {
+    return null;
+  }
+  var {
+    x: cx,
+    y: cy
+  } = coordinate;
+  var {
+    shape,
+    className,
+    ifOverflow
+  } = props;
+  var clipPath = ifOverflow === 'hidden' ? "url(#".concat(clipPathId, ")") : undefined;
+  var dotProps = _objectSpread(_objectSpread({
+    clipPath
+  }, svgPropertiesAndEvents(props)), {}, {
+    cx: cx !== null && cx !== void 0 ? cx : undefined,
+    cy: cy !== null && cy !== void 0 ? cy : undefined
+  });
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-reference-dot', className)
+  }, renderDot(shape, dotProps), /*#__PURE__*/React.createElement(CartesianLabelContextProvider, {
+    x: cx - r,
+    y: cy - r,
+    width: 2 * r,
+    height: 2 * r,
+    upperWidth: 2 * r,
+    lowerWidth: 2 * r
+  }, /*#__PURE__*/React.createElement(CartesianLabelFromLabelProp, {
+    label: props.label
+  }), props.children)));
+}
+export var referenceDotDefaultProps = {
+  ifOverflow: 'discard',
+  xAxisId: 0,
+  yAxisId: 0,
+  r: 10,
+  label: false,
+  fill: '#fff',
+  stroke: '#ccc',
+  fillOpacity: 1,
+  strokeWidth: 1,
+  zIndex: DefaultZIndexes.scatter
+};
+/**
+ * Draws a circle on the chart to highlight a specific point.
+ *
+ * This component, unlike {@link Dot} or {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/circle circle}, is aware of the cartesian coordinate system,
+ * so you specify its center by using data coordinates instead of pixels.
+ *
+ * ReferenceDot will calculate the pixels based on the provided data coordinates.
+ *
+ * If you prefer to render dots using pixels rather than data coordinates,
+ * consider using the {@link Dot} component instead.
+ *
+ * @provides CartesianLabelContext
+ * @consumes CartesianChartContext
+ */
+export function ReferenceDot(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, referenceDotDefaultProps);
+  var {
+    x,
+    y,
+    r,
+    ifOverflow,
+    yAxisId,
+    xAxisId
+  } = props;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportReferenceDot, {
+    y: y,
+    x: x,
+    r: r,
+    yAxisId: yAxisId,
+    xAxisId: xAxisId,
+    ifOverflow: ifOverflow
+  }), /*#__PURE__*/React.createElement(ReferenceDotImpl, props));
+}
+ReferenceDot.displayName = 'ReferenceDot';
Index: node_modules/recharts/es6/cartesian/ReferenceLine.js
===================================================================
--- node_modules/recharts/es6/cartesian/ReferenceLine.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/ReferenceLine.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,259 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+/**
+ * @fileOverview Reference Line
+ */
+import * as React from 'react';
+import { useEffect } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { CartesianLabelContextProvider, CartesianLabelFromLabelProp } from '../component/Label';
+import { isNumOrStr } from '../util/DataUtils';
+import { rectWithCoords } from '../util/CartesianUtils';
+import { useViewBox } from '../context/chartLayoutContext';
+import { addLine, removeLine } from '../state/referenceElementsSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectAxisScale, selectXAxisSettings, selectYAxisSettings } from '../state/selectors/axisSelectors';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { useClipPathId } from '../container/ClipPathProvider';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
+import { CartesianScaleHelperImpl } from '../util/scale/CartesianScaleHelper';
+
+/**
+ * Single point that defines one end of a segment.
+ * These coordinates are in data space, meaning that you should provide
+ * values that correspond to the data domain of the axes.
+ * So you would provide a value of `Page A` to indicate the data value `Page A`
+ * and then recharts will convert that to pixels.
+ *
+ * Likewise for numbers. If your x-axis goes from 0 to 100,
+ * and you want the line to end at 50, you would provide `50` here.
+ *
+ * @inline
+ */
+
+/**
+ * This excludes `viewBox` prop from svg for two reasons:
+ * 1. The components wants viewBox of object type, and svg wants string
+ *    - so there's a conflict, and the component will throw if it gets string
+ * 2. Internally the component calls `svgPropertiesNoEvents` which filters the viewBox away anyway
+ */
+
+var renderLine = (option, props) => {
+  var line;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error element cloning is not typed
+    line = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    line = option(props);
+  } else {
+    if (!isWellBehavedNumber(props.x1) || !isWellBehavedNumber(props.y1) || !isWellBehavedNumber(props.x2) || !isWellBehavedNumber(props.y2)) {
+      return null;
+    }
+    line = /*#__PURE__*/React.createElement("line", _extends({}, props, {
+      className: "recharts-reference-line-line"
+    }));
+  }
+  return line;
+};
+var getHorizontalLineEndPoints = (yCoord, ifOverflow, position, yAxisOrientation, yAxisScale, viewBox) => {
+  var {
+    x,
+    width
+  } = viewBox;
+  var coord = yAxisScale.map(yCoord, {
+    position
+  });
+  // don't render the line if the scale can't compute a result that makes sense
+  if (!isWellBehavedNumber(coord)) {
+    return null;
+  }
+  if (ifOverflow === 'discard' && !yAxisScale.isInRange(coord)) {
+    return null;
+  }
+  var points = [{
+    x: x + width,
+    y: coord
+  }, {
+    x,
+    y: coord
+  }];
+  return yAxisOrientation === 'left' ? points.reverse() : points;
+};
+var getVerticalLineEndPoints = (xCoord, ifOverflow, position, xAxisOrientation, xAxisScale, viewBox) => {
+  var {
+    y,
+    height
+  } = viewBox;
+  var coord = xAxisScale.map(xCoord, {
+    position
+  });
+  // don't render the line if the scale can't compute a result that makes sense
+  if (!isWellBehavedNumber(coord)) {
+    return null;
+  }
+  if (ifOverflow === 'discard' && !xAxisScale.isInRange(coord)) {
+    return null;
+  }
+  var points = [{
+    x: coord,
+    y: y + height
+  }, {
+    x: coord,
+    y
+  }];
+  return xAxisOrientation === 'top' ? points.reverse() : points;
+};
+var getSegmentLineEndPoints = (segment, ifOverflow, position, scales) => {
+  var points = [scales.mapWithFallback(segment[0], {
+    position,
+    fallback: 'rangeMin'
+  }), scales.mapWithFallback(segment[1], {
+    position,
+    fallback: 'rangeMax'
+  })];
+  if (ifOverflow === 'discard' && points.some(p => !scales.isInRange(p))) {
+    return null;
+  }
+  return points;
+};
+export var getEndPoints = (xAxisScale, yAxisScale, viewBox, position, xAxisOrientation, yAxisOrientation, props) => {
+  var {
+    x: xCoord,
+    y: yCoord,
+    segment,
+    ifOverflow
+  } = props;
+  var isFixedX = isNumOrStr(xCoord);
+  var isFixedY = isNumOrStr(yCoord);
+  if (isFixedY) {
+    return getHorizontalLineEndPoints(yCoord, ifOverflow, position, yAxisOrientation, yAxisScale, viewBox);
+  }
+  if (isFixedX) {
+    return getVerticalLineEndPoints(xCoord, ifOverflow, position, xAxisOrientation, xAxisScale, viewBox);
+  }
+  if (segment != null && segment.length === 2) {
+    return getSegmentLineEndPoints(segment, ifOverflow, position, new CartesianScaleHelperImpl({
+      x: xAxisScale,
+      y: yAxisScale
+    }));
+  }
+  return null;
+};
+function ReportReferenceLine(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(addLine(props));
+    return () => {
+      dispatch(removeLine(props));
+    };
+  });
+  return null;
+}
+function ReferenceLineImpl(props) {
+  var {
+    xAxisId,
+    yAxisId,
+    shape,
+    className,
+    ifOverflow
+  } = props;
+  var isPanorama = useIsPanorama();
+  var clipPathId = useClipPathId();
+  var xAxis = useAppSelector(state => selectXAxisSettings(state, xAxisId));
+  var yAxis = useAppSelector(state => selectYAxisSettings(state, yAxisId));
+  var xAxisScale = useAppSelector(state => selectAxisScale(state, 'xAxis', xAxisId, isPanorama));
+  var yAxisScale = useAppSelector(state => selectAxisScale(state, 'yAxis', yAxisId, isPanorama));
+  var viewBox = useViewBox();
+  if (!clipPathId || !viewBox || xAxis == null || yAxis == null || xAxisScale == null || yAxisScale == null) {
+    return null;
+  }
+  var endPoints = getEndPoints(xAxisScale, yAxisScale, viewBox, props.position, xAxis.orientation, yAxis.orientation, props);
+  if (!endPoints) {
+    return null;
+  }
+  var point1 = endPoints[0];
+  var point2 = endPoints[1];
+  if (point1 == null || point2 == null) {
+    return null;
+  }
+  var {
+    x: x1,
+    y: y1
+  } = point1;
+  var {
+    x: x2,
+    y: y2
+  } = point2;
+  var clipPath = ifOverflow === 'hidden' ? "url(#".concat(clipPathId, ")") : undefined;
+  var lineProps = _objectSpread(_objectSpread({
+    clipPath
+  }, svgPropertiesAndEvents(props)), {}, {
+    x1,
+    y1,
+    x2,
+    y2
+  });
+  var rect = rectWithCoords({
+    x1,
+    y1,
+    x2,
+    y2
+  });
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-reference-line', className)
+  }, renderLine(shape, lineProps), /*#__PURE__*/React.createElement(CartesianLabelContextProvider, _extends({}, rect, {
+    lowerWidth: rect.width,
+    upperWidth: rect.width
+  }), /*#__PURE__*/React.createElement(CartesianLabelFromLabelProp, {
+    label: props.label
+  }), props.children)));
+}
+export var referenceLineDefaultProps = {
+  ifOverflow: 'discard',
+  xAxisId: 0,
+  yAxisId: 0,
+  fill: 'none',
+  label: false,
+  stroke: '#ccc',
+  fillOpacity: 1,
+  strokeWidth: 1,
+  position: 'middle',
+  zIndex: DefaultZIndexes.line
+};
+/**
+ * Draws a line on the chart connecting two points.
+ *
+ * This component, unlike {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/line line}, is aware of the cartesian coordinate system,
+ * so you specify the dimensions by using data coordinates instead of pixels.
+ *
+ * ReferenceLine will calculate the pixels based on the provided data coordinates.
+ *
+ * If you prefer to render using pixels rather than data coordinates,
+ * consider using the {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/line line SVG element} instead.
+ *
+ * @provides CartesianLabelContext
+ * @consumes CartesianChartContext
+ */
+export function ReferenceLine(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, referenceLineDefaultProps);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportReferenceLine, {
+    yAxisId: props.yAxisId,
+    xAxisId: props.xAxisId,
+    ifOverflow: props.ifOverflow,
+    x: props.x,
+    y: props.y,
+    segment: props.segment
+  }), /*#__PURE__*/React.createElement(ReferenceLineImpl, props));
+}
+ReferenceLine.displayName = 'ReferenceLine';
Index: node_modules/recharts/es6/cartesian/Scatter.js
===================================================================
--- node_modules/recharts/es6/cartesian/Scatter.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/Scatter.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,606 @@
+var _excluded = ["id"],
+  _excluded2 = ["onMouseEnter", "onClick", "onMouseLeave"],
+  _excluded3 = ["animationBegin", "animationDuration", "animationEasing", "hide", "isAnimationActive", "legendType", "lineJointType", "lineType", "shape", "xAxisId", "yAxisId", "zAxisId"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { useCallback, useMemo, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { CartesianLabelListContextProvider, LabelListFromLabelProp } from '../component/LabelList';
+import { findAllByType } from '../util/ReactUtils';
+import { Curve } from '../shape/Curve';
+import { Cell } from '../component/Cell';
+import { getLinearRegression, interpolate, isNullish } from '../util/DataUtils';
+import { getCateCoordinateOfLine, getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
+import { adaptEventsOfChild, isNonEmptyArray } from '../util/types';
+import { ScatterSymbol } from '../util/ScatterUtils';
+import { useMouseClickItemDispatch, useMouseEnterItemDispatch, useMouseLeaveItemDispatch } from '../context/tooltipContext';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { SetErrorBarContext } from '../context/ErrorBarContext';
+import { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';
+import { selectScatterPoints } from '../state/selectors/scatterSelectors';
+import { useAppSelector } from '../state/hooks';
+import { implicitZAxis } from '../state/selectors/axisSelectors';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';
+import { SetLegendPayload } from '../state/SetLegendPayload';
+import { DATA_ITEM_GRAPHICAL_ITEM_ID_ATTRIBUTE_NAME } from '../util/Constants';
+import { useAnimationId } from '../util/useAnimationId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents, svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+import { useViewBox } from '../context/chartLayoutContext';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { propsAreEqual } from '../util/propsAreEqual';
+
+/**
+ * Scatter coordinates are nullable because sometimes the point value is out of the domain,
+ * and we can't compute a valid coordinate for it.
+ *
+ * Scatter -> Symbol ignores points with null cx or cy so those won't render if using the default shapes.
+ * However: the points are exposed via various props and can be used in custom shapes so we keep them around.
+ */
+
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+
+var computeLegendPayloadFromScatterProps = props => {
+  var {
+    dataKey,
+    name,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: fill,
+    value: getTooltipNameProp(name, dataKey),
+    payload: props
+  }];
+};
+var SetScatterTooltipEntrySettings = /*#__PURE__*/React.memo(_ref => {
+  var {
+    dataKey,
+    points,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType,
+    id
+  } = _ref;
+  var tooltipEntrySettings = {
+    dataDefinedOnItem: points === null || points === void 0 ? void 0 : points.map(p => p.tooltipPayload),
+    getPosition: index => {
+      var _points$Number;
+      return points === null || points === void 0 || (_points$Number = points[Number(index)]) === null || _points$Number === void 0 ? void 0 : _points$Number.tooltipPosition;
+    },
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      nameKey: undefined,
+      dataKey,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '',
+      // why doesn't Scatter support unit?
+      graphicalItemId: id
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+function ScatterLine(_ref2) {
+  var {
+    points,
+    props
+  } = _ref2;
+  var {
+    line,
+    lineType,
+    lineJointType
+  } = props;
+  if (!line) {
+    return null;
+  }
+  var scatterProps = svgPropertiesNoEvents(props);
+  var customLineProps = svgPropertiesNoEventsFromUnknown(line);
+  var linePoints, lineItem;
+  if (lineType === 'joint') {
+    linePoints = points.map(entry => {
+      var _entry$cx, _entry$cy;
+      return {
+        x: (_entry$cx = entry.cx) !== null && _entry$cx !== void 0 ? _entry$cx : null,
+        y: (_entry$cy = entry.cy) !== null && _entry$cy !== void 0 ? _entry$cy : null
+      };
+    });
+  } else if (lineType === 'fitting') {
+    var {
+      xmin,
+      xmax,
+      a,
+      b
+    } = getLinearRegression(points);
+    var linearExp = x => a * x + b;
+    linePoints = [{
+      x: xmin,
+      y: linearExp(xmin)
+    }, {
+      x: xmax,
+      y: linearExp(xmax)
+    }];
+  }
+  var lineProps = _objectSpread(_objectSpread(_objectSpread({}, scatterProps), {}, {
+    // @ts-expect-error customLineProps is contributing unknown props
+    fill: 'none',
+    // @ts-expect-error customLineProps is contributing unknown props
+    stroke: scatterProps && scatterProps.fill
+  }, customLineProps), {}, {
+    // @ts-expect-error linePoints is used before it is assigned (???)
+    points: linePoints
+  });
+  if (/*#__PURE__*/React.isValidElement(line)) {
+    lineItem = /*#__PURE__*/React.cloneElement(line, lineProps);
+  } else if (typeof line === 'function') {
+    lineItem = line(lineProps);
+  } else {
+    lineItem = /*#__PURE__*/React.createElement(Curve, _extends({}, lineProps, {
+      type: lineJointType
+    }));
+  }
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-scatter-line",
+    key: "recharts-scatter-line"
+  }, lineItem);
+}
+function ScatterLabelListProvider(_ref3) {
+  var {
+    showLabels,
+    points,
+    children
+  } = _ref3;
+  var chartViewBox = useViewBox();
+  var labelListEntries = useMemo(() => {
+    return points === null || points === void 0 ? void 0 : points.map(point => {
+      var _point$x, _point$y;
+      var viewBox = {
+        /*
+         * Scatter label uses x and y as the reference point for the label,
+         * not cx and cy.
+         */
+        x: (_point$x = point.x) !== null && _point$x !== void 0 ? _point$x : 0,
+        /*
+         * Scatter label uses x and y as the reference point for the label,
+         * not cx and cy.
+         */
+        y: (_point$y = point.y) !== null && _point$y !== void 0 ? _point$y : 0,
+        width: point.width,
+        height: point.height,
+        lowerWidth: point.width,
+        upperWidth: point.width
+      };
+      return _objectSpread(_objectSpread({}, viewBox), {}, {
+        /*
+         * Here we put undefined because Scatter shows two values usually, one for X and one for Y.
+         * LabelList will see this undefined and will use its own `dataKey` prop to determine which value to show,
+         * using the payload below.
+         */
+        value: undefined,
+        payload: point.payload,
+        viewBox,
+        parentViewBox: chartViewBox,
+        fill: undefined
+      });
+    });
+  }, [chartViewBox, points]);
+  return /*#__PURE__*/React.createElement(CartesianLabelListContextProvider, {
+    value: showLabels ? labelListEntries : undefined
+  }, children);
+}
+function ScatterSymbols(props) {
+  var {
+    points,
+    allOtherScatterProps
+  } = props;
+  var {
+    shape,
+    activeShape,
+    dataKey
+  } = allOtherScatterProps;
+  var {
+      id
+    } = allOtherScatterProps,
+    allOtherPropsWithoutId = _objectWithoutProperties(allOtherScatterProps, _excluded);
+  var activeIndex = useAppSelector(selectActiveTooltipIndex);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = allOtherScatterProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherScatterProps, _excluded2);
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, dataKey, id);
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, dataKey, id);
+  if (!isNonEmptyArray(points)) {
+    return null;
+  }
+  var baseProps = svgPropertiesNoEvents(allOtherPropsWithoutId);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ScatterLine, {
+    points: points,
+    props: allOtherPropsWithoutId
+  }), points.map((entry, i) => {
+    var hasActiveShape = activeShape != null && activeShape !== false;
+    var isActive = hasActiveShape && activeIndex === String(i);
+    var option = hasActiveShape && isActive ? activeShape : shape;
+    var symbolProps = _objectSpread(_objectSpread(_objectSpread({}, baseProps), entry), {}, {
+      index: i,
+      [DATA_ITEM_GRAPHICAL_ITEM_ID_ATTRIBUTE_NAME]: String(id)
+    });
+    return /*#__PURE__*/React.createElement(ZIndexLayer, {
+      key: "symbol-".concat(entry === null || entry === void 0 ? void 0 : entry.cx, "-").concat(entry === null || entry === void 0 ? void 0 : entry.cy, "-").concat(entry === null || entry === void 0 ? void 0 : entry.size, "-").concat(i)
+      /*
+       * inactive Scatters use the parent zIndex, which is represented by undefined here.
+       * ZIndexLayer will render undefined zIndex as-is, as regular children, without portals.
+       * Active Scatters use the activeDot zIndex so they render above other elements.
+       */,
+      zIndex: isActive ? DefaultZIndexes.activeDot : undefined
+    }, /*#__PURE__*/React.createElement(Layer, _extends({
+      className: "recharts-scatter-symbol"
+    }, adaptEventsOfChild(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error the types need a bit of attention
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onClick: onClickFromContext(entry, i)
+    }), /*#__PURE__*/React.createElement(ScatterSymbol, _extends({
+      option: option,
+      isActive: isActive
+    }, symbolProps))));
+  }));
+}
+function SymbolsWithAnimation(_ref4) {
+  var {
+    previousPointsRef,
+    props
+  } = _ref4;
+  var {
+    points,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing
+  } = props;
+  var prevPoints = previousPointsRef.current;
+  var animationId = useAnimationId(props, 'recharts-scatter-');
+  var [isAnimating, setIsAnimating] = useState(false);
+  var handleAnimationEnd = useCallback(() => {
+    // Scatter doesn't have onAnimationEnd prop, and if we want to add it we do it here
+    // if (typeof onAnimationEnd === 'function') {
+    //   onAnimationEnd();
+    // }
+    setIsAnimating(false);
+  }, []);
+  var handleAnimationStart = useCallback(() => {
+    // Scatter doesn't have onAnimationStart prop, and if we want to add it we do it here
+    // if (typeof onAnimationStart === 'function') {
+    //   onAnimationStart();
+    // }
+    setIsAnimating(true);
+  }, []);
+  var showLabels = !isAnimating;
+  return /*#__PURE__*/React.createElement(ScatterLabelListProvider, {
+    showLabels: showLabels,
+    points: points
+  }, props.children, /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    animationId: animationId,
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    var stepData = t === 1 ? points : points === null || points === void 0 ? void 0 : points.map((entry, index) => {
+      var prev = prevPoints && prevPoints[index];
+      if (prev) {
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          cx: entry.cx == null ? undefined : interpolate(prev.cx, entry.cx, t),
+          cy: entry.cy == null ? undefined : interpolate(prev.cy, entry.cy, t),
+          size: interpolate(prev.size, entry.size, t)
+        });
+      }
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        size: interpolate(0, entry.size, t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = stepData;
+    }
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(ScatterSymbols, {
+      points: stepData,
+      allOtherScatterProps: props,
+      showLabels: showLabels
+    }));
+  }), /*#__PURE__*/React.createElement(LabelListFromLabelProp, {
+    label: props.label
+  }));
+}
+export function computeScatterPoints(_ref5) {
+  var {
+    displayedData,
+    xAxis,
+    yAxis,
+    zAxis,
+    scatterSettings,
+    xAxisTicks,
+    yAxisTicks,
+    cells
+  } = _ref5;
+  var xAxisDataKey = isNullish(xAxis.dataKey) ? scatterSettings.dataKey : xAxis.dataKey;
+  var yAxisDataKey = isNullish(yAxis.dataKey) ? scatterSettings.dataKey : yAxis.dataKey;
+  var zAxisDataKey = zAxis && zAxis.dataKey;
+  var defaultRangeZ = zAxis ? zAxis.range : implicitZAxis.range;
+  var defaultZ = defaultRangeZ && defaultRangeZ[0];
+  var xBandSize = xAxis.scale.bandwidth ? xAxis.scale.bandwidth() : 0;
+  var yBandSize = yAxis.scale.bandwidth ? yAxis.scale.bandwidth() : 0;
+  return displayedData.map((entry, index) => {
+    var x = getValueByDataKey(entry, xAxisDataKey);
+    var y = getValueByDataKey(entry, yAxisDataKey);
+    var z = !isNullish(zAxisDataKey) && getValueByDataKey(entry, zAxisDataKey) || '-';
+    var tooltipPayload = [{
+      name: isNullish(xAxis.dataKey) ? scatterSettings.name : xAxis.name || String(xAxis.dataKey),
+      unit: xAxis.unit || '',
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      value: x,
+      payload: entry,
+      dataKey: xAxisDataKey,
+      type: scatterSettings.tooltipType
+    }, {
+      name: isNullish(yAxis.dataKey) ? scatterSettings.name : yAxis.name || String(yAxis.dataKey),
+      unit: yAxis.unit || '',
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      value: y,
+      payload: entry,
+      dataKey: yAxisDataKey,
+      type: scatterSettings.tooltipType
+    }];
+    if (z !== '-' && zAxis != null) {
+      tooltipPayload.push({
+        // @ts-expect-error name prop should not have dataKey in it
+        name: zAxis.name || zAxis.dataKey,
+        unit: zAxis.unit || '',
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        value: z,
+        payload: entry,
+        dataKey: zAxisDataKey,
+        type: scatterSettings.tooltipType
+      });
+    }
+    var cx = getCateCoordinateOfLine({
+      axis: xAxis,
+      ticks: xAxisTicks,
+      bandSize: xBandSize,
+      entry,
+      index,
+      dataKey: xAxisDataKey
+    });
+    var cy = getCateCoordinateOfLine({
+      axis: yAxis,
+      ticks: yAxisTicks,
+      bandSize: yBandSize,
+      entry,
+      index,
+      dataKey: yAxisDataKey
+    });
+    var size = z !== '-' && zAxis != null ? zAxis.scale.map(z) : defaultZ;
+    var radius = size == null ? 0 : Math.sqrt(Math.max(size, 0) / Math.PI);
+    return _objectSpread(_objectSpread({}, entry), {}, {
+      cx,
+      cy,
+      x: cx == null ? undefined : cx - radius,
+      y: cy == null ? undefined : cy - radius,
+      width: 2 * radius,
+      height: 2 * radius,
+      size,
+      node: {
+        x,
+        y,
+        z
+      },
+      tooltipPayload,
+      tooltipPosition: {
+        x: cx,
+        y: cy
+      },
+      payload: entry
+    }, cells && cells[index] && cells[index].props);
+  });
+}
+var errorBarDataPointFormatter = (dataPoint, dataKey, direction) => {
+  return {
+    x: dataPoint.cx,
+    y: dataPoint.cy,
+    value: direction === 'x' ? Number(dataPoint.node.x) : Number(dataPoint.node.y),
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    errorVal: getValueByDataKey(dataPoint, dataKey)
+  };
+};
+function ScatterWithId(props) {
+  var {
+    hide,
+    points,
+    className,
+    needClip,
+    xAxisId,
+    yAxisId,
+    id
+  } = props;
+  var previousPointsRef = useRef(null);
+  if (hide) {
+    return null;
+  }
+  var layerClass = clsx('recharts-scatter', className);
+  var clipPathId = id;
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: layerClass,
+    clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : undefined,
+    id: id
+  }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(GraphicalItemClipPath, {
+    clipPathId: clipPathId,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId
+  })), /*#__PURE__*/React.createElement(SetErrorBarContext, {
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    data: points,
+    dataPointFormatter: errorBarDataPointFormatter,
+    errorBarOffset: 0
+  }, /*#__PURE__*/React.createElement(Layer, {
+    key: "recharts-scatter-symbols"
+  }, /*#__PURE__*/React.createElement(SymbolsWithAnimation, {
+    props: props,
+    previousPointsRef: previousPointsRef
+  })))));
+}
+export var defaultScatterProps = {
+  xAxisId: 0,
+  yAxisId: 0,
+  zAxisId: 0,
+  label: false,
+  line: false,
+  legendType: 'circle',
+  lineType: 'joint',
+  lineJointType: 'linear',
+  shape: 'circle',
+  hide: false,
+  isAnimationActive: 'auto',
+  animationBegin: 0,
+  animationDuration: 400,
+  animationEasing: 'linear',
+  zIndex: DefaultZIndexes.scatter
+};
+function ScatterImpl(props) {
+  var _resolveDefaultProps = resolveDefaultProps(props, defaultScatterProps),
+    {
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      hide,
+      isAnimationActive,
+      legendType,
+      lineJointType,
+      lineType,
+      shape,
+      xAxisId,
+      yAxisId,
+      zAxisId
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded3);
+  var {
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  var cells = useMemo(() => findAllByType(props.children, Cell), [props.children]);
+  var isPanorama = useIsPanorama();
+  var points = useAppSelector(state => {
+    return selectScatterPoints(state, xAxisId, yAxisId, zAxisId, props.id, cells, isPanorama);
+  });
+  if (needClip == null) {
+    return null;
+  }
+  if (points == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetScatterTooltipEntrySettings, {
+    dataKey: props.dataKey,
+    points: points,
+    stroke: props.stroke,
+    strokeWidth: props.strokeWidth,
+    fill: props.fill,
+    name: props.name,
+    hide: props.hide,
+    tooltipType: props.tooltipType,
+    id: props.id
+  }), /*#__PURE__*/React.createElement(ScatterWithId, _extends({}, everythingElse, {
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    zAxisId: zAxisId,
+    lineType: lineType,
+    lineJointType: lineJointType,
+    legendType: legendType,
+    shape: shape,
+    hide: hide,
+    isAnimationActive: isAnimationActive,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    points: points,
+    needClip: needClip
+  })));
+}
+function ScatterFn(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultScatterProps);
+  var isPanorama = useIsPanorama();
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: props.id,
+    type: "scatter"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromScatterProps(props)
+  }), /*#__PURE__*/React.createElement(SetCartesianGraphicalItem, {
+    type: "scatter",
+    id: id,
+    data: props.data,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: props.zAxisId,
+    dataKey: props.dataKey,
+    hide: props.hide,
+    name: props.name,
+    tooltipType: props.tooltipType,
+    isPanorama: isPanorama
+  }), /*#__PURE__*/React.createElement(ScatterImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+
+/**
+ * @provides LabelListContext
+ * @provides ErrorBarContext
+ * @provides CellReader
+ * @consumes CartesianChartContext
+ */
+export var Scatter = /*#__PURE__*/React.memo(ScatterFn, propsAreEqual);
+Scatter.displayName = 'Scatter';
Index: node_modules/recharts/es6/cartesian/XAxis.js
===================================================================
--- node_modules/recharts/es6/cartesian/XAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/XAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,171 @@
+var _excluded = ["type"],
+  _excluded2 = ["dangerouslySetInnerHTML", "ticks", "scale"],
+  _excluded3 = ["id", "scale"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview X Axis
+ */
+import * as React from 'react';
+import { useLayoutEffect, useMemo, useRef } from 'react';
+import { clsx } from 'clsx';
+import { CartesianAxis, defaultCartesianAxisProps } from './CartesianAxis';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { addXAxis, replaceXAxis, removeXAxis } from '../state/cartesianAxisSlice';
+import { implicitXAxis, selectTicksOfAxis, selectXAxisPosition, selectXAxisSettingsNoDefaults, selectXAxisSize } from '../state/selectors/axisSelectors';
+import { selectAxisViewBox } from '../state/selectors/selectChartOffsetInternal';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { axisPropsAreEqual } from '../util/axisPropsAreEqual';
+import { useCartesianChartLayout } from '../context/chartLayoutContext';
+import { getAxisTypeBasedOnLayout } from '../util/getAxisTypeBasedOnLayout';
+function SetXAxisSettings(props) {
+  var dispatch = useAppDispatch();
+  var prevSettingsRef = useRef(null);
+  var layout = useCartesianChartLayout();
+  var {
+      type: typeFromProps
+    } = props,
+    restProps = _objectWithoutProperties(props, _excluded);
+  var evaluatedType = getAxisTypeBasedOnLayout(layout, 'xAxis', typeFromProps);
+  var settings = useMemo(() => {
+    if (evaluatedType == null) {
+      return undefined;
+    }
+    return _objectSpread(_objectSpread({}, restProps), {}, {
+      type: evaluatedType
+    });
+  }, [restProps, evaluatedType]);
+  useLayoutEffect(() => {
+    if (settings == null) {
+      return;
+    }
+    if (prevSettingsRef.current === null) {
+      dispatch(addXAxis(settings));
+    } else if (prevSettingsRef.current !== settings) {
+      dispatch(replaceXAxis({
+        prev: prevSettingsRef.current,
+        next: settings
+      }));
+    }
+    prevSettingsRef.current = settings;
+  }, [settings, dispatch]);
+  useLayoutEffect(() => {
+    return () => {
+      if (prevSettingsRef.current) {
+        dispatch(removeXAxis(prevSettingsRef.current));
+        prevSettingsRef.current = null;
+      }
+    };
+  }, [dispatch]);
+  return null;
+}
+var XAxisImpl = props => {
+  var {
+    xAxisId,
+    className
+  } = props;
+  var viewBox = useAppSelector(selectAxisViewBox);
+  var isPanorama = useIsPanorama();
+  var axisType = 'xAxis';
+  var cartesianTickItems = useAppSelector(state => selectTicksOfAxis(state, axisType, xAxisId, isPanorama));
+  var axisSize = useAppSelector(state => selectXAxisSize(state, xAxisId));
+  var position = useAppSelector(state => selectXAxisPosition(state, xAxisId));
+  /*
+   * Here we select settings from the store and prefer to use them instead of the actual props
+   * so that the chart is consistent. If we used the props directly, some components will use axis settings
+   * from state and some from props and because there is a render step between these two, they might be showing different things.
+   * https://github.com/recharts/recharts/issues/6257
+   */
+  var synchronizedSettings = useAppSelector(state => selectXAxisSettingsNoDefaults(state, xAxisId));
+  if (axisSize == null || position == null || synchronizedSettings == null) {
+    return null;
+  }
+  var {
+      dangerouslySetInnerHTML,
+      ticks,
+      scale: del
+    } = props,
+    allOtherProps = _objectWithoutProperties(props, _excluded2);
+  var {
+      id,
+      scale: del2
+    } = synchronizedSettings,
+    restSynchronizedSettings = _objectWithoutProperties(synchronizedSettings, _excluded3);
+  return /*#__PURE__*/React.createElement(CartesianAxis, _extends({}, allOtherProps, restSynchronizedSettings, {
+    x: position.x,
+    y: position.y,
+    width: axisSize.width,
+    height: axisSize.height,
+    className: clsx("recharts-".concat(axisType, " ").concat(axisType), className),
+    viewBox: viewBox,
+    ticks: cartesianTickItems,
+    axisType: axisType
+  }));
+};
+export var xAxisDefaultProps = {
+  allowDataOverflow: implicitXAxis.allowDataOverflow,
+  allowDecimals: implicitXAxis.allowDecimals,
+  allowDuplicatedCategory: implicitXAxis.allowDuplicatedCategory,
+  angle: implicitXAxis.angle,
+  axisLine: defaultCartesianAxisProps.axisLine,
+  height: implicitXAxis.height,
+  hide: false,
+  includeHidden: implicitXAxis.includeHidden,
+  interval: implicitXAxis.interval,
+  label: false,
+  minTickGap: implicitXAxis.minTickGap,
+  mirror: implicitXAxis.mirror,
+  orientation: implicitXAxis.orientation,
+  padding: implicitXAxis.padding,
+  reversed: implicitXAxis.reversed,
+  scale: implicitXAxis.scale,
+  tick: implicitXAxis.tick,
+  tickCount: implicitXAxis.tickCount,
+  tickLine: defaultCartesianAxisProps.tickLine,
+  tickSize: defaultCartesianAxisProps.tickSize,
+  type: implicitXAxis.type,
+  xAxisId: 0
+};
+var XAxisSettingsDispatcher = outsideProps => {
+  var props = resolveDefaultProps(outsideProps, xAxisDefaultProps);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetXAxisSettings, {
+    allowDataOverflow: props.allowDataOverflow,
+    allowDecimals: props.allowDecimals,
+    allowDuplicatedCategory: props.allowDuplicatedCategory,
+    angle: props.angle,
+    dataKey: props.dataKey,
+    domain: props.domain,
+    height: props.height,
+    hide: props.hide,
+    id: props.xAxisId,
+    includeHidden: props.includeHidden,
+    interval: props.interval,
+    minTickGap: props.minTickGap,
+    mirror: props.mirror,
+    name: props.name,
+    orientation: props.orientation,
+    padding: props.padding,
+    reversed: props.reversed,
+    scale: props.scale,
+    tick: props.tick,
+    tickCount: props.tickCount,
+    tickFormatter: props.tickFormatter,
+    ticks: props.ticks,
+    type: props.type,
+    unit: props.unit
+  }), /*#__PURE__*/React.createElement(XAxisImpl, props));
+};
+
+/**
+ * @consumes CartesianViewBoxContext
+ * @provides CartesianLabelContext
+ */
+export var XAxis = /*#__PURE__*/React.memo(XAxisSettingsDispatcher, axisPropsAreEqual);
+XAxis.displayName = 'XAxis';
Index: node_modules/recharts/es6/cartesian/YAxis.js
===================================================================
--- node_modules/recharts/es6/cartesian/YAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/YAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,205 @@
+var _excluded = ["type"],
+  _excluded2 = ["dangerouslySetInnerHTML", "ticks", "scale"],
+  _excluded3 = ["id", "scale"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { isValidElement, useLayoutEffect, useMemo, useRef } from 'react';
+import { clsx } from 'clsx';
+import { CartesianAxis, defaultCartesianAxisProps } from './CartesianAxis';
+import { addYAxis, replaceYAxis, removeYAxis, updateYAxisWidth } from '../state/cartesianAxisSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { implicitYAxis, selectTicksOfAxis, selectYAxisPosition, selectYAxisSettingsNoDefaults, selectYAxisSize } from '../state/selectors/axisSelectors';
+import { selectAxisViewBox } from '../state/selectors/selectChartOffsetInternal';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { isLabelContentAFunction } from '../component/Label';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { axisPropsAreEqual } from '../util/axisPropsAreEqual';
+import { useCartesianChartLayout } from '../context/chartLayoutContext';
+import { getAxisTypeBasedOnLayout } from '../util/getAxisTypeBasedOnLayout';
+function SetYAxisSettings(props) {
+  var dispatch = useAppDispatch();
+  var prevSettingsRef = useRef(null);
+  var layout = useCartesianChartLayout();
+  var {
+      type: typeFromProps
+    } = props,
+    restProps = _objectWithoutProperties(props, _excluded);
+  var evaluatedType = getAxisTypeBasedOnLayout(layout, 'yAxis', typeFromProps);
+  var settings = useMemo(() => {
+    if (evaluatedType == null) {
+      return undefined;
+    }
+    return _objectSpread(_objectSpread({}, restProps), {}, {
+      type: evaluatedType
+    });
+  }, [evaluatedType, restProps]);
+  useLayoutEffect(() => {
+    if (settings == null) {
+      return;
+    }
+    if (prevSettingsRef.current === null) {
+      dispatch(addYAxis(settings));
+    } else if (prevSettingsRef.current !== settings) {
+      dispatch(replaceYAxis({
+        prev: prevSettingsRef.current,
+        next: settings
+      }));
+    }
+    prevSettingsRef.current = settings;
+  }, [settings, dispatch]);
+  useLayoutEffect(() => {
+    return () => {
+      if (prevSettingsRef.current) {
+        dispatch(removeYAxis(prevSettingsRef.current));
+        prevSettingsRef.current = null;
+      }
+    };
+  }, [dispatch]);
+  return null;
+}
+function YAxisImpl(props) {
+  var {
+    yAxisId,
+    className,
+    width,
+    label
+  } = props;
+  var cartesianAxisRef = useRef(null);
+  var labelRef = useRef(null);
+  var viewBox = useAppSelector(selectAxisViewBox);
+  var isPanorama = useIsPanorama();
+  var dispatch = useAppDispatch();
+  var axisType = 'yAxis';
+  var axisSize = useAppSelector(state => selectYAxisSize(state, yAxisId));
+  var position = useAppSelector(state => selectYAxisPosition(state, yAxisId));
+  var cartesianTickItems = useAppSelector(state => selectTicksOfAxis(state, axisType, yAxisId, isPanorama));
+  /*
+   * Here we select settings from the store and prefer to use them instead of the actual props
+   * so that the chart is consistent. If we used the props directly, some components will use axis settings
+   * from state and some from props and because there is a render step between these two, they might be showing different things.
+   * https://github.com/recharts/recharts/issues/6257
+   */
+  var synchronizedSettings = useAppSelector(state => selectYAxisSettingsNoDefaults(state, yAxisId));
+  useLayoutEffect(() => {
+    // No dynamic width calculation is done when width !== 'auto'
+    // or when a function/react element is used for label
+    if (width !== 'auto' || !axisSize || isLabelContentAFunction(label) || /*#__PURE__*/isValidElement(label) || synchronizedSettings == null) {
+      return;
+    }
+    var axisComponent = cartesianAxisRef.current;
+    if (!axisComponent) {
+      return;
+    }
+    var updatedYAxisWidth = axisComponent.getCalculatedWidth();
+
+    // if the width has changed, dispatch an action to update the width
+    if (Math.round(axisSize.width) !== Math.round(updatedYAxisWidth)) {
+      dispatch(updateYAxisWidth({
+        id: yAxisId,
+        width: updatedYAxisWidth
+      }));
+    }
+  }, [
+  // The dependency on cartesianAxisRef.current is not needed because useLayoutEffect will run after every render.
+  // The ref will be populated by then.
+  // To re-run this effect when ticks change, we can depend on the ticks array from the store.
+  cartesianTickItems, axisSize, dispatch, label, yAxisId, width, synchronizedSettings]);
+  if (axisSize == null || position == null || synchronizedSettings == null) {
+    return null;
+  }
+  var {
+      dangerouslySetInnerHTML,
+      ticks,
+      scale: del
+    } = props,
+    allOtherProps = _objectWithoutProperties(props, _excluded2);
+  var {
+      id,
+      scale: del2
+    } = synchronizedSettings,
+    restSynchronizedSettings = _objectWithoutProperties(synchronizedSettings, _excluded3);
+  return /*#__PURE__*/React.createElement(CartesianAxis, _extends({}, allOtherProps, restSynchronizedSettings, {
+    ref: cartesianAxisRef,
+    labelRef: labelRef,
+    x: position.x,
+    y: position.y,
+    tickTextProps: width === 'auto' ? {
+      width: undefined
+    } : {
+      width
+    },
+    width: axisSize.width,
+    height: axisSize.height,
+    className: clsx("recharts-".concat(axisType, " ").concat(axisType), className),
+    viewBox: viewBox,
+    ticks: cartesianTickItems,
+    axisType: axisType
+  }));
+}
+export var yAxisDefaultProps = {
+  allowDataOverflow: implicitYAxis.allowDataOverflow,
+  allowDecimals: implicitYAxis.allowDecimals,
+  allowDuplicatedCategory: implicitYAxis.allowDuplicatedCategory,
+  angle: implicitYAxis.angle,
+  axisLine: defaultCartesianAxisProps.axisLine,
+  hide: false,
+  includeHidden: implicitYAxis.includeHidden,
+  interval: implicitYAxis.interval,
+  label: false,
+  minTickGap: implicitYAxis.minTickGap,
+  mirror: implicitYAxis.mirror,
+  orientation: implicitYAxis.orientation,
+  padding: implicitYAxis.padding,
+  reversed: implicitYAxis.reversed,
+  scale: implicitYAxis.scale,
+  tick: implicitYAxis.tick,
+  tickCount: implicitYAxis.tickCount,
+  tickLine: defaultCartesianAxisProps.tickLine,
+  tickSize: defaultCartesianAxisProps.tickSize,
+  type: implicitYAxis.type,
+  width: implicitYAxis.width,
+  yAxisId: 0
+};
+var YAxisSettingsDispatcher = outsideProps => {
+  var props = resolveDefaultProps(outsideProps, yAxisDefaultProps);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetYAxisSettings, {
+    interval: props.interval,
+    id: props.yAxisId,
+    scale: props.scale,
+    type: props.type,
+    domain: props.domain,
+    allowDataOverflow: props.allowDataOverflow,
+    dataKey: props.dataKey,
+    allowDuplicatedCategory: props.allowDuplicatedCategory,
+    allowDecimals: props.allowDecimals,
+    tickCount: props.tickCount,
+    padding: props.padding,
+    includeHidden: props.includeHidden,
+    reversed: props.reversed,
+    ticks: props.ticks,
+    width: props.width,
+    orientation: props.orientation,
+    mirror: props.mirror,
+    hide: props.hide,
+    unit: props.unit,
+    name: props.name,
+    angle: props.angle,
+    minTickGap: props.minTickGap,
+    tick: props.tick,
+    tickFormatter: props.tickFormatter
+  }), /*#__PURE__*/React.createElement(YAxisImpl, props));
+};
+
+/**
+ * @consumes CartesianViewBoxContext
+ * @provides CartesianLabelContext
+ */
+export var YAxis = /*#__PURE__*/React.memo(YAxisSettingsDispatcher, axisPropsAreEqual);
+YAxis.displayName = 'YAxis';
Index: node_modules/recharts/es6/cartesian/ZAxis.js
===================================================================
--- node_modules/recharts/es6/cartesian/ZAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/ZAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,61 @@
+import * as React from 'react';
+import { useLayoutEffect, useRef } from 'react';
+import { addZAxis, removeZAxis, replaceZAxis } from '../state/cartesianAxisSlice';
+import { useAppDispatch } from '../state/hooks';
+import { implicitZAxis } from '../state/selectors/axisSelectors';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+function SetZAxisSettings(settings) {
+  var dispatch = useAppDispatch();
+  var prevSettingsRef = useRef(null);
+  useLayoutEffect(() => {
+    if (prevSettingsRef.current === null) {
+      dispatch(addZAxis(settings));
+    } else if (prevSettingsRef.current !== settings) {
+      dispatch(replaceZAxis({
+        prev: prevSettingsRef.current,
+        next: settings
+      }));
+    }
+    prevSettingsRef.current = settings;
+  }, [settings, dispatch]);
+  useLayoutEffect(() => {
+    return () => {
+      if (prevSettingsRef.current) {
+        dispatch(removeZAxis(prevSettingsRef.current));
+        prevSettingsRef.current = null;
+      }
+    };
+  }, [dispatch]);
+  return null;
+}
+export var zAxisDefaultProps = {
+  zAxisId: 0,
+  range: implicitZAxis.range,
+  scale: implicitZAxis.scale,
+  type: implicitZAxis.type
+};
+
+/**
+ * Virtual axis, does not render anything itself. Has no ticks, grid lines, or labels.
+ * Useful for dynamically setting Scatter point size, based on data.
+ *
+ * @consumes CartesianViewBoxContext
+ */
+export function ZAxis(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, zAxisDefaultProps);
+  return /*#__PURE__*/React.createElement(SetZAxisSettings, {
+    domain: props.domain,
+    id: props.zAxisId,
+    dataKey: props.dataKey,
+    name: props.name,
+    unit: props.unit,
+    range: props.range,
+    scale: props.scale,
+    type: props.type,
+    allowDuplicatedCategory: implicitZAxis.allowDuplicatedCategory,
+    allowDataOverflow: implicitZAxis.allowDataOverflow,
+    reversed: implicitZAxis.reversed,
+    includeHidden: implicitZAxis.includeHidden
+  });
+}
+ZAxis.displayName = 'ZAxis';
Index: node_modules/recharts/es6/cartesian/getCartesianPosition.js
===================================================================
--- node_modules/recharts/es6/cartesian/getCartesianPosition.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/getCartesianPosition.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,195 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { getPercentValue, isNumber, isPercent } from '../util/DataUtils';
+import { cartesianViewBoxToTrapezoid } from '../context/chartLayoutContext';
+/**
+ * Calculates the position and alignment for a generic element in a Cartesian coordinate system.
+ *
+ * @param options - The options including viewBox, position, and offset.
+ * @returns The calculated x, y, alignment and size.
+ */
+export var getCartesianPosition = options => {
+  var {
+    viewBox,
+    position,
+    offset = 0,
+    parentViewBox: parentViewBoxFromOptions,
+    clamp
+  } = options;
+  var {
+    x,
+    y,
+    height,
+    upperWidth,
+    lowerWidth
+  } = cartesianViewBoxToTrapezoid(viewBox);
+
+  // Funnel.tsx provides a viewBox where `x` is the top-left of the trapezoid shape.
+  var upperX = x;
+  // The trapezoid is centered, so we can calculate the other corners from the top-left.
+  var lowerX = x + (upperWidth - lowerWidth) / 2;
+  // middleX is the x-coordinate of the left edge at the vertical midpoint of the trapezoid.
+  var middleX = (upperX + lowerX) / 2;
+  // The width of the trapezoid at its vertical midpoint.
+  var midHeightWidth = (upperWidth + lowerWidth) / 2;
+  // The center x-coordinate is constant for the entire height of the trapezoid.
+  var centerX = upperX + upperWidth / 2;
+
+  // Define vertical offsets and position inverts based on the value being positive or negative.
+  // This allows labels to be positioned correctly for bars with negative height.
+  var verticalSign = height >= 0 ? 1 : -1;
+  var verticalOffset = verticalSign * offset;
+  var verticalEnd = verticalSign > 0 ? 'end' : 'start';
+  var verticalStart = verticalSign > 0 ? 'start' : 'end';
+
+  // Define horizontal offsets and position inverts based on the value being positive or negative.
+  // This allows labels to be positioned correctly for bars with negative width.
+  var horizontalSign = upperWidth >= 0 ? 1 : -1;
+  var horizontalOffset = horizontalSign * offset;
+  var horizontalEnd = horizontalSign > 0 ? 'end' : 'start';
+  var horizontalStart = horizontalSign > 0 ? 'start' : 'end';
+
+  // We assume parentViewBox is generic if provided.
+  // The user has asserted that parentViewBox will be CartesianViewBoxRequired if present.
+  var parentViewBox = parentViewBoxFromOptions;
+  if (position === 'top') {
+    var result = {
+      x: upperX + upperWidth / 2,
+      y: y - verticalOffset,
+      horizontalAnchor: 'middle',
+      verticalAnchor: verticalEnd
+    };
+    if (clamp && parentViewBox) {
+      result.height = Math.max(y - parentViewBox.y, 0);
+      result.width = upperWidth;
+    }
+    return result;
+  }
+  if (position === 'bottom') {
+    var _result = {
+      x: lowerX + lowerWidth / 2,
+      y: y + height + verticalOffset,
+      horizontalAnchor: 'middle',
+      verticalAnchor: verticalStart
+    };
+    if (clamp && parentViewBox) {
+      _result.height = Math.max(parentViewBox.y + parentViewBox.height - (y + height), 0);
+      _result.width = lowerWidth;
+    }
+    return _result;
+  }
+  if (position === 'left') {
+    var _result2 = {
+      x: middleX - horizontalOffset,
+      y: y + height / 2,
+      horizontalAnchor: horizontalEnd,
+      verticalAnchor: 'middle'
+    };
+    if (clamp && parentViewBox) {
+      _result2.width = Math.max(_result2.x - parentViewBox.x, 0);
+      _result2.height = height;
+    }
+    return _result2;
+  }
+  if (position === 'right') {
+    var _result3 = {
+      x: middleX + midHeightWidth + horizontalOffset,
+      y: y + height / 2,
+      horizontalAnchor: horizontalStart,
+      verticalAnchor: 'middle'
+    };
+    if (clamp && parentViewBox) {
+      _result3.width = Math.max(parentViewBox.x + parentViewBox.width - _result3.x, 0);
+      _result3.height = height;
+    }
+    return _result3;
+  }
+  var sizeAttrs = clamp && parentViewBox ? {
+    width: midHeightWidth,
+    height
+  } : {};
+  if (position === 'insideLeft') {
+    return _objectSpread({
+      x: middleX + horizontalOffset,
+      y: y + height / 2,
+      horizontalAnchor: horizontalStart,
+      verticalAnchor: 'middle'
+    }, sizeAttrs);
+  }
+  if (position === 'insideRight') {
+    return _objectSpread({
+      x: middleX + midHeightWidth - horizontalOffset,
+      y: y + height / 2,
+      horizontalAnchor: horizontalEnd,
+      verticalAnchor: 'middle'
+    }, sizeAttrs);
+  }
+  if (position === 'insideTop') {
+    return _objectSpread({
+      x: upperX + upperWidth / 2,
+      y: y + verticalOffset,
+      horizontalAnchor: 'middle',
+      verticalAnchor: verticalStart
+    }, sizeAttrs);
+  }
+  if (position === 'insideBottom') {
+    return _objectSpread({
+      x: lowerX + lowerWidth / 2,
+      y: y + height - verticalOffset,
+      horizontalAnchor: 'middle',
+      verticalAnchor: verticalEnd
+    }, sizeAttrs);
+  }
+  if (position === 'insideTopLeft') {
+    return _objectSpread({
+      x: upperX + horizontalOffset,
+      y: y + verticalOffset,
+      horizontalAnchor: horizontalStart,
+      verticalAnchor: verticalStart
+    }, sizeAttrs);
+  }
+  if (position === 'insideTopRight') {
+    return _objectSpread({
+      x: upperX + upperWidth - horizontalOffset,
+      y: y + verticalOffset,
+      horizontalAnchor: horizontalEnd,
+      verticalAnchor: verticalStart
+    }, sizeAttrs);
+  }
+  if (position === 'insideBottomLeft') {
+    return _objectSpread({
+      x: lowerX + horizontalOffset,
+      y: y + height - verticalOffset,
+      horizontalAnchor: horizontalStart,
+      verticalAnchor: verticalEnd
+    }, sizeAttrs);
+  }
+  if (position === 'insideBottomRight') {
+    return _objectSpread({
+      x: lowerX + lowerWidth - horizontalOffset,
+      y: y + height - verticalOffset,
+      horizontalAnchor: horizontalEnd,
+      verticalAnchor: verticalEnd
+    }, sizeAttrs);
+  }
+  if (!!position && typeof position === 'object' && (isNumber(position.x) || isPercent(position.x)) && (isNumber(position.y) || isPercent(position.y))) {
+    // TODO: This is not quite right. The width of the trapezoid changes with y.
+    // A percentage-based x should be relative to the width at that y.
+    // For now, we use the mid-height width as a reasonable approximation.
+    return _objectSpread({
+      x: x + getPercentValue(position.x, midHeightWidth),
+      y: y + getPercentValue(position.y, height),
+      horizontalAnchor: 'end',
+      verticalAnchor: 'end'
+    }, sizeAttrs);
+  }
+  return _objectSpread({
+    x: centerX,
+    y: y + height / 2,
+    horizontalAnchor: 'middle',
+    verticalAnchor: 'middle'
+  }, sizeAttrs);
+};
Index: node_modules/recharts/es6/cartesian/getEquidistantTicks.js
===================================================================
--- node_modules/recharts/es6/cartesian/getEquidistantTicks.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/getEquidistantTicks.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,135 @@
+import { isVisible } from '../util/TickUtils';
+import { getEveryNth } from '../util/getEveryNth';
+export function getEquidistantTicks(sign, boundaries, getTickSize, ticks, minTickGap) {
+  // If the ticks are readonly, then the slice might not be necessary
+  var result = (ticks || []).slice();
+  var {
+    start: initialStart,
+    end
+  } = boundaries;
+  var index = 0;
+  // Premature optimisation idea 1: Estimate a lower bound, and start from there.
+  // For now, start from every tick
+  var stepsize = 1;
+  var start = initialStart;
+  var _loop = function _loop() {
+      // Given stepsize, evaluate whether every stepsize-th tick can be shown.
+      // If it can not, then increase the stepsize by 1, and try again.
+
+      var entry = ticks === null || ticks === void 0 ? void 0 : ticks[index];
+
+      // Break condition - If we have evaluated all the ticks, then we are done.
+      if (entry === undefined) {
+        return {
+          v: getEveryNth(ticks, stepsize)
+        };
+      }
+
+      // Check if the element collides with the next element
+      var i = index;
+      var size;
+      var getSize = () => {
+        if (size === undefined) {
+          size = getTickSize(entry, i);
+        }
+        return size;
+      };
+      var tickCoord = entry.coordinate;
+      // We will always show the first tick.
+      var isShow = index === 0 || isVisible(sign, tickCoord, getSize, start, end);
+      if (!isShow) {
+        // Start all over with a larger stepsize
+        index = 0;
+        start = initialStart;
+        stepsize += 1;
+      }
+      if (isShow) {
+        // If it can be shown, update the start
+        start = tickCoord + sign * (getSize() / 2 + minTickGap);
+        index += stepsize;
+      }
+    },
+    _ret;
+  while (stepsize <= result.length) {
+    _ret = _loop();
+    if (_ret) return _ret.v;
+  }
+  return [];
+}
+export function getEquidistantPreserveEndTicks(sign, boundaries, getTickSize, ticks, minTickGap) {
+  // If the ticks are readonly, then the slice might not be necessary
+  // Reworked logic for getEquidistantPreserveEndTicks
+  var result = (ticks || []).slice();
+  var len = result.length;
+  if (len === 0) {
+    return [];
+  }
+  var {
+    start: initialStart,
+    end
+  } = boundaries;
+
+  // Start with stepsize = 1 (every tick) up to the maximum possible stepsize (len)
+  for (var stepsize = 1; stepsize <= len; stepsize++) {
+    // 1. Calculate the offset so the last tick (index len - 1) is always included in the sequence.
+    var offset = (len - 1) % stepsize;
+    var start = initialStart; // `start` tracks the coordinate of the last successfully drawn tick + gap
+    var ok = true;
+
+    // 2. Iterate through the end-anchored sequence: offset, offset + stepsize, ..., len - 1
+    var _loop2 = function _loop2() {
+        var entry = ticks[index];
+        if (entry == null) {
+          return 0; // continue
+        }
+        var i = index;
+        var size;
+
+        // Use a function to get size, as in the original code
+        var getSize = () => {
+          if (size === undefined) {
+            size = getTickSize(entry, i);
+          }
+          return size;
+        };
+        var tickCoord = entry.coordinate;
+
+        // 3. Apply visibility logic (including the first tick special case)
+        // The reviewer says *not* to unconditionally bypass checks for the last tick.
+        var isShow = index === offset || isVisible(sign, tickCoord, getSize, start, end);
+        if (!isShow) {
+          // If any tick in this end-anchored sequence fails visibility/collision,
+          // reject this stepsize and move to the next iteration (larger stepsize).
+          ok = false;
+          return 1; // break
+        }
+
+        // 4. If showable, update the 'start' coordinate for the next collision check
+        if (isShow) {
+          start = tickCoord + sign * (getSize() / 2 + minTickGap);
+        }
+      },
+      _ret2;
+    for (var index = offset; index < len; index += stepsize) {
+      _ret2 = _loop2();
+      if (_ret2 === 0) continue;
+      if (_ret2 === 1) break;
+    }
+
+    // 5. If the entire sequence for this stepsize passed the visibility check, return the result
+    if (ok) {
+      // Build the final result array explicitly using the validated stepsize and offset.
+      var finalTicks = [];
+      for (var _index = offset; _index < len; _index += stepsize) {
+        var tick = ticks[_index];
+        if (tick != null) {
+          finalTicks.push(tick);
+        }
+      }
+      return finalTicks;
+    }
+  }
+
+  // If no stepsize works (this shouldn't happen unless minTickGap is huge), return an empty array.
+  return [];
+}
Index: node_modules/recharts/es6/cartesian/getTicks.js
===================================================================
--- node_modules/recharts/es6/cartesian/getTicks.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/cartesian/getTicks.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,180 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { mathSign, isNumber } from '../util/DataUtils';
+import { getStringSize } from '../util/DOMUtils';
+import { Global } from '../util/Global';
+import { isVisible, getTickBoundaries, getNumberIntervalTicks, getAngledTickWidth } from '../util/TickUtils';
+import { getEquidistantTicks, getEquidistantPreserveEndTicks } from './getEquidistantTicks';
+function getTicksEnd(sign, boundaries, getTickSize, ticks, minTickGap) {
+  var result = (ticks || []).slice();
+  var len = result.length;
+  var {
+    start
+  } = boundaries;
+  var {
+    end
+  } = boundaries;
+  var _loop = function _loop(i) {
+    var initialEntry = result[i];
+    if (initialEntry == null) {
+      return 1; // continue
+    }
+    var entry = initialEntry;
+    var size;
+    var getSize = () => {
+      if (size === undefined) {
+        size = getTickSize(initialEntry, i);
+      }
+      return size;
+    };
+    if (i === len - 1) {
+      var gap = sign * (entry.coordinate + sign * getSize() / 2 - end);
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: gap > 0 ? entry.coordinate - gap * sign : entry.coordinate
+      });
+    } else {
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: entry.coordinate
+      });
+    }
+    if (entry.tickCoord != null) {
+      var isShow = isVisible(sign, entry.tickCoord, getSize, start, end);
+      if (isShow) {
+        end = entry.tickCoord - sign * (getSize() / 2 + minTickGap);
+        result[i] = _objectSpread(_objectSpread({}, entry), {}, {
+          isShow: true
+        });
+      }
+    }
+  };
+  for (var i = len - 1; i >= 0; i--) {
+    if (_loop(i)) continue;
+  }
+  return result;
+}
+function getTicksStart(sign, boundaries, getTickSize, ticks, minTickGap, preserveEnd) {
+  // This method is mutating the array so clone is indeed necessary here
+  var result = (ticks || []).slice();
+  var len = result.length;
+  var {
+    start,
+    end
+  } = boundaries;
+  if (preserveEnd) {
+    // Try to guarantee the tail to be displayed
+    var tail = ticks[len - 1];
+    if (tail != null) {
+      var tailSize = getTickSize(tail, len - 1);
+      var tailGap = sign * (tail.coordinate + sign * tailSize / 2 - end);
+      result[len - 1] = tail = _objectSpread(_objectSpread({}, tail), {}, {
+        tickCoord: tailGap > 0 ? tail.coordinate - tailGap * sign : tail.coordinate
+      });
+      if (tail.tickCoord != null) {
+        var isTailShow = isVisible(sign, tail.tickCoord, () => tailSize, start, end);
+        if (isTailShow) {
+          end = tail.tickCoord - sign * (tailSize / 2 + minTickGap);
+          result[len - 1] = _objectSpread(_objectSpread({}, tail), {}, {
+            isShow: true
+          });
+        }
+      }
+    }
+  }
+  var count = preserveEnd ? len - 1 : len;
+  var _loop2 = function _loop2(i) {
+    var initialEntry = result[i];
+    if (initialEntry == null) {
+      return 1; // continue
+    }
+    var entry = initialEntry;
+    var size;
+    var getSize = () => {
+      if (size === undefined) {
+        size = getTickSize(initialEntry, i);
+      }
+      return size;
+    };
+    if (i === 0) {
+      var gap = sign * (entry.coordinate - sign * getSize() / 2 - start);
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: gap < 0 ? entry.coordinate - gap * sign : entry.coordinate
+      });
+    } else {
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: entry.coordinate
+      });
+    }
+    if (entry.tickCoord != null) {
+      var isShow = isVisible(sign, entry.tickCoord, getSize, start, end);
+      if (isShow) {
+        start = entry.tickCoord + sign * (getSize() / 2 + minTickGap);
+        result[i] = _objectSpread(_objectSpread({}, entry), {}, {
+          isShow: true
+        });
+      }
+    }
+  };
+  for (var i = 0; i < count; i++) {
+    if (_loop2(i)) continue;
+  }
+  return result;
+}
+export function getTicks(props, fontSize, letterSpacing) {
+  var {
+    tick,
+    ticks,
+    viewBox,
+    minTickGap,
+    orientation,
+    interval,
+    tickFormatter,
+    unit,
+    angle
+  } = props;
+  if (!ticks || !ticks.length || !tick) {
+    return [];
+  }
+  if (isNumber(interval) || Global.isSsr) {
+    var _getNumberIntervalTic;
+    return (_getNumberIntervalTic = getNumberIntervalTicks(ticks, isNumber(interval) ? interval : 0)) !== null && _getNumberIntervalTic !== void 0 ? _getNumberIntervalTic : [];
+  }
+  var candidates = [];
+  var sizeKey = orientation === 'top' || orientation === 'bottom' ? 'width' : 'height';
+  var unitSize = unit && sizeKey === 'width' ? getStringSize(unit, {
+    fontSize,
+    letterSpacing
+  }) : {
+    width: 0,
+    height: 0
+  };
+  var getTickSize = (content, index) => {
+    var value = typeof tickFormatter === 'function' ? tickFormatter(content.value, index) : content.value;
+    // Recharts only supports angles when sizeKey === 'width'
+    return sizeKey === 'width' ? getAngledTickWidth(getStringSize(value, {
+      fontSize,
+      letterSpacing
+    }), unitSize, angle) : getStringSize(value, {
+      fontSize,
+      letterSpacing
+    })[sizeKey];
+  };
+  var tick0 = ticks[0];
+  var tick1 = ticks[1];
+  var sign = ticks.length >= 2 && tick0 != null && tick1 != null ? mathSign(tick1.coordinate - tick0.coordinate) : 1;
+  var boundaries = getTickBoundaries(viewBox, sign, sizeKey);
+  if (interval === 'equidistantPreserveStart') {
+    return getEquidistantTicks(sign, boundaries, getTickSize, ticks, minTickGap);
+  }
+  if (interval === 'equidistantPreserveEnd') {
+    return getEquidistantPreserveEndTicks(sign, boundaries, getTickSize, ticks, minTickGap);
+  }
+  if (interval === 'preserveStart' || interval === 'preserveStartEnd') {
+    candidates = getTicksStart(sign, boundaries, getTickSize, ticks, minTickGap, interval === 'preserveStartEnd');
+  } else {
+    candidates = getTicksEnd(sign, boundaries, getTickSize, ticks, minTickGap);
+  }
+  return candidates.filter(entry => entry.isShow);
+}
Index: node_modules/recharts/es6/chart/AreaChart.js
===================================================================
--- node_modules/recharts/es6/chart/AreaChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/AreaChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['axis'];
+
+/**
+ * @consumes ResponsiveContainerContext
+ * @provides CartesianViewBoxContext
+ * @provides CartesianChartContext
+ */
+export var AreaChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "AreaChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/BarChart.js
===================================================================
--- node_modules/recharts/es6/chart/BarChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/BarChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['axis', 'item'];
+
+/**
+ * @consumes ResponsiveContainerContext
+ * @provides CartesianViewBoxContext
+ * @provides CartesianChartContext
+ */
+export var BarChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "BarChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/CartesianChart.js
===================================================================
--- node_modules/recharts/es6/chart/CartesianChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/CartesianChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,76 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { RechartsStoreProvider } from '../state/RechartsStoreProvider';
+import { ChartDataContextProvider } from '../context/chartDataContext';
+import { ReportMainChartProps } from '../state/ReportMainChartProps';
+import { ReportChartProps } from '../state/ReportChartProps';
+import { CategoricalChart } from './CategoricalChart';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+var defaultMargin = {
+  top: 5,
+  right: 5,
+  bottom: 5,
+  left: 5
+};
+export var defaultCartesianChartProps = {
+  accessibilityLayer: true,
+  barCategoryGap: '10%',
+  barGap: 4,
+  layout: 'horizontal',
+  margin: defaultMargin,
+  responsive: false,
+  reverseStackOrder: false,
+  stackOffset: 'none',
+  syncMethod: 'index'
+};
+
+/**
+ * These are one-time, immutable options that decide the chart's behavior.
+ * Users who wish to call CartesianChart may decide to pass these options explicitly,
+ * but usually we would expect that they use one of the convenience components like BarChart, LineChart, etc.
+ */
+
+export var CartesianChart = /*#__PURE__*/forwardRef(function CartesianChart(props, ref) {
+  var _categoricalChartProp;
+  var rootChartProps = resolveDefaultProps(props.categoricalChartProps, defaultCartesianChartProps);
+  var {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher,
+    categoricalChartProps
+  } = props;
+  var options = {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher,
+    eventEmitter: undefined
+  };
+  return /*#__PURE__*/React.createElement(RechartsStoreProvider, {
+    preloadedState: {
+      options
+    },
+    reduxStoreName: (_categoricalChartProp = categoricalChartProps.id) !== null && _categoricalChartProp !== void 0 ? _categoricalChartProp : chartName
+  }, /*#__PURE__*/React.createElement(ChartDataContextProvider, {
+    chartData: categoricalChartProps.data
+  }), /*#__PURE__*/React.createElement(ReportMainChartProps, {
+    layout: rootChartProps.layout,
+    margin: rootChartProps.margin
+  }), /*#__PURE__*/React.createElement(ReportChartProps, {
+    baseValue: rootChartProps.baseValue,
+    accessibilityLayer: rootChartProps.accessibilityLayer,
+    barCategoryGap: rootChartProps.barCategoryGap,
+    maxBarSize: rootChartProps.maxBarSize,
+    stackOffset: rootChartProps.stackOffset,
+    barGap: rootChartProps.barGap,
+    barSize: rootChartProps.barSize,
+    syncId: rootChartProps.syncId,
+    syncMethod: rootChartProps.syncMethod,
+    className: rootChartProps.className,
+    reverseStackOrder: rootChartProps.reverseStackOrder
+  }), /*#__PURE__*/React.createElement(CategoricalChart, _extends({}, rootChartProps, {
+    ref: ref
+  })));
+});
Index: node_modules/recharts/es6/chart/CategoricalChart.js
===================================================================
--- node_modules/recharts/es6/chart/CategoricalChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/CategoricalChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,63 @@
+var _excluded = ["width", "height", "responsive", "children", "className", "style", "compact", "title", "desc"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { RootSurface } from '../container/RootSurface';
+import { RechartsWrapper } from './RechartsWrapper';
+import { ClipPathProvider } from '../container/ClipPathProvider';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { ReportChartSize } from '../context/chartLayoutContext';
+export var CategoricalChart = /*#__PURE__*/forwardRef((props, ref) => {
+  var {
+      width,
+      height,
+      responsive,
+      children,
+      className,
+      style,
+      compact,
+      title,
+      desc
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var attrs = svgPropertiesNoEvents(others);
+
+  /*
+   * The "compact" mode is used as the panorama within Brush.
+   * However because `compact` is a public prop, let's assume that it can render outside of Brush too.
+   */
+  if (compact) {
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportChartSize, {
+      width: width,
+      height: height
+    }), /*#__PURE__*/React.createElement(RootSurface, {
+      otherAttributes: attrs,
+      title: title,
+      desc: desc
+    }, children));
+  }
+  return /*#__PURE__*/React.createElement(RechartsWrapper, {
+    className: className,
+    style: style,
+    width: width,
+    height: height,
+    responsive: responsive !== null && responsive !== void 0 ? responsive : false,
+    onClick: props.onClick,
+    onMouseLeave: props.onMouseLeave,
+    onMouseEnter: props.onMouseEnter,
+    onMouseMove: props.onMouseMove,
+    onMouseDown: props.onMouseDown,
+    onMouseUp: props.onMouseUp,
+    onContextMenu: props.onContextMenu,
+    onDoubleClick: props.onDoubleClick,
+    onTouchStart: props.onTouchStart,
+    onTouchMove: props.onTouchMove,
+    onTouchEnd: props.onTouchEnd
+  }, /*#__PURE__*/React.createElement(RootSurface, {
+    otherAttributes: attrs,
+    title: title,
+    desc: desc,
+    ref: ref
+  }, /*#__PURE__*/React.createElement(ClipPathProvider, null, children)));
+});
Index: node_modules/recharts/es6/chart/ComposedChart.js
===================================================================
--- node_modules/recharts/es6/chart/ComposedChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/ComposedChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['axis'];
+
+/**
+ * @consumes ResponsiveContainerContext
+ * @provides CartesianViewBoxContext
+ * @provides CartesianChartContext
+ */
+export var ComposedChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "ComposedChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/FunnelChart.js
===================================================================
--- node_modules/recharts/es6/chart/FunnelChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/FunnelChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['item'];
+
+/**
+ * @consumes ResponsiveContainerContext
+ * @provides CartesianViewBoxContext
+ * @provides CartesianChartContext
+ */
+export var FunnelChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "FunnelChart",
+    defaultTooltipEventType: "item",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/LineChart.js
===================================================================
--- node_modules/recharts/es6/chart/LineChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/LineChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['axis'];
+
+/**
+ * @consumes ResponsiveContainerContext
+ * @provides CartesianViewBoxContext
+ * @provides CartesianChartContext
+ */
+export var LineChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "LineChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/PieChart.js
===================================================================
--- node_modules/recharts/es6/chart/PieChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/PieChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,33 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { defaultPolarChartProps, PolarChart } from './PolarChart';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+var allowedTooltipTypes = ['item'];
+export var defaultPieChartProps = _objectSpread(_objectSpread({}, defaultPolarChartProps), {}, {
+  layout: 'centric',
+  startAngle: 0,
+  endAngle: 360
+});
+
+/**
+ * @consumes ResponsiveContainerContext
+ * @provides PolarViewBoxContext
+ * @provides PolarChartContext
+ */
+export var PieChart = /*#__PURE__*/forwardRef((props, ref) => {
+  var propsWithDefaults = resolveDefaultProps(props, defaultPieChartProps);
+  return /*#__PURE__*/React.createElement(PolarChart, {
+    chartName: "PieChart",
+    defaultTooltipEventType: "item",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: propsWithDefaults,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/PolarChart.js
===================================================================
--- node_modules/recharts/es6/chart/PolarChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/PolarChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,107 @@
+var _excluded = ["layout"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import { forwardRef } from 'react';
+import * as React from 'react';
+import { RechartsStoreProvider } from '../state/RechartsStoreProvider';
+import { ChartDataContextProvider } from '../context/chartDataContext';
+import { ReportMainChartProps } from '../state/ReportMainChartProps';
+import { ReportChartProps } from '../state/ReportChartProps';
+import { ReportPolarOptions } from '../state/ReportPolarOptions';
+import { CategoricalChart } from './CategoricalChart';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+var defaultMargin = {
+  top: 5,
+  right: 5,
+  bottom: 5,
+  left: 5
+};
+
+/**
+ * These default props are the same for all PolarChart components.
+ */
+export var defaultPolarChartProps = {
+  accessibilityLayer: true,
+  stackOffset: 'none',
+  barCategoryGap: '10%',
+  barGap: 4,
+  margin: defaultMargin,
+  reverseStackOrder: false,
+  syncMethod: 'index',
+  layout: 'radial',
+  responsive: false,
+  cx: '50%',
+  cy: '50%',
+  innerRadius: 0,
+  outerRadius: '80%'
+};
+
+/**
+ * These props are required for the PolarChart to function correctly.
+ * Users usually would not need to specify these explicitly,
+ * because the convenience components like PieChart, RadarChart, etc.
+ * will provide these defaults.
+ * We can't have the defaults in this file because each of those convenience components
+ * have their own opinions about what they should be.
+ */
+
+/**
+ * These are one-time, immutable options that decide the chart's behavior.
+ * Users who wish to call CartesianChart may decide to pass these options explicitly,
+ * but usually we would expect that they use one of the convenience components like PieChart, RadarChart, etc.
+ */
+
+export var PolarChart = /*#__PURE__*/forwardRef(function PolarChart(props, ref) {
+  var _polarChartProps$id;
+  var polarChartProps = resolveDefaultProps(props.categoricalChartProps, defaultPolarChartProps);
+  var {
+      layout
+    } = polarChartProps,
+    otherCategoricalProps = _objectWithoutProperties(polarChartProps, _excluded);
+  var {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher
+  } = props;
+  var options = {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher,
+    eventEmitter: undefined
+  };
+  return /*#__PURE__*/React.createElement(RechartsStoreProvider, {
+    preloadedState: {
+      options
+    },
+    reduxStoreName: (_polarChartProps$id = polarChartProps.id) !== null && _polarChartProps$id !== void 0 ? _polarChartProps$id : chartName
+  }, /*#__PURE__*/React.createElement(ChartDataContextProvider, {
+    chartData: polarChartProps.data
+  }), /*#__PURE__*/React.createElement(ReportMainChartProps, {
+    layout: layout,
+    margin: polarChartProps.margin
+  }), /*#__PURE__*/React.createElement(ReportChartProps, {
+    baseValue: undefined,
+    accessibilityLayer: polarChartProps.accessibilityLayer,
+    barCategoryGap: polarChartProps.barCategoryGap,
+    maxBarSize: polarChartProps.maxBarSize,
+    stackOffset: polarChartProps.stackOffset,
+    barGap: polarChartProps.barGap,
+    barSize: polarChartProps.barSize,
+    syncId: polarChartProps.syncId,
+    syncMethod: polarChartProps.syncMethod,
+    className: polarChartProps.className,
+    reverseStackOrder: polarChartProps.reverseStackOrder
+  }), /*#__PURE__*/React.createElement(ReportPolarOptions, {
+    cx: polarChartProps.cx,
+    cy: polarChartProps.cy,
+    startAngle: polarChartProps.startAngle,
+    endAngle: polarChartProps.endAngle,
+    innerRadius: polarChartProps.innerRadius,
+    outerRadius: polarChartProps.outerRadius
+  }), /*#__PURE__*/React.createElement(CategoricalChart, _extends({}, otherCategoricalProps, {
+    ref: ref
+  })));
+});
Index: node_modules/recharts/es6/chart/RadarChart.js
===================================================================
--- node_modules/recharts/es6/chart/RadarChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/RadarChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,32 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { defaultPolarChartProps, PolarChart } from './PolarChart';
+var allowedTooltipTypes = ['axis'];
+export var defaultRadarChartProps = _objectSpread(_objectSpread({}, defaultPolarChartProps), {}, {
+  layout: 'centric',
+  startAngle: 90,
+  endAngle: -270
+});
+/**
+ * @consumes ResponsiveContainerContext
+ * @provides PolarViewBoxContext
+ * @provides PolarChartContext
+ */
+export var RadarChart = /*#__PURE__*/forwardRef((props, ref) => {
+  var propsWithDefaults = resolveDefaultProps(props, defaultRadarChartProps);
+  return /*#__PURE__*/React.createElement(PolarChart, {
+    chartName: "RadarChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: propsWithDefaults,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/RadialBarChart.js
===================================================================
--- node_modules/recharts/es6/chart/RadialBarChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/RadialBarChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,33 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { defaultPolarChartProps, PolarChart } from './PolarChart';
+var allowedTooltipTypes = ['axis', 'item'];
+export var defaultRadialBarChartProps = _objectSpread(_objectSpread({}, defaultPolarChartProps), {}, {
+  layout: 'radial',
+  startAngle: 0,
+  endAngle: 360
+});
+
+/**
+ * @consumes ResponsiveContainerContext
+ * @provides PolarViewBoxContext
+ * @provides PolarChartContext
+ */
+export var RadialBarChart = /*#__PURE__*/forwardRef((props, ref) => {
+  var propsWithDefaults = resolveDefaultProps(props, defaultRadialBarChartProps);
+  return /*#__PURE__*/React.createElement(PolarChart, {
+    chartName: "RadialBarChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: propsWithDefaults,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/RechartsWrapper.js
===================================================================
--- node_modules/recharts/es6/chart/RechartsWrapper.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/RechartsWrapper.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,342 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { mouseLeaveChart } from '../state/tooltipSlice';
+import { useAppDispatch } from '../state/hooks';
+import { mouseClickAction, mouseMoveAction } from '../state/mouseEventsMiddleware';
+import { useSynchronisedEventsFromOtherCharts } from '../synchronisation/useChartSynchronisation';
+import { focusAction, keyDownAction } from '../state/keyboardEventsMiddleware';
+import { useReportScale } from '../util/useReportScale';
+import { externalEventAction } from '../state/externalEventsMiddleware';
+import { touchEventAction } from '../state/touchEventsMiddleware';
+import { TooltipPortalContext } from '../context/tooltipPortalContext';
+import { LegendPortalContext } from '../context/legendPortalContext';
+import { ReportChartSize } from '../context/chartLayoutContext';
+import { useResponsiveContainerContext } from '../component/ResponsiveContainer';
+var EventSynchronizer = () => {
+  useSynchronisedEventsFromOtherCharts();
+  return null;
+};
+function getNumberOrZero(value) {
+  if (typeof value === 'number') {
+    return value;
+  }
+  if (typeof value === 'string') {
+    var parsed = parseFloat(value);
+    if (!Number.isNaN(parsed)) {
+      return parsed;
+    }
+  }
+  return 0;
+}
+var ResponsiveDiv = /*#__PURE__*/forwardRef((props, ref) => {
+  var _props$style, _props$style2;
+  var observerRef = useRef(null);
+  var [sizes, setSizes] = useState({
+    containerWidth: getNumberOrZero((_props$style = props.style) === null || _props$style === void 0 ? void 0 : _props$style.width),
+    containerHeight: getNumberOrZero((_props$style2 = props.style) === null || _props$style2 === void 0 ? void 0 : _props$style2.height)
+  });
+  var setContainerSize = useCallback((newWidth, newHeight) => {
+    setSizes(prevState => {
+      var roundedWidth = Math.round(newWidth);
+      var roundedHeight = Math.round(newHeight);
+      if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {
+        return prevState;
+      }
+      return {
+        containerWidth: roundedWidth,
+        containerHeight: roundedHeight
+      };
+    });
+  }, []);
+  var innerRef = useCallback(node => {
+    if (typeof ref === 'function') {
+      ref(node);
+    }
+    if (node != null && typeof ResizeObserver !== 'undefined') {
+      var {
+        width: containerWidth,
+        height: containerHeight
+      } = node.getBoundingClientRect();
+      setContainerSize(containerWidth, containerHeight);
+      var callback = entries => {
+        var entry = entries[0];
+        if (entry == null) {
+          return;
+        }
+        var {
+          width,
+          height
+        } = entry.contentRect;
+        setContainerSize(width, height);
+      };
+      var observer = new ResizeObserver(callback);
+      observer.observe(node);
+      observerRef.current = observer;
+    }
+  }, [ref, setContainerSize]);
+  useEffect(() => {
+    return () => {
+      var observer = observerRef.current;
+      if (observer != null) {
+        observer.disconnect();
+      }
+    };
+  }, [setContainerSize]);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportChartSize, {
+    width: sizes.containerWidth,
+    height: sizes.containerHeight
+  }), /*#__PURE__*/React.createElement("div", _extends({
+    ref: innerRef
+  }, props)));
+});
+var ReadSizeOnceDiv = /*#__PURE__*/forwardRef((props, ref) => {
+  var {
+    width,
+    height
+  } = props;
+  var [sizes, setSizes] = useState({
+    containerWidth: getNumberOrZero(width),
+    containerHeight: getNumberOrZero(height)
+  });
+  var setContainerSize = useCallback((newWidth, newHeight) => {
+    setSizes(prevState => {
+      var roundedWidth = Math.round(newWidth);
+      var roundedHeight = Math.round(newHeight);
+      if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {
+        return prevState;
+      }
+      return {
+        containerWidth: roundedWidth,
+        containerHeight: roundedHeight
+      };
+    });
+  }, []);
+  var innerRef = useCallback(node => {
+    if (typeof ref === 'function') {
+      ref(node);
+    }
+    if (node != null) {
+      var {
+        width: containerWidth,
+        height: containerHeight
+      } = node.getBoundingClientRect();
+      setContainerSize(containerWidth, containerHeight);
+    }
+  }, [ref, setContainerSize]);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportChartSize, {
+    width: sizes.containerWidth,
+    height: sizes.containerHeight
+  }), /*#__PURE__*/React.createElement("div", _extends({
+    ref: innerRef
+  }, props)));
+});
+var StaticDiv = /*#__PURE__*/forwardRef((props, ref) => {
+  var {
+    width,
+    height
+  } = props;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportChartSize, {
+    width: width,
+    height: height
+  }), /*#__PURE__*/React.createElement("div", _extends({
+    ref: ref
+  }, props)));
+});
+var NonResponsiveDiv = /*#__PURE__*/forwardRef((props, ref) => {
+  var {
+    width,
+    height
+  } = props;
+  // When width or height are percentages or CSS short names, read size from DOM once
+  if (typeof width === 'string' || typeof height === 'string') {
+    return /*#__PURE__*/React.createElement(ReadSizeOnceDiv, _extends({}, props, {
+      ref: ref
+    }));
+  }
+  // When both are numbers, use them directly
+  if (typeof width === 'number' && typeof height === 'number') {
+    return /*#__PURE__*/React.createElement(StaticDiv, _extends({}, props, {
+      width: width,
+      height: height,
+      ref: ref
+    }));
+  }
+  // When width/height are undefined, render wrapper div without reporting size
+  // This results in no SVG being rendered (intentional for backwards compatibility)
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportChartSize, {
+    width: width,
+    height: height
+  }), /*#__PURE__*/React.createElement("div", _extends({
+    ref: ref
+  }, props)));
+});
+function getWrapperDivComponent(responsive) {
+  return responsive ? ResponsiveDiv : NonResponsiveDiv;
+}
+export var RechartsWrapper = /*#__PURE__*/forwardRef((props, ref) => {
+  var {
+    children,
+    className,
+    height: heightFromProps,
+    onClick,
+    onContextMenu,
+    onDoubleClick,
+    onMouseDown,
+    onMouseEnter,
+    onMouseLeave,
+    onMouseMove,
+    onMouseUp,
+    onTouchEnd,
+    onTouchMove,
+    onTouchStart,
+    style,
+    width: widthFromProps,
+    responsive,
+    dispatchTouchEvents = true
+  } = props;
+  var containerRef = useRef(null);
+  var dispatch = useAppDispatch();
+  var [tooltipPortal, setTooltipPortal] = useState(null);
+  var [legendPortal, setLegendPortal] = useState(null);
+  var setScaleRef = useReportScale();
+  var responsiveContainerCalculations = useResponsiveContainerContext();
+  var width = (responsiveContainerCalculations === null || responsiveContainerCalculations === void 0 ? void 0 : responsiveContainerCalculations.width) > 0 ? responsiveContainerCalculations.width : widthFromProps;
+  var height = (responsiveContainerCalculations === null || responsiveContainerCalculations === void 0 ? void 0 : responsiveContainerCalculations.height) > 0 ? responsiveContainerCalculations.height : heightFromProps;
+  var innerRef = useCallback(node => {
+    setScaleRef(node);
+    if (typeof ref === 'function') {
+      ref(node);
+    }
+    setTooltipPortal(node);
+    setLegendPortal(node);
+    if (node != null) {
+      containerRef.current = node;
+    }
+  }, [setScaleRef, ref, setTooltipPortal, setLegendPortal]);
+  var myOnClick = useCallback(e => {
+    dispatch(mouseClickAction(e));
+    dispatch(externalEventAction({
+      handler: onClick,
+      reactEvent: e
+    }));
+  }, [dispatch, onClick]);
+  var myOnMouseEnter = useCallback(e => {
+    dispatch(mouseMoveAction(e));
+    dispatch(externalEventAction({
+      handler: onMouseEnter,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseEnter]);
+  var myOnMouseLeave = useCallback(e => {
+    dispatch(mouseLeaveChart());
+    dispatch(externalEventAction({
+      handler: onMouseLeave,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseLeave]);
+  var myOnMouseMove = useCallback(e => {
+    dispatch(mouseMoveAction(e));
+    dispatch(externalEventAction({
+      handler: onMouseMove,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseMove]);
+  var onFocus = useCallback(() => {
+    dispatch(focusAction());
+  }, [dispatch]);
+  var onKeyDown = useCallback(e => {
+    dispatch(keyDownAction(e.key));
+  }, [dispatch]);
+  var myOnContextMenu = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onContextMenu,
+      reactEvent: e
+    }));
+  }, [dispatch, onContextMenu]);
+  var myOnDoubleClick = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onDoubleClick,
+      reactEvent: e
+    }));
+  }, [dispatch, onDoubleClick]);
+  var myOnMouseDown = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onMouseDown,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseDown]);
+  var myOnMouseUp = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onMouseUp,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseUp]);
+  var myOnTouchStart = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onTouchStart,
+      reactEvent: e
+    }));
+  }, [dispatch, onTouchStart]);
+
+  /*
+   * onTouchMove is special because it behaves different from mouse events.
+   * Mouse events have 'enter' + 'leave' combo that notify us when the mouse is over
+   * a certain element. Touch events don't have that; touch only gives us
+   * start (finger down), end (finger up) and move (finger moving).
+   * So we need to figure out which element the user is touching
+   * ourselves. Fortunately, there's a convenient method for that:
+   * https://developer.mozilla.org/en-US/docs/Web/API/Document/elementFromPoint
+   */
+  var myOnTouchMove = useCallback(e => {
+    if (dispatchTouchEvents) {
+      dispatch(touchEventAction(e));
+    }
+    dispatch(externalEventAction({
+      handler: onTouchMove,
+      reactEvent: e
+    }));
+  }, [dispatch, dispatchTouchEvents, onTouchMove]);
+  var myOnTouchEnd = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onTouchEnd,
+      reactEvent: e
+    }));
+  }, [dispatch, onTouchEnd]);
+  var WrapperDiv = getWrapperDivComponent(responsive);
+  return /*#__PURE__*/React.createElement(TooltipPortalContext.Provider, {
+    value: tooltipPortal
+  }, /*#__PURE__*/React.createElement(LegendPortalContext.Provider, {
+    value: legendPortal
+  }, /*#__PURE__*/React.createElement(WrapperDiv, {
+    width: width !== null && width !== void 0 ? width : style === null || style === void 0 ? void 0 : style.width,
+    height: height !== null && height !== void 0 ? height : style === null || style === void 0 ? void 0 : style.height,
+    className: clsx('recharts-wrapper', className),
+    style: _objectSpread({
+      position: 'relative',
+      cursor: 'default',
+      width,
+      height
+    }, style),
+    onClick: myOnClick,
+    onContextMenu: myOnContextMenu,
+    onDoubleClick: myOnDoubleClick,
+    onFocus: onFocus,
+    onKeyDown: onKeyDown,
+    onMouseDown: myOnMouseDown,
+    onMouseEnter: myOnMouseEnter,
+    onMouseLeave: myOnMouseLeave,
+    onMouseMove: myOnMouseMove,
+    onMouseUp: myOnMouseUp,
+    onTouchEnd: myOnTouchEnd,
+    onTouchMove: myOnTouchMove,
+    onTouchStart: myOnTouchStart,
+    ref: innerRef
+  }, /*#__PURE__*/React.createElement(EventSynchronizer, null), children)));
+});
Index: node_modules/recharts/es6/chart/Sankey.js
===================================================================
--- node_modules/recharts/es6/chart/Sankey.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/Sankey.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,939 @@
+var _excluded = ["sourceX", "sourceY", "sourceControlX", "targetX", "targetY", "targetControlX", "linkWidth"],
+  _excluded2 = ["className", "style", "children", "id"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { useCallback, useMemo, useState } from 'react';
+import maxBy from 'es-toolkit/compat/maxBy';
+import sumBy from 'es-toolkit/compat/sumBy';
+import get from 'es-toolkit/compat/get';
+import { Surface } from '../container/Surface';
+import { Layer } from '../container/Layer';
+import { Rectangle } from '../shape/Rectangle';
+import { getValueByDataKey } from '../util/ChartUtils';
+import { ReportChartMargin, ReportChartSize, useChartHeight, useChartWidth } from '../context/chartLayoutContext';
+import { TooltipPortalContext } from '../context/tooltipPortalContext';
+import { RechartsWrapper } from './RechartsWrapper';
+import { RechartsStoreProvider } from '../state/RechartsStoreProvider';
+import { useAppDispatch } from '../state/hooks';
+import { mouseLeaveItem, setActiveClickItemIndex, setActiveMouseOverItemIndex } from '../state/tooltipSlice';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { SetComputedData } from '../context/chartDataContext';
+import { svgPropertiesNoEvents, svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+import { isNotNil, noop } from '../util/DataUtils';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+var interpolationGenerator = (a, b) => {
+  var ka = +a;
+  var kb = b - ka;
+  return t => ka + kb * t;
+};
+var centerY = node => node.y + node.dy / 2;
+
+// TODO why is this not reading dataKey?
+var getValue = entry => entry && entry.value || 0;
+var getSumOfIds = (links, ids) => ids.reduce((result, id) => result + getValue(links[id]), 0);
+var getSumWithWeightedSource = (tree, links, ids) => ids.reduce((result, id) => {
+  var link = links[id];
+  if (link == null) {
+    return result;
+  }
+  var sourceNode = tree[link.source];
+  if (sourceNode == null) {
+    return result;
+  }
+  return result + centerY(sourceNode) * getValue(links[id]);
+}, 0);
+var getSumWithWeightedTarget = (tree, links, ids) => ids.reduce((result, id) => {
+  var link = links[id];
+  if (link == null) {
+    return result;
+  }
+  var targetNode = tree[link.target];
+  if (targetNode == null) {
+    return result;
+  }
+  return result + centerY(targetNode) * getValue(links[id]);
+}, 0);
+var ascendingY = (a, b) => a.y - b.y;
+var searchTargetsAndSources = (links, id) => {
+  var sourceNodes = [];
+  var sourceLinks = [];
+  var targetNodes = [];
+  var targetLinks = [];
+  for (var i = 0, len = links.length; i < len; i++) {
+    var link = links[i];
+    if ((link === null || link === void 0 ? void 0 : link.source) === id) {
+      targetNodes.push(link.target);
+      targetLinks.push(i);
+    }
+    if ((link === null || link === void 0 ? void 0 : link.target) === id) {
+      sourceNodes.push(link.source);
+      sourceLinks.push(i);
+    }
+  }
+  return {
+    sourceNodes,
+    sourceLinks,
+    targetLinks,
+    targetNodes
+  };
+};
+var updateDepthOfTargets = (tree, curNode) => {
+  var {
+    targetNodes
+  } = curNode;
+  for (var i = 0, len = targetNodes.length; i < len; i++) {
+    var targetNode = targetNodes[i];
+    if (targetNode == null) {
+      continue;
+    }
+    var target = tree[targetNode];
+    if (target) {
+      target.depth = Math.max(curNode.depth + 1, target.depth);
+      updateDepthOfTargets(tree, target);
+    }
+  }
+};
+var getNodesTree = (_ref, width, nodeWidth, align) => {
+  var _maxBy$depth, _maxBy;
+  var {
+    nodes,
+    links
+  } = _ref;
+  var tree = nodes.map((entry, index) => {
+    var result = searchTargetsAndSources(links, index);
+    return _objectSpread(_objectSpread(_objectSpread({}, entry), result), {}, {
+      value: Math.max(getSumOfIds(links, result.sourceLinks), getSumOfIds(links, result.targetLinks)),
+      depth: 0
+    });
+  });
+  for (var i = 0, len = tree.length; i < len; i++) {
+    var node = tree[i];
+    if (node != null && !node.sourceNodes.length) {
+      updateDepthOfTargets(tree, node);
+    }
+  }
+  var maxDepth = (_maxBy$depth = (_maxBy = maxBy(tree, entry => entry.depth)) === null || _maxBy === void 0 ? void 0 : _maxBy.depth) !== null && _maxBy$depth !== void 0 ? _maxBy$depth : 0;
+  if (maxDepth >= 1) {
+    var childWidth = (width - nodeWidth) / maxDepth;
+    for (var _i = 0, _len = tree.length; _i < _len; _i++) {
+      var _node = tree[_i];
+      if (_node == null) {
+        continue;
+      }
+      if (!_node.targetNodes.length) {
+        if (align === 'justify') {
+          _node.depth = maxDepth;
+        }
+      }
+      _node.x = _node.depth * childWidth;
+      _node.dx = nodeWidth;
+    }
+  }
+  return {
+    tree,
+    maxDepth
+  };
+};
+var getDepthTree = tree => {
+  var result = [];
+  for (var i = 0, len = tree.length; i < len; i++) {
+    var _result$node$depth;
+    var node = tree[i];
+    if (node == null) {
+      continue;
+    }
+    if (!result[node.depth]) {
+      result[node.depth] = [];
+    }
+    (_result$node$depth = result[node.depth]) === null || _result$node$depth === void 0 || _result$node$depth.push(node);
+  }
+  return result;
+};
+var updateYOfTree = (depthTree, height, nodePadding, links, verticalAlign) => {
+  var yRatio = Math.min(...depthTree.map(nodes => (height - (nodes.length - 1) * nodePadding) / sumBy(nodes, getValue)));
+  for (var d = 0, maxDepth = depthTree.length; d < maxDepth; d++) {
+    var nodes = depthTree[d];
+    if (nodes == null) {
+      continue;
+    }
+    if (verticalAlign === 'top') {
+      var currentY = 0;
+      for (var i = 0, len = nodes.length; i < len; i++) {
+        var node = nodes[i];
+        if (node == null) {
+          continue;
+        }
+        node.dy = node.value * yRatio;
+        node.y = currentY;
+        currentY += node.dy + nodePadding;
+      }
+    } else {
+      for (var _i2 = 0, _len2 = nodes.length; _i2 < _len2; _i2++) {
+        var _node2 = nodes[_i2];
+        if (_node2 == null) {
+          continue;
+        }
+        _node2.y = _i2;
+        _node2.dy = _node2.value * yRatio;
+      }
+    }
+  }
+  return links.map(link => _objectSpread(_objectSpread({}, link), {}, {
+    dy: getValue(link) * yRatio
+  }));
+};
+var resolveCollisions = function resolveCollisions(depthTree, height, nodePadding) {
+  var sort = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
+  for (var i = 0, len = depthTree.length; i < len; i++) {
+    var nodes = depthTree[i];
+    if (nodes == null) {
+      continue;
+    }
+    var n = nodes.length;
+
+    // Sort by the value of y
+    if (sort) {
+      nodes.sort(ascendingY);
+    }
+    var y0 = 0;
+    for (var j = 0; j < n; j++) {
+      var node = nodes[j];
+      if (node == null) {
+        continue;
+      }
+      var dy = y0 - node.y;
+      if (dy > 0) {
+        node.y += dy;
+      }
+      y0 = node.y + node.dy + nodePadding;
+    }
+    y0 = height + nodePadding;
+    for (var _j = n - 1; _j >= 0; _j--) {
+      var _node3 = nodes[_j];
+      if (_node3 == null) {
+        continue;
+      }
+      var _dy = _node3.y + _node3.dy + nodePadding - y0;
+      if (_dy > 0) {
+        _node3.y -= _dy;
+        y0 = _node3.y;
+      } else {
+        break;
+      }
+    }
+  }
+};
+var relaxLeftToRight = (tree, depthTree, links, alpha) => {
+  for (var i = 0, maxDepth = depthTree.length; i < maxDepth; i++) {
+    var nodes = depthTree[i];
+    if (nodes == null) {
+      continue;
+    }
+    for (var j = 0, len = nodes.length; j < len; j++) {
+      var node = nodes[j];
+      if (node == null) {
+        continue;
+      }
+      if (node.sourceLinks.length) {
+        var sourceSum = getSumOfIds(links, node.sourceLinks);
+        var weightedSum = getSumWithWeightedSource(tree, links, node.sourceLinks);
+        var y = weightedSum / sourceSum;
+        node.y += (y - centerY(node)) * alpha;
+      }
+    }
+  }
+};
+var relaxRightToLeft = (tree, depthTree, links, alpha) => {
+  for (var i = depthTree.length - 1; i >= 0; i--) {
+    var nodes = depthTree[i];
+    if (nodes == null) {
+      continue;
+    }
+    for (var j = 0, len = nodes.length; j < len; j++) {
+      var node = nodes[j];
+      if (node == null) {
+        continue;
+      }
+      if (node.targetLinks.length) {
+        var targetSum = getSumOfIds(links, node.targetLinks);
+        var weightedSum = getSumWithWeightedTarget(tree, links, node.targetLinks);
+        var y = weightedSum / targetSum;
+        node.y += (y - centerY(node)) * alpha;
+      }
+    }
+  }
+};
+var updateYOfLinks = (tree, links) => {
+  for (var i = 0, len = tree.length; i < len; i++) {
+    var node = tree[i];
+    if (node == null) {
+      continue;
+    }
+    var sy = 0;
+    var ty = 0;
+    node.targetLinks.sort((a, b) => {
+      var _links$a, _links$b, _tree$targetA, _tree$targetB;
+      var targetA = (_links$a = links[a]) === null || _links$a === void 0 ? void 0 : _links$a.target;
+      var targetB = (_links$b = links[b]) === null || _links$b === void 0 ? void 0 : _links$b.target;
+      if (targetA == null || targetB == null) {
+        return 0;
+      }
+      var yA = (_tree$targetA = tree[targetA]) === null || _tree$targetA === void 0 ? void 0 : _tree$targetA.y;
+      var yB = (_tree$targetB = tree[targetB]) === null || _tree$targetB === void 0 ? void 0 : _tree$targetB.y;
+      if (yA == null || yB == null) {
+        return 0;
+      }
+      return yA - yB;
+    });
+    node.sourceLinks.sort((a, b) => {
+      var _links$a2, _links$b2, _tree$sourceA, _tree$sourceB;
+      var sourceA = (_links$a2 = links[a]) === null || _links$a2 === void 0 ? void 0 : _links$a2.source;
+      var sourceB = (_links$b2 = links[b]) === null || _links$b2 === void 0 ? void 0 : _links$b2.source;
+      if (sourceA == null || sourceB == null) {
+        return 0;
+      }
+      var yA = (_tree$sourceA = tree[sourceA]) === null || _tree$sourceA === void 0 ? void 0 : _tree$sourceA.y;
+      var yB = (_tree$sourceB = tree[sourceB]) === null || _tree$sourceB === void 0 ? void 0 : _tree$sourceB.y;
+      if (yA == null || yB == null) {
+        return 0;
+      }
+      return yA - yB;
+    });
+    for (var j = 0, tLen = node.targetLinks.length; j < tLen; j++) {
+      var targetLink = node.targetLinks[j];
+      if (targetLink == null) {
+        continue;
+      }
+      var link = links[targetLink];
+      if (link) {
+        // @ts-expect-error we should refactor this to immutable
+        link.sy = sy;
+        sy += link.dy;
+      }
+    }
+    for (var _j2 = 0, sLen = node.sourceLinks.length; _j2 < sLen; _j2++) {
+      var sourceLink = node.sourceLinks[_j2];
+      if (sourceLink == null) {
+        continue;
+      }
+      var _link = links[sourceLink];
+      if (_link) {
+        // @ts-expect-error we should refactor this to immutable
+        _link.ty = ty;
+        ty += _link.dy;
+      }
+    }
+  }
+};
+var computeData = _ref2 => {
+  var {
+    data,
+    width,
+    height,
+    iterations,
+    nodeWidth,
+    nodePadding,
+    sort,
+    verticalAlign,
+    align
+  } = _ref2;
+  var {
+    links
+  } = data;
+  var {
+    tree
+  } = getNodesTree(data, width, nodeWidth, align);
+  var depthTree = getDepthTree(tree);
+  var linksWithDy = updateYOfTree(depthTree, height, nodePadding, links, verticalAlign);
+  resolveCollisions(depthTree, height, nodePadding, sort);
+  if (verticalAlign === 'justify') {
+    var alpha = 1;
+    for (var i = 1; i <= iterations; i++) {
+      relaxRightToLeft(tree, depthTree, linksWithDy, alpha *= 0.99);
+      resolveCollisions(depthTree, height, nodePadding, sort);
+      relaxLeftToRight(tree, depthTree, linksWithDy, alpha);
+      resolveCollisions(depthTree, height, nodePadding, sort);
+    }
+  }
+  updateYOfLinks(tree, linksWithDy);
+  // @ts-expect-error updateYOfLinks modifies the links array to add sy and ty in place
+  var newLinks = linksWithDy;
+  return {
+    nodes: tree,
+    links: newLinks
+  };
+};
+var getNodeCoordinateOfTooltip = item => {
+  return {
+    x: +item.x + +item.width / 2,
+    y: +item.y + +item.height / 2
+  };
+};
+var getLinkCoordinateOfTooltip = item => {
+  return 'sourceX' in item ? {
+    x: (item.sourceX + item.targetX) / 2,
+    y: (item.sourceY + item.targetY) / 2
+  } : undefined;
+};
+var getPayloadOfTooltip = (item, type, nameKey) => {
+  var {
+    payload
+  } = item;
+  if (type === 'node') {
+    return {
+      payload,
+      name: getValueByDataKey(payload, nameKey, ''),
+      value: getValueByDataKey(payload, 'value')
+    };
+  }
+  if ('source' in payload && payload.source && payload.target) {
+    var sourceName = getValueByDataKey(payload.source, nameKey, '');
+    var targetName = getValueByDataKey(payload.target, nameKey, '');
+    return {
+      payload,
+      name: "".concat(sourceName, " - ").concat(targetName),
+      value: getValueByDataKey(payload, 'value')
+    };
+  }
+  return undefined;
+};
+export var sankeyPayloadSearcher = (_, activeIndex, computedData, nameKey) => {
+  if (activeIndex == null || typeof activeIndex !== 'string') {
+    return undefined;
+  }
+  if (computedData == null || typeof computedData !== 'object') {
+    return undefined;
+  }
+  var splitIndex = activeIndex.split('-');
+  var [targetType, index] = splitIndex;
+  var item = get(computedData, "".concat(targetType, "s[").concat(index, "]"));
+  if (item) {
+    var payload = getPayloadOfTooltip(item, targetType, nameKey);
+    return payload;
+  }
+  return undefined;
+};
+var options = {
+  chartName: 'Sankey',
+  defaultTooltipEventType: 'item',
+  validateTooltipEventTypes: ['item'],
+  tooltipPayloadSearcher: sankeyPayloadSearcher,
+  eventEmitter: undefined
+};
+var SetSankeyTooltipEntrySettings = /*#__PURE__*/React.memo(_ref3 => {
+  var {
+    dataKey,
+    nameKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    data,
+    id
+  } = _ref3;
+  var tooltipEntrySettings = {
+    dataDefinedOnItem: data,
+    getPosition: noop,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      name,
+      nameKey,
+      hide: false,
+      type: undefined,
+      color: fill,
+      unit: '',
+      graphicalItemId: id
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+
+// TODO: improve types - NodeOptions uses SankeyNode, LinkOptions uses LinkProps. Standardize.
+
+function renderLinkItem(option, props) {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  if (typeof option === 'function') {
+    return option(props);
+  }
+  var {
+      sourceX,
+      sourceY,
+      sourceControlX,
+      targetX,
+      targetY,
+      targetControlX,
+      linkWidth
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  return /*#__PURE__*/React.createElement("path", _extends({
+    className: "recharts-sankey-link",
+    d: "\n          M".concat(sourceX, ",").concat(sourceY, "\n          C").concat(sourceControlX, ",").concat(sourceY, " ").concat(targetControlX, ",").concat(targetY, " ").concat(targetX, ",").concat(targetY, "\n        "),
+    fill: "none",
+    stroke: "#333",
+    strokeWidth: linkWidth,
+    strokeOpacity: "0.2"
+  }, svgPropertiesNoEvents(others)));
+}
+var buildLinkProps = _ref4 => {
+  var {
+    link,
+    nodes,
+    left,
+    top,
+    i,
+    linkContent,
+    linkCurvature
+  } = _ref4;
+  var {
+    sy: sourceRelativeY,
+    ty: targetRelativeY,
+    dy: linkWidth
+  } = link;
+  var sourceNode = nodes[link.source];
+  var targetNode = nodes[link.target];
+  if (sourceNode == null || targetNode == null) {
+    return undefined;
+  }
+  var sourceX = sourceNode.x + sourceNode.dx + left;
+  var targetX = targetNode.x + left;
+  var interpolationFunc = interpolationGenerator(sourceX, targetX);
+  var sourceControlX = interpolationFunc(linkCurvature);
+  var targetControlX = interpolationFunc(1 - linkCurvature);
+  var sourceY = sourceNode.y + sourceRelativeY + linkWidth / 2 + top;
+  var targetY = targetNode.y + targetRelativeY + linkWidth / 2 + top;
+  var linkProps = _objectSpread({
+    sourceX,
+    // @ts-expect-error the linkContent from below is contributing unknown props
+    targetX,
+    sourceY,
+    // @ts-expect-error the linkContent from below is contributing unknown props
+    targetY,
+    sourceControlX,
+    targetControlX,
+    sourceRelativeY,
+    targetRelativeY,
+    linkWidth,
+    index: i,
+    payload: _objectSpread(_objectSpread({}, link), {}, {
+      source: sourceNode,
+      target: targetNode
+    })
+  }, svgPropertiesNoEventsFromUnknown(linkContent));
+  return linkProps;
+};
+function SankeyLinkElement(_ref5) {
+  var {
+    graphicalItemId,
+    props,
+    i,
+    linkContent,
+    onMouseEnter: _onMouseEnter,
+    onMouseLeave: _onMouseLeave,
+    onClick: _onClick,
+    dataKey
+  } = _ref5;
+  var activeCoordinate = getLinkCoordinateOfTooltip(props);
+  var activeIndex = "link-".concat(i);
+  var dispatch = useAppDispatch();
+  var events = {
+    onMouseEnter: e => {
+      dispatch(setActiveMouseOverItemIndex({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate,
+        activeGraphicalItemId: graphicalItemId
+      }));
+      _onMouseEnter(props, e);
+    },
+    onMouseLeave: e => {
+      dispatch(mouseLeaveItem());
+      _onMouseLeave(props, e);
+    },
+    onClick: e => {
+      dispatch(setActiveClickItemIndex({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate,
+        activeGraphicalItemId: graphicalItemId
+      }));
+      _onClick(props, e);
+    }
+  };
+  return /*#__PURE__*/React.createElement(Layer, events, renderLinkItem(linkContent, props));
+}
+function AllSankeyLinkElements(_ref6) {
+  var {
+    graphicalItemId,
+    modifiedLinks,
+    links,
+    linkContent,
+    onMouseEnter,
+    onMouseLeave,
+    onClick,
+    dataKey
+  } = _ref6;
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-sankey-links",
+    key: "recharts-sankey-links"
+  }, links.map((link, i) => {
+    var linkProps = modifiedLinks[i];
+    if (linkProps == null) {
+      return null;
+    }
+    return /*#__PURE__*/React.createElement(SankeyLinkElement, {
+      graphicalItemId: graphicalItemId,
+      key: "link-".concat(link.source, "-").concat(link.target, "-").concat(link.value),
+      props: linkProps,
+      linkContent: linkContent,
+      i: i,
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick,
+      dataKey: dataKey
+    });
+  }));
+}
+function renderNodeItem(option, props) {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  if (typeof option === 'function') {
+    return option(props);
+  }
+  return (
+    /*#__PURE__*/
+    // @ts-expect-error recharts radius is not compatible with SVG radius
+    React.createElement(Rectangle, _extends({
+      className: "recharts-sankey-node",
+      fill: "#0088fe",
+      fillOpacity: "0.8"
+    }, svgPropertiesNoEvents(props)))
+  );
+}
+var buildNodeProps = _ref7 => {
+  var {
+    node,
+    nodeContent,
+    top,
+    left,
+    i
+  } = _ref7;
+  var {
+    x,
+    y,
+    dx,
+    dy
+  } = node;
+  // @ts-expect-error nodeContent is passing in unknown props
+  var nodeProps = _objectSpread(_objectSpread({}, svgPropertiesNoEventsFromUnknown(nodeContent)), {}, {
+    x: x + left,
+    y: y + top,
+    width: dx,
+    height: dy,
+    index: i,
+    payload: node
+  });
+  return nodeProps;
+};
+function NodeElement(_ref8) {
+  var {
+    graphicalItemId,
+    props,
+    nodeContent,
+    i,
+    onMouseEnter: _onMouseEnter2,
+    onMouseLeave: _onMouseLeave2,
+    onClick: _onClick2,
+    dataKey
+  } = _ref8;
+  var dispatch = useAppDispatch();
+  var activeCoordinate = getNodeCoordinateOfTooltip(props);
+  var activeIndex = "node-".concat(i);
+  var events = {
+    onMouseEnter: e => {
+      dispatch(setActiveMouseOverItemIndex({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate,
+        activeGraphicalItemId: graphicalItemId
+      }));
+      _onMouseEnter2(props, e);
+    },
+    onMouseLeave: e => {
+      dispatch(mouseLeaveItem());
+      _onMouseLeave2(props, e);
+    },
+    onClick: e => {
+      dispatch(setActiveClickItemIndex({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate,
+        activeGraphicalItemId: graphicalItemId
+      }));
+      _onClick2(props, e);
+    }
+  };
+  return /*#__PURE__*/React.createElement(Layer, events, renderNodeItem(nodeContent, props));
+}
+function AllNodeElements(_ref9) {
+  var {
+    graphicalItemId,
+    modifiedNodes,
+    nodeContent,
+    onMouseEnter,
+    onMouseLeave,
+    onClick,
+    dataKey
+  } = _ref9;
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-sankey-nodes",
+    key: "recharts-sankey-nodes"
+  }, modifiedNodes.map((modifiedNode, i) => {
+    return /*#__PURE__*/React.createElement(NodeElement, {
+      graphicalItemId: graphicalItemId,
+      key: "node-".concat(modifiedNode.index, "-").concat(modifiedNode.x, "-").concat(modifiedNode.y),
+      props: modifiedNode,
+      nodeContent: nodeContent,
+      i: i,
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick,
+      dataKey: dataKey
+    });
+  }));
+}
+export var sankeyDefaultProps = {
+  align: 'justify',
+  dataKey: 'value',
+  iterations: 32,
+  linkCurvature: 0.5,
+  margin: {
+    top: 5,
+    right: 5,
+    bottom: 5,
+    left: 5
+  },
+  nameKey: 'name',
+  nodePadding: 10,
+  nodeWidth: 10,
+  sort: true,
+  verticalAlign: 'justify'
+};
+function SankeyImpl(props) {
+  var {
+      className,
+      style,
+      children,
+      id
+    } = props,
+    others = _objectWithoutProperties(props, _excluded2);
+  var {
+    link,
+    dataKey,
+    node,
+    onMouseEnter,
+    onMouseLeave,
+    onClick,
+    data,
+    iterations,
+    nodeWidth,
+    nodePadding,
+    sort,
+    linkCurvature,
+    margin,
+    verticalAlign,
+    align
+  } = props;
+  var attrs = svgPropertiesNoEvents(others);
+  var width = useChartWidth();
+  var height = useChartHeight();
+  var {
+    links,
+    modifiedLinks,
+    modifiedNodes
+  } = useMemo(() => {
+    var _margin$left, _margin$right, _margin$top, _margin$bottom;
+    if (!data || !width || !height || width <= 0 || height <= 0) {
+      return {
+        nodes: [],
+        links: [],
+        modifiedLinks: [],
+        modifiedNodes: []
+      };
+    }
+    var contentWidth = width - ((_margin$left = margin.left) !== null && _margin$left !== void 0 ? _margin$left : 0) - ((_margin$right = margin.right) !== null && _margin$right !== void 0 ? _margin$right : 0);
+    var contentHeight = height - ((_margin$top = margin.top) !== null && _margin$top !== void 0 ? _margin$top : 0) - ((_margin$bottom = margin.bottom) !== null && _margin$bottom !== void 0 ? _margin$bottom : 0);
+    var computed = computeData({
+      data,
+      width: contentWidth,
+      height: contentHeight,
+      iterations,
+      nodeWidth,
+      nodePadding,
+      sort,
+      verticalAlign,
+      align
+    });
+    var top = margin.top || 0;
+    var left = margin.left || 0;
+    var newModifiedLinks = computed.links.map((l, i) => {
+      return buildLinkProps({
+        link: l,
+        nodes: computed.nodes,
+        i,
+        top,
+        left,
+        linkContent: link,
+        linkCurvature
+      });
+    }).filter(isNotNil);
+    var newModifiedNodes = computed.nodes.map((n, i) => {
+      return buildNodeProps({
+        node: n,
+        nodeContent: node,
+        i,
+        top,
+        left
+      });
+    });
+    return {
+      nodes: computed.nodes,
+      links: computed.links,
+      modifiedLinks: newModifiedLinks,
+      modifiedNodes: newModifiedNodes
+    };
+  }, [data, width, height, margin, iterations, nodeWidth, nodePadding, sort, link, node, linkCurvature, align, verticalAlign]);
+  var handleMouseEnter = useCallback((item, type, e) => {
+    if (onMouseEnter) {
+      onMouseEnter(item, type, e);
+    }
+  }, [onMouseEnter]);
+  var handleMouseLeave = useCallback((item, type, e) => {
+    if (onMouseLeave) {
+      onMouseLeave(item, type, e);
+    }
+  }, [onMouseLeave]);
+  var handleClick = useCallback((item, type, e) => {
+    if (onClick) {
+      onClick(item, type, e);
+    }
+  }, [onClick]);
+  if (!isPositiveNumber(width) || !isPositiveNumber(height) || !data || !data.links || !data.nodes) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetComputedData, {
+    computedData: {
+      links: modifiedLinks,
+      nodes: modifiedNodes
+    }
+  }), /*#__PURE__*/React.createElement(Surface, _extends({}, attrs, {
+    width: width,
+    height: height
+  }), children, /*#__PURE__*/React.createElement(AllSankeyLinkElements, {
+    graphicalItemId: id,
+    links: links,
+    modifiedLinks: modifiedLinks,
+    linkContent: link,
+    dataKey: dataKey,
+    onMouseEnter: (linkProps, e) => handleMouseEnter(linkProps, 'link', e),
+    onMouseLeave: (linkProps, e) => handleMouseLeave(linkProps, 'link', e),
+    onClick: (linkProps, e) => handleClick(linkProps, 'link', e)
+  }), /*#__PURE__*/React.createElement(AllNodeElements, {
+    graphicalItemId: id,
+    modifiedNodes: modifiedNodes,
+    nodeContent: node,
+    dataKey: dataKey,
+    onMouseEnter: (nodeProps, e) => handleMouseEnter(nodeProps, 'node', e),
+    onMouseLeave: (nodeProps, e) => handleMouseLeave(nodeProps, 'node', e),
+    onClick: (nodeProps, e) => handleClick(nodeProps, 'node', e)
+  })));
+}
+
+/**
+ * Flow diagram in which the width of the arrows is proportional to the flow rate.
+ * It is typically used to visualize energy or material or cost transfers between processes.
+ *
+ * @consumes ResponsiveContainerContext
+ * @provides TooltipEntrySettings
+ */
+export function Sankey(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, sankeyDefaultProps);
+  var {
+    width,
+    height,
+    style,
+    className,
+    id: externalId
+  } = props;
+  var [tooltipPortal, setTooltipPortal] = useState(null);
+  return /*#__PURE__*/React.createElement(RechartsStoreProvider, {
+    preloadedState: {
+      options
+    },
+    reduxStoreName: className !== null && className !== void 0 ? className : 'Sankey'
+  }, /*#__PURE__*/React.createElement(ReportChartSize, {
+    width: width,
+    height: height
+  }), /*#__PURE__*/React.createElement(ReportChartMargin, {
+    margin: props.margin
+  }), /*#__PURE__*/React.createElement(RechartsWrapper, {
+    className: className,
+    style: style,
+    width: width,
+    height: height
+    /*
+     * Sankey, same as Treemap, suffers from overfilling the container
+     * and causing infinite render loops where the chart keeps growing.
+     */,
+    responsive: false,
+    ref: node => {
+      if (node && !tooltipPortal) {
+        setTooltipPortal(node);
+      }
+    },
+    onMouseEnter: undefined,
+    onMouseLeave: undefined,
+    onClick: undefined,
+    onMouseMove: undefined,
+    onMouseDown: undefined,
+    onMouseUp: undefined,
+    onContextMenu: undefined,
+    onDoubleClick: undefined,
+    onTouchStart: undefined,
+    onTouchMove: undefined,
+    onTouchEnd: undefined
+  }, /*#__PURE__*/React.createElement(TooltipPortalContext.Provider, {
+    value: tooltipPortal
+  }, /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: externalId,
+    type: "sankey"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetSankeyTooltipEntrySettings, {
+    dataKey: props.dataKey,
+    nameKey: props.nameKey,
+    stroke: props.stroke,
+    strokeWidth: props.strokeWidth,
+    fill: props.fill,
+    name: props.name,
+    data: props.data,
+    id: id
+  }), /*#__PURE__*/React.createElement(SankeyImpl, _extends({}, props, {
+    id: id
+  })))))));
+}
+Sankey.displayName = 'Sankey';
Index: node_modules/recharts/es6/chart/ScatterChart.js
===================================================================
--- node_modules/recharts/es6/chart/ScatterChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/ScatterChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['item'];
+
+/**
+ * @consumes ResponsiveContainerContext
+ * @provides CartesianViewBoxContext
+ * @provides CartesianChartContext
+ */
+export var ScatterChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "ScatterChart",
+    defaultTooltipEventType: "item",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/SunburstChart.js
===================================================================
--- node_modules/recharts/es6/chart/SunburstChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/SunburstChart.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,328 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { useState } from 'react';
+import { scaleLinear } from 'victory-vendor/d3-scale';
+import { clsx } from 'clsx';
+import get from 'es-toolkit/compat/get';
+import { Surface } from '../container/Surface';
+import { Layer } from '../container/Layer';
+import { Sector } from '../shape/Sector';
+import { Text } from '../component/Text';
+import { polarToCartesian } from '../util/PolarUtils';
+import { ReportChartMargin, ReportChartSize, useChartHeight, useChartWidth } from '../context/chartLayoutContext';
+import { TooltipPortalContext } from '../context/tooltipPortalContext';
+import { RechartsWrapper } from './RechartsWrapper';
+import { mouseLeaveItem, setActiveClickItemIndex, setActiveMouseOverItemIndex } from '../state/tooltipSlice';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { RechartsStoreProvider } from '../state/RechartsStoreProvider';
+import { useAppDispatch } from '../state/hooks';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+
+/**
+ * We require tooltipIndex on each node internally to track which node is active in the tooltip.
+ * This is not required from the outside user - we can calculate it as we traverse the tree.
+ */
+
+var defaultTextProps = {
+  fontWeight: 'bold',
+  paintOrder: 'stroke fill',
+  fontSize: '.75rem',
+  stroke: '#FFF',
+  fill: 'black',
+  pointerEvents: 'none'
+};
+function getMaxDepthOf(node) {
+  if (!node.children || node.children.length === 0) return 1;
+
+  // Calculate depth for each child and find the maximum
+  var childDepths = node.children.map(d => getMaxDepthOf(d));
+  return 1 + Math.max(...childDepths);
+}
+var SetSunburstTooltipEntrySettings = /*#__PURE__*/React.memo(_ref => {
+  var {
+    dataKey,
+    nameKey,
+    data,
+    stroke,
+    fill,
+    positions,
+    id
+  } = _ref;
+  var tooltipEntrySettings = {
+    dataDefinedOnItem: data.children,
+    getPosition: index => positions.get(index),
+    // Sunburst does not support many of the properties as other charts do so there's plenty of defaults here
+    settings: {
+      stroke,
+      strokeWidth: undefined,
+      fill,
+      nameKey,
+      dataKey,
+      // if there is a nameKey use it, otherwise make the name of the tooltip the dataKey itself
+      name: nameKey ? undefined : dataKey,
+      hide: false,
+      type: undefined,
+      color: fill,
+      unit: '',
+      graphicalItemId: id
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+
+// Why is margin not a sunburst prop? No clue. Probably it should be
+var defaultSunburstMargin = {
+  top: 0,
+  right: 0,
+  bottom: 0,
+  left: 0
+};
+export var payloadSearcher = (data, activeIndex) => {
+  if (activeIndex == null) {
+    return undefined;
+  }
+  return get(data, activeIndex);
+};
+var addToSunburstNodeIndex = function addToSunburstNodeIndex(indexInChildrenArr) {
+  var activeTooltipIndexSoFar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
+  return "".concat(activeTooltipIndexSoFar, "children[").concat(indexInChildrenArr, "]");
+};
+var preloadedState = {
+  options: {
+    validateTooltipEventTypes: ['item'],
+    defaultTooltipEventType: 'item',
+    chartName: 'Sunburst',
+    tooltipPayloadSearcher: payloadSearcher,
+    eventEmitter: undefined
+  }
+};
+export var defaultSunburstChartProps = {
+  padding: 2,
+  dataKey: 'value',
+  nameKey: 'name',
+  ringPadding: 2,
+  innerRadius: 50,
+  fill: '#333',
+  stroke: '#FFF',
+  textOptions: defaultTextProps,
+  startAngle: 0,
+  endAngle: 360,
+  responsive: false
+};
+var SunburstChartImpl = _ref2 => {
+  var {
+    className,
+    data,
+    children,
+    padding,
+    dataKey,
+    nameKey,
+    ringPadding,
+    innerRadius,
+    fill,
+    stroke,
+    textOptions,
+    outerRadius: outerRadiusFromProps,
+    cx: cxFromProps,
+    cy: cyFromProps,
+    startAngle,
+    endAngle,
+    onClick,
+    onMouseEnter,
+    onMouseLeave,
+    id
+  } = _ref2;
+  var dispatch = useAppDispatch();
+  var width = useChartWidth();
+  var height = useChartHeight();
+  if (width == null || height == null) {
+    return null;
+  }
+  var outerRadius = outerRadiusFromProps !== null && outerRadiusFromProps !== void 0 ? outerRadiusFromProps : Math.min(width, height) / 2;
+  var cx = cxFromProps !== null && cxFromProps !== void 0 ? cxFromProps : width / 2;
+  var cy = cyFromProps !== null && cyFromProps !== void 0 ? cyFromProps : height / 2;
+  var rScale = scaleLinear([0, data[dataKey]], [0, endAngle]);
+  var treeDepth = getMaxDepthOf(data);
+  var thickness = (outerRadius - innerRadius) / treeDepth;
+  var sectors = [];
+  var positions = new Map([]);
+
+  // event handlers
+  function handleMouseEnter(node, e) {
+    if (onMouseEnter) onMouseEnter(node, e);
+    dispatch(setActiveMouseOverItemIndex({
+      activeIndex: node.tooltipIndex,
+      activeDataKey: dataKey,
+      activeCoordinate: positions.get(node.name),
+      activeGraphicalItemId: id
+    }));
+  }
+  function handleMouseLeave(node, e) {
+    if (onMouseLeave) onMouseLeave(node, e);
+    dispatch(mouseLeaveItem());
+  }
+  function handleClick(node) {
+    if (onClick) onClick(node);
+    dispatch(setActiveClickItemIndex({
+      activeIndex: node.tooltipIndex,
+      activeDataKey: dataKey,
+      activeCoordinate: positions.get(node.name),
+      activeGraphicalItemId: id
+    }));
+  }
+
+  // recursively add nodes for each data point and its children
+  function drawArcs(childNodes, options) {
+    var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
+    var {
+      radius,
+      innerR,
+      initialAngle,
+      childColor,
+      nestedActiveTooltipIndex
+    } = options;
+    var currentAngle = initialAngle;
+    if (!childNodes) return; // base case: no children of this node
+
+    childNodes.forEach((d, i) => {
+      var _ref3, _d$fill;
+      var currentTooltipIndex = depth === 1 ? "[".concat(i, "]") : addToSunburstNodeIndex(i, nestedActiveTooltipIndex);
+      var nodeWithIndex = _objectSpread(_objectSpread({}, d), {}, {
+        tooltipIndex: currentTooltipIndex
+      });
+      var arcLength = rScale(d[dataKey]);
+      var start = currentAngle;
+      // color priority - if there's a color on the individual point use that, otherwise use parent color or default
+      var fillColor = (_ref3 = (_d$fill = d === null || d === void 0 ? void 0 : d.fill) !== null && _d$fill !== void 0 ? _d$fill : childColor) !== null && _ref3 !== void 0 ? _ref3 : fill;
+      var {
+        x: textX,
+        y: textY
+      } = polarToCartesian(0, 0, innerR + radius / 2, -(start + arcLength - arcLength / 2));
+      currentAngle += arcLength;
+      sectors.push(/*#__PURE__*/React.createElement("g", {
+        key: "sunburst-sector-".concat(d.name, "-").concat(i)
+      }, /*#__PURE__*/React.createElement(Sector, {
+        onClick: () => handleClick(nodeWithIndex),
+        onMouseEnter: e => handleMouseEnter(nodeWithIndex, e),
+        onMouseLeave: e => handleMouseLeave(nodeWithIndex, e),
+        fill: fillColor,
+        stroke: stroke,
+        strokeWidth: padding,
+        startAngle: start,
+        endAngle: start + arcLength,
+        innerRadius: innerR,
+        outerRadius: innerR + radius,
+        cx: cx,
+        cy: cy
+      }), /*#__PURE__*/React.createElement(Text, _extends({}, textOptions, {
+        alignmentBaseline: "middle",
+        textAnchor: "middle",
+        x: textX + cx,
+        y: cy - textY
+      }), d[dataKey])));
+      var {
+        x: tooltipX,
+        y: tooltipY
+      } = polarToCartesian(cx, cy, innerR + radius / 2, start);
+      positions.set(d.name, {
+        x: tooltipX,
+        y: tooltipY
+      });
+      return drawArcs(d.children, {
+        radius,
+        innerR: innerR + radius + ringPadding,
+        initialAngle: start,
+        childColor: fillColor,
+        nestedActiveTooltipIndex: currentTooltipIndex
+      }, depth + 1);
+    });
+  }
+  drawArcs(data.children, {
+    radius: thickness,
+    innerR: innerRadius,
+    initialAngle: startAngle
+  });
+  var layerClass = clsx('recharts-sunburst', className);
+  return /*#__PURE__*/React.createElement(Surface, {
+    width: width,
+    height: height
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: layerClass
+  }, sectors), /*#__PURE__*/React.createElement(SetSunburstTooltipEntrySettings, {
+    dataKey: dataKey,
+    nameKey: nameKey,
+    data: data,
+    stroke: stroke,
+    fill: fill,
+    positions: positions,
+    id: id
+  }), children);
+};
+
+/**
+ * The sunburst is a hierarchical chart, similar to a {@link Treemap}, plotted in polar coordinates.
+ * Sunburst charts effectively convey the hierarchical relationships and proportions within each level.
+ * It is easy to see all the middle layers in the hierarchy, which might get lost in other visualizations.
+ * For some datasets, the radial layout may be more visually appealing and intuitive than a traditional {@link Treemap}.
+ *
+ * @consumes ResponsiveContainerContext
+ * @provides TooltipEntrySettings
+ */
+export var SunburstChart = outsideProps => {
+  var props = resolveDefaultProps(outsideProps, defaultSunburstChartProps);
+  var {
+    className,
+    width,
+    height,
+    responsive,
+    style,
+    id: externalId
+  } = props;
+  var [tooltipPortal, setTooltipPortal] = useState(null);
+  return /*#__PURE__*/React.createElement(RechartsStoreProvider, {
+    preloadedState: preloadedState,
+    reduxStoreName: className !== null && className !== void 0 ? className : 'SunburstChart'
+  }, /*#__PURE__*/React.createElement(ReportChartSize, {
+    width: width,
+    height: height
+  }), /*#__PURE__*/React.createElement(ReportChartMargin, {
+    margin: defaultSunburstMargin
+  }), /*#__PURE__*/React.createElement(TooltipPortalContext.Provider, {
+    value: tooltipPortal
+  }, /*#__PURE__*/React.createElement(RechartsWrapper, {
+    className: className,
+    width: width,
+    height: height,
+    responsive: responsive,
+    style: style,
+    ref: node => {
+      if (tooltipPortal == null && node != null) {
+        setTooltipPortal(node);
+      }
+    },
+    onMouseEnter: undefined,
+    onMouseLeave: undefined,
+    onClick: undefined,
+    onMouseMove: undefined,
+    onMouseDown: undefined,
+    onMouseUp: undefined,
+    onContextMenu: undefined,
+    onDoubleClick: undefined,
+    onTouchStart: undefined,
+    onTouchMove: undefined,
+    onTouchEnd: undefined
+  }, /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: externalId,
+    type: "sunburst"
+  }, id => /*#__PURE__*/React.createElement(SunburstChartImpl, _extends({}, props, {
+    id: id
+  }))))));
+};
Index: node_modules/recharts/es6/chart/Treemap.js
===================================================================
--- node_modules/recharts/es6/chart/Treemap.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/Treemap.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,830 @@
+var _excluded = ["width", "height", "className", "style", "children", "type"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { PureComponent, useCallback, useState } from 'react';
+import omit from 'es-toolkit/compat/omit';
+import get from 'es-toolkit/compat/get';
+import { Layer } from '../container/Layer';
+import { Surface } from '../container/Surface';
+import { Polygon } from '../shape/Polygon';
+import { Rectangle } from '../shape/Rectangle';
+import { getValueByDataKey } from '../util/ChartUtils';
+import { COLOR_PANEL } from '../util/Constants';
+import { isNan, noop, uniqueId } from '../util/DataUtils';
+import { getStringSize } from '../util/DOMUtils';
+import { ReportChartMargin, useChartHeight, useChartWidth } from '../context/chartLayoutContext';
+import { TooltipPortalContext } from '../context/tooltipPortalContext';
+import { RechartsWrapper } from './RechartsWrapper';
+import { setActiveClickItemIndex, setActiveMouseOverItemIndex } from '../state/tooltipSlice';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { RechartsStoreProvider } from '../state/RechartsStoreProvider';
+import { useAppDispatch } from '../state/hooks';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { CSSTransitionAnimate } from '../animation/CSSTransitionAnimate';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+var NODE_VALUE_KEY = 'value';
+
+/**
+ * This is what end users defines as `data` on Treemap.
+ */
+
+/**
+ * This is what is returned from `squarify`, the final treemap data structure
+ * that gets rendered and is stored in
+ */
+
+function isTreemapNode(value) {
+  return value != null && typeof value === 'object' && 'x' in value && 'y' in value && 'width' in value && 'height' in value && typeof value.x === 'number' && typeof value.y === 'number' && typeof value.width === 'number' && typeof value.height === 'number';
+}
+export var treemapPayloadSearcher = (data, activeIndex) => {
+  if (!data || !activeIndex) {
+    return undefined;
+  }
+  return get(data, activeIndex);
+};
+export var addToTreemapNodeIndex = function addToTreemapNodeIndex(indexInChildrenArr) {
+  var activeTooltipIndexSoFar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
+  return "".concat(activeTooltipIndexSoFar, "children[").concat(indexInChildrenArr, "]");
+};
+var options = {
+  chartName: 'Treemap',
+  defaultTooltipEventType: 'item',
+  validateTooltipEventTypes: ['item'],
+  tooltipPayloadSearcher: treemapPayloadSearcher,
+  eventEmitter: undefined
+};
+export var computeNode = _ref => {
+  var {
+    depth,
+    node,
+    index,
+    dataKey,
+    nameKey,
+    nestedActiveTooltipIndex
+  } = _ref;
+  var currentTooltipIndex = depth === 0 ? '' : addToTreemapNodeIndex(index, nestedActiveTooltipIndex);
+  var {
+    children
+  } = node;
+  var childDepth = depth + 1;
+  var computedChildren = children && children.length ? children.map((child, i) => computeNode({
+    depth: childDepth,
+    node: child,
+    index: i,
+    dataKey,
+    nameKey,
+    nestedActiveTooltipIndex: currentTooltipIndex
+  })) : null;
+  var nodeValue;
+  if (computedChildren && computedChildren.length) {
+    nodeValue = computedChildren.reduce((result, child) => result + child.value, 0);
+  } else {
+    // TODO need to verify dataKey
+    var rawNodeValue = node[dataKey];
+    var numericValue = typeof rawNodeValue === 'number' ? rawNodeValue : 0;
+    nodeValue = isNan(numericValue) || numericValue <= 0 ? 0 : numericValue;
+  }
+  return _objectSpread(_objectSpread({}, node), {}, {
+    children: computedChildren,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    name: getValueByDataKey(node, nameKey, ''),
+    [NODE_VALUE_KEY]: nodeValue,
+    depth,
+    index,
+    tooltipIndex: currentTooltipIndex
+  });
+};
+var filterRect = node => ({
+  x: node.x,
+  y: node.y,
+  width: node.width,
+  height: node.height
+});
+// Compute the area for each child based on value & scale.
+var getAreaOfChildren = (children, areaValueRatio) => {
+  var ratio = areaValueRatio < 0 ? 0 : areaValueRatio;
+  return children.map(child => {
+    var area = child[NODE_VALUE_KEY] * ratio;
+    return _objectSpread(_objectSpread({}, child), {}, {
+      area: isNan(area) || area <= 0 ? 0 : area
+    });
+  });
+};
+
+// Computes the score for the specified row, as the worst aspect ratio.
+var getWorstScore = (row, parentSize, aspectRatio) => {
+  var parentArea = parentSize * parentSize;
+  var rowArea = row.area * row.area;
+  var {
+    min,
+    max
+  } = row.reduce((result, child) => ({
+    min: Math.min(result.min, child.area),
+    max: Math.max(result.max, child.area)
+  }), {
+    min: Infinity,
+    max: 0
+  });
+  return rowArea ? Math.max(parentArea * max * aspectRatio / rowArea, rowArea / (parentArea * min * aspectRatio)) : Infinity;
+};
+var horizontalPosition = (row, parentSize, parentRect, isFlush) => {
+  var rowHeight = parentSize ? Math.round(row.area / parentSize) : 0;
+  if (isFlush || rowHeight > parentRect.height) {
+    rowHeight = parentRect.height;
+  }
+  var curX = parentRect.x;
+  var child;
+  for (var i = 0, len = row.length; i < len; i++) {
+    child = row[i];
+    if (child == null) {
+      continue;
+    }
+    child.x = curX;
+    child.y = parentRect.y;
+    child.height = rowHeight;
+    child.width = Math.min(rowHeight ? Math.round(child.area / rowHeight) : 0, parentRect.x + parentRect.width - curX);
+    curX += child.width;
+  }
+  // add the remain x to the last one of row
+  if (child != null) {
+    child.width += parentRect.x + parentRect.width - curX;
+  }
+  return _objectSpread(_objectSpread({}, parentRect), {}, {
+    y: parentRect.y + rowHeight,
+    height: parentRect.height - rowHeight
+  });
+};
+var verticalPosition = (row, parentSize, parentRect, isFlush) => {
+  var rowWidth = parentSize ? Math.round(row.area / parentSize) : 0;
+  if (isFlush || rowWidth > parentRect.width) {
+    rowWidth = parentRect.width;
+  }
+  var curY = parentRect.y;
+  var child;
+  for (var i = 0, len = row.length; i < len; i++) {
+    child = row[i];
+    if (child == null) {
+      continue;
+    }
+    child.x = parentRect.x;
+    child.y = curY;
+    child.width = rowWidth;
+    child.height = Math.min(rowWidth ? Math.round(child.area / rowWidth) : 0, parentRect.y + parentRect.height - curY);
+    curY += child.height;
+  }
+  if (child) {
+    child.height += parentRect.y + parentRect.height - curY;
+  }
+  return _objectSpread(_objectSpread({}, parentRect), {}, {
+    x: parentRect.x + rowWidth,
+    width: parentRect.width - rowWidth
+  });
+};
+var position = (row, parentSize, parentRect, isFlush) => {
+  if (parentSize === parentRect.width) {
+    return horizontalPosition(row, parentSize, parentRect, isFlush);
+  }
+  return verticalPosition(row, parentSize, parentRect, isFlush);
+};
+// Recursively arranges the specified node's children into squarified rows.
+var squarify = (node, aspectRatio) => {
+  var {
+    children
+  } = node;
+  if (children && children.length) {
+    var rect = filterRect(node);
+    // @ts-expect-error we can't create an array with static property on a single line so typescript will complain.
+    var row = [];
+    var best = Infinity; // the best row score so far
+    var child, score; // the current row score
+    var size = Math.min(rect.width, rect.height); // initial orientation
+    var scaleChildren = getAreaOfChildren(children, rect.width * rect.height / node[NODE_VALUE_KEY]);
+    var tempChildren = scaleChildren.slice();
+
+    // why are we setting static properties on an array?
+    row.area = 0;
+    while (tempChildren.length > 0) {
+      [child] = tempChildren;
+      if (child == null) {
+        continue;
+      }
+      // row first
+      row.push(child);
+      row.area += child.area;
+      score = getWorstScore(row, size, aspectRatio);
+      if (score <= best) {
+        // continue with this orientation
+        tempChildren.shift();
+        best = score;
+      } else {
+        var _row$pop$area, _row$pop;
+        // abort, and try a different orientation
+        row.area -= (_row$pop$area = (_row$pop = row.pop()) === null || _row$pop === void 0 ? void 0 : _row$pop.area) !== null && _row$pop$area !== void 0 ? _row$pop$area : 0;
+        rect = position(row, size, rect, false);
+        size = Math.min(rect.width, rect.height);
+        row.length = row.area = 0;
+        best = Infinity;
+      }
+    }
+    if (row.length) {
+      rect = position(row, size, rect, true);
+      row.length = row.area = 0;
+    }
+    return _objectSpread(_objectSpread({}, node), {}, {
+      children: scaleChildren.map(c => squarify(c, aspectRatio))
+    });
+  }
+  return node;
+};
+export var defaultTreeMapProps = {
+  aspectRatio: 0.5 * (1 + Math.sqrt(5)),
+  dataKey: 'value',
+  nameKey: 'name',
+  type: 'flat',
+  isAnimationActive: 'auto',
+  isUpdateAnimationActive: 'auto',
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'linear'
+};
+var defaultState = {
+  isAnimationFinished: false,
+  formatRoot: null,
+  currentRoot: undefined,
+  nestIndex: [],
+  prevAspectRatio: defaultTreeMapProps.aspectRatio,
+  prevDataKey: defaultTreeMapProps.dataKey
+};
+function ContentItem(_ref2) {
+  var {
+    content,
+    nodeProps,
+    type,
+    colorPanel,
+    onMouseEnter,
+    onMouseLeave,
+    onClick
+  } = _ref2;
+  if (/*#__PURE__*/React.isValidElement(content)) {
+    return /*#__PURE__*/React.createElement(Layer, {
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick
+    }, /*#__PURE__*/React.cloneElement(content, nodeProps));
+  }
+  if (typeof content === 'function') {
+    return /*#__PURE__*/React.createElement(Layer, {
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick
+    }, content(nodeProps));
+  }
+  // optimize default shape
+  var {
+    x,
+    y,
+    width,
+    height,
+    index
+  } = nodeProps;
+  var arrow = null;
+  if (width > 10 && height > 10 && nodeProps.children && type === 'nest') {
+    arrow = /*#__PURE__*/React.createElement(Polygon, {
+      points: [{
+        x: x + 2,
+        y: y + height / 2
+      }, {
+        x: x + 6,
+        y: y + height / 2 + 3
+      }, {
+        x: x + 2,
+        y: y + height / 2 + 6
+      }]
+    });
+  }
+  var text = null;
+  var nameSize = getStringSize(nodeProps.name);
+  if (width > 20 && height > 20 && nameSize.width < width && nameSize.height < height) {
+    text = /*#__PURE__*/React.createElement("text", {
+      x: x + 8,
+      y: y + height / 2 + 7,
+      fontSize: 14
+    }, nodeProps.name);
+  }
+  var colors = colorPanel || COLOR_PANEL;
+  return /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement(Rectangle, _extends({
+    fill: nodeProps.depth < 2 ? colors[index % colors.length] : 'rgba(255,255,255,0)',
+    stroke: "#fff"
+  }, omit(nodeProps, ['children']), {
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onClick: onClick,
+    "data-recharts-item-index": nodeProps.tooltipIndex
+  })), arrow, text);
+}
+function ContentItemWithEvents(props) {
+  var dispatch = useAppDispatch();
+  var activeCoordinate = {
+    x: props.nodeProps.x + props.nodeProps.width / 2,
+    y: props.nodeProps.y + props.nodeProps.height / 2
+  };
+  var onMouseEnter = () => {
+    dispatch(setActiveMouseOverItemIndex({
+      activeIndex: props.nodeProps.tooltipIndex,
+      activeDataKey: props.dataKey,
+      activeCoordinate,
+      activeGraphicalItemId: props.id
+    }));
+  };
+  var onMouseLeave = () => {
+    // clearing state on mouseLeaveItem causes re-rendering issues
+    // we don't actually want to do this for TreeMap - we clear state when we leave the entire chart instead
+  };
+  var onClick = () => {
+    dispatch(setActiveClickItemIndex({
+      activeIndex: props.nodeProps.tooltipIndex,
+      activeDataKey: props.dataKey,
+      activeCoordinate,
+      activeGraphicalItemId: props.id
+    }));
+  };
+  return /*#__PURE__*/React.createElement(ContentItem, _extends({}, props, {
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onClick: onClick
+  }));
+}
+var SetTreemapTooltipEntrySettings = /*#__PURE__*/React.memo(_ref3 => {
+  var {
+    dataKey,
+    nameKey,
+    stroke,
+    fill,
+    currentRoot,
+    id
+  } = _ref3;
+  var tooltipEntrySettings = {
+    dataDefinedOnItem: currentRoot,
+    getPosition: noop,
+    // TODO I think Treemap has the capability of computing positions and supporting defaultIndex? Except it doesn't yet
+    settings: {
+      stroke,
+      strokeWidth: undefined,
+      fill,
+      dataKey,
+      nameKey,
+      name: undefined,
+      // Each TreemapNode has its own name
+      hide: false,
+      type: undefined,
+      color: fill,
+      unit: '',
+      graphicalItemId: id
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+
+// Why is margin not a treemap prop? No clue. Probably it should be
+var defaultTreemapMargin = {
+  top: 0,
+  right: 0,
+  bottom: 0,
+  left: 0
+};
+function TreemapItem(_ref4) {
+  var {
+    content,
+    nodeProps,
+    isLeaf,
+    treemapProps,
+    onNestClick
+  } = _ref4;
+  var {
+    id,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    isUpdateAnimationActive,
+    type,
+    colorPanel,
+    dataKey,
+    onAnimationStart,
+    onAnimationEnd,
+    onMouseEnter: onMouseEnterFromProps,
+    onClick: onItemClickFromProps,
+    onMouseLeave: onMouseLeaveFromProps
+  } = treemapProps;
+  var {
+    width,
+    height,
+    x,
+    y
+  } = nodeProps;
+  var translateX = -x - width;
+  var translateY = 0;
+  var onMouseEnter = e => {
+    if ((isLeaf || type === 'nest') && typeof onMouseEnterFromProps === 'function') {
+      onMouseEnterFromProps(nodeProps, e);
+    }
+  };
+  var onMouseLeave = e => {
+    if ((isLeaf || type === 'nest') && typeof onMouseLeaveFromProps === 'function') {
+      onMouseLeaveFromProps(nodeProps, e);
+    }
+  };
+  var onClick = () => {
+    if (type === 'nest') {
+      onNestClick(nodeProps);
+    }
+    if ((isLeaf || type === 'nest') && typeof onItemClickFromProps === 'function') {
+      onItemClickFromProps(nodeProps);
+    }
+  };
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(CSSTransitionAnimate, {
+    animationId: "treemap-".concat(nodeProps.tooltipIndex),
+    from: "translate(".concat(translateX, "px, ").concat(translateY, "px)"),
+    to: "translate(0, 0)",
+    attributeName: "transform",
+    begin: animationBegin,
+    easing: animationEasing,
+    isActive: isAnimationActive,
+    duration: animationDuration,
+    onAnimationStart: handleAnimationStart,
+    onAnimationEnd: handleAnimationEnd
+  }, style => /*#__PURE__*/React.createElement(Layer, {
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onClick: onClick,
+    style: _objectSpread(_objectSpread({}, style), {}, {
+      transformOrigin: "".concat(x, " ").concat(y)
+    })
+  }, /*#__PURE__*/React.createElement(ContentItemWithEvents, {
+    id: id,
+    content: content,
+    dataKey: dataKey,
+    nodeProps: _objectSpread(_objectSpread({}, nodeProps), {}, {
+      isAnimationActive,
+      isUpdateAnimationActive: !isUpdateAnimationActive,
+      width,
+      height,
+      x,
+      y
+    }),
+    type: type,
+    colorPanel: colorPanel
+  })));
+}
+class TreemapWithState extends PureComponent {
+  constructor() {
+    super(...arguments);
+    _defineProperty(this, "state", _objectSpread({}, defaultState));
+    _defineProperty(this, "handleClick", node => {
+      var {
+        onClick,
+        type
+      } = this.props;
+      if (type === 'nest' && node.children) {
+        var {
+          width,
+          height,
+          dataKey,
+          nameKey,
+          aspectRatio
+        } = this.props;
+        var root = computeNode({
+          depth: 0,
+          node: _objectSpread(_objectSpread({}, node), {}, {
+            x: 0,
+            y: 0,
+            width,
+            height
+          }),
+          index: 0,
+          dataKey,
+          nameKey,
+          // with Treemap nesting, should this continue nesting the index or start from empty string?
+          nestedActiveTooltipIndex: node.tooltipIndex
+        });
+        var formatRoot = squarify(root, aspectRatio);
+        var {
+          nestIndex
+        } = this.state;
+        nestIndex.push(node);
+        this.setState({
+          formatRoot,
+          currentRoot: root,
+          nestIndex
+        });
+      }
+      if (onClick) {
+        onClick(node);
+      }
+    });
+    _defineProperty(this, "handleTouchMove", e => {
+      var touchEvent = e.touches[0];
+      if (touchEvent == null) {
+        return;
+      }
+      var target = document.elementFromPoint(touchEvent.clientX, touchEvent.clientY);
+      if (!target || !target.getAttribute || this.state.formatRoot == null) {
+        return;
+      }
+      var itemIndex = target.getAttribute('data-recharts-item-index');
+      var activeNode = treemapPayloadSearcher(this.state.formatRoot, itemIndex);
+      if (!isTreemapNode(activeNode)) {
+        return;
+      }
+      var {
+        dataKey,
+        dispatch
+      } = this.props;
+      var activeCoordinate = {
+        x: activeNode.x + activeNode.width / 2,
+        y: activeNode.y + activeNode.height / 2
+      };
+
+      // Treemap does not support onTouchMove prop, but it could
+      // onTouchMove?.(activeNode, Number(itemIndex), e);
+      dispatch(setActiveMouseOverItemIndex({
+        activeIndex: itemIndex,
+        activeDataKey: dataKey,
+        activeCoordinate,
+        activeGraphicalItemId: this.props.id
+      }));
+    });
+  }
+  static getDerivedStateFromProps(nextProps, prevState) {
+    if (nextProps.data !== prevState.prevData || nextProps.type !== prevState.prevType || nextProps.width !== prevState.prevWidth || nextProps.height !== prevState.prevHeight || nextProps.dataKey !== prevState.prevDataKey || nextProps.aspectRatio !== prevState.prevAspectRatio) {
+      var root = computeNode({
+        depth: 0,
+        // @ts-expect-error missing properties
+        node: {
+          children: nextProps.data,
+          x: 0,
+          y: 0,
+          width: nextProps.width,
+          height: nextProps.height
+        },
+        index: 0,
+        dataKey: nextProps.dataKey,
+        nameKey: nextProps.nameKey
+      });
+      var formatRoot = squarify(root, nextProps.aspectRatio);
+      return _objectSpread(_objectSpread({}, prevState), {}, {
+        formatRoot,
+        currentRoot: root,
+        nestIndex: [root],
+        prevAspectRatio: nextProps.aspectRatio,
+        prevData: nextProps.data,
+        prevWidth: nextProps.width,
+        prevHeight: nextProps.height,
+        prevDataKey: nextProps.dataKey,
+        prevType: nextProps.type
+      });
+    }
+    return null;
+  }
+  handleNestIndex(node, i) {
+    var {
+      nestIndex
+    } = this.state;
+    var {
+      width,
+      height,
+      dataKey,
+      nameKey,
+      aspectRatio
+    } = this.props;
+    var root = computeNode({
+      depth: 0,
+      node: _objectSpread(_objectSpread({}, node), {}, {
+        x: 0,
+        y: 0,
+        width,
+        height
+      }),
+      index: 0,
+      dataKey,
+      nameKey,
+      // with Treemap nesting, should this continue nesting the index or start from empty string?
+      nestedActiveTooltipIndex: node.tooltipIndex
+    });
+    var formatRoot = squarify(root, aspectRatio);
+    nestIndex = nestIndex.slice(0, i + 1);
+    this.setState({
+      formatRoot,
+      currentRoot: node,
+      nestIndex
+    });
+  }
+  renderNode(root, node) {
+    var {
+      content,
+      type
+    } = this.props;
+    var nodeProps = _objectSpread(_objectSpread(_objectSpread({}, svgPropertiesNoEvents(this.props)), node), {}, {
+      root
+    });
+    var isLeaf = !node.children || !node.children.length;
+    var {
+      currentRoot
+    } = this.state;
+    var isCurrentRootChild = ((currentRoot === null || currentRoot === void 0 ? void 0 : currentRoot.children) || []).filter(item => item.depth === node.depth && item.name === node.name);
+    if (!isCurrentRootChild.length && root.depth && type === 'nest') {
+      return null;
+    }
+    return /*#__PURE__*/React.createElement(Layer, {
+      key: "recharts-treemap-node-".concat(nodeProps.x, "-").concat(nodeProps.y, "-").concat(nodeProps.name),
+      className: "recharts-treemap-depth-".concat(node.depth)
+    }, /*#__PURE__*/React.createElement(TreemapItem, {
+      isLeaf: isLeaf,
+      content: content,
+      nodeProps: nodeProps,
+      treemapProps: this.props,
+      onNestClick: this.handleClick
+    }), node.children && node.children.length ? node.children.map(child => this.renderNode(node, child)) : null);
+  }
+  renderAllNodes() {
+    var {
+      formatRoot
+    } = this.state;
+    if (!formatRoot) {
+      return null;
+    }
+    return this.renderNode(formatRoot, formatRoot);
+  }
+
+  // render nest treemap
+  renderNestIndex() {
+    var {
+      nameKey,
+      nestIndexContent
+    } = this.props;
+    var {
+      nestIndex
+    } = this.state;
+    return /*#__PURE__*/React.createElement("div", {
+      className: "recharts-treemap-nest-index-wrapper",
+      style: {
+        marginTop: '8px',
+        textAlign: 'center'
+      }
+    }, nestIndex.map((item, i) => {
+      // TODO need to verify nameKey type
+      var rawName = get(item, nameKey, 'root');
+      var name = typeof rawName === 'string' ? rawName : 'root';
+      var content;
+      if (/*#__PURE__*/React.isValidElement(nestIndexContent)) {
+        // the cloned content is ignored at all times - let's remove it?
+        content = /*#__PURE__*/React.cloneElement(nestIndexContent, item, i);
+      }
+      if (typeof nestIndexContent === 'function') {
+        content = nestIndexContent(item, i);
+      } else {
+        content = name;
+      }
+      return (
+        /*#__PURE__*/
+        // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
+        React.createElement("div", {
+          onClick: this.handleNestIndex.bind(this, item, i),
+          key: "nest-index-".concat(uniqueId()),
+          className: "recharts-treemap-nest-index-box",
+          style: {
+            cursor: 'pointer',
+            display: 'inline-block',
+            padding: '0 7px',
+            background: '#000',
+            color: '#fff',
+            marginRight: '3px'
+          }
+        }, content)
+      );
+    }));
+  }
+  render() {
+    var _this$props = this.props,
+      {
+        width,
+        height,
+        className,
+        style,
+        children,
+        type
+      } = _this$props,
+      others = _objectWithoutProperties(_this$props, _excluded);
+    var attrs = svgPropertiesNoEvents(others);
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetTreemapTooltipEntrySettings, {
+      dataKey: this.props.dataKey,
+      nameKey: this.props.nameKey,
+      stroke: this.props.stroke,
+      fill: this.props.fill,
+      currentRoot: this.state.currentRoot,
+      id: this.props.id
+    }), /*#__PURE__*/React.createElement(Surface, _extends({}, attrs, {
+      width: width,
+      height: type === 'nest' ? height - 30 : height,
+      onTouchMove: this.handleTouchMove
+    }), this.renderAllNodes(), children), type === 'nest' && this.renderNestIndex());
+  }
+}
+_defineProperty(TreemapWithState, "displayName", 'Treemap');
+function TreemapDispatchInject(props) {
+  var dispatch = useAppDispatch();
+  var width = useChartWidth();
+  var height = useChartHeight();
+  if (!isPositiveNumber(width) || !isPositiveNumber(height)) {
+    return null;
+  }
+  var {
+    id: externalId
+  } = props;
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: externalId,
+    type: "treemap"
+  }, id => /*#__PURE__*/React.createElement(TreemapWithState, _extends({}, props, {
+    id: id,
+    width: width,
+    height: height,
+    dispatch: dispatch
+  })));
+}
+
+/**
+ * The Treemap chart is used to visualize hierarchical data using nested rectangles.
+ *
+ * @consumes ResponsiveContainerContext
+ * @provides TooltipEntrySettings
+ */
+export function Treemap(outsideProps) {
+  var _props$className;
+  var props = resolveDefaultProps(outsideProps, defaultTreeMapProps);
+  var {
+    className,
+    style,
+    width,
+    height
+  } = props;
+  var [tooltipPortal, setTooltipPortal] = useState(null);
+  return /*#__PURE__*/React.createElement(RechartsStoreProvider, {
+    preloadedState: {
+      options
+    },
+    reduxStoreName: (_props$className = props.className) !== null && _props$className !== void 0 ? _props$className : 'Treemap'
+  }, /*#__PURE__*/React.createElement(ReportChartMargin, {
+    margin: defaultTreemapMargin
+  }), /*#__PURE__*/React.createElement(RechartsWrapper, {
+    dispatchTouchEvents: false,
+    className: className,
+    style: style,
+    width: width,
+    height: height
+    /*
+     * Treemap has a bug where it doesn't include strokeWidth in its dimension calculation
+     * which makes the actual chart exactly {strokeWidth} larger than asked for.
+     * It's not a huge deal usually, but it makes the responsive option cycle infinitely.
+     */,
+    responsive: false,
+    ref: node => {
+      if (tooltipPortal == null && node != null) {
+        setTooltipPortal(node);
+      }
+    },
+    onMouseEnter: undefined,
+    onMouseLeave: undefined,
+    onClick: undefined,
+    onMouseMove: undefined,
+    onMouseDown: undefined,
+    onMouseUp: undefined,
+    onContextMenu: undefined,
+    onDoubleClick: undefined,
+    onTouchStart: undefined,
+    onTouchMove: undefined,
+    onTouchEnd: undefined
+  }, /*#__PURE__*/React.createElement(TooltipPortalContext.Provider, {
+    value: tooltipPortal
+  }, /*#__PURE__*/React.createElement(TreemapDispatchInject, props))));
+}
Index: node_modules/recharts/es6/chart/types.js
===================================================================
--- node_modules/recharts/es6/chart/types.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/chart/types.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/component/ActivePoints.js
===================================================================
--- node_modules/recharts/es6/component/ActivePoints.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/ActivePoints.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,87 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { cloneElement, isValidElement } from 'react';
+import { adaptEventHandlers } from '../util/types';
+import { Dot } from '../shape/Dot';
+import { Layer } from '../container/Layer';
+import { useAppSelector } from '../state/hooks';
+import { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';
+import { useActiveTooltipDataPoints } from '../hooks';
+import { isNullish } from '../util/DataUtils';
+import { svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+var ActivePoint = _ref => {
+  var {
+    point,
+    childIndex,
+    mainColor,
+    activeDot,
+    dataKey,
+    clipPath
+  } = _ref;
+  if (activeDot === false || point.x == null || point.y == null) {
+    return null;
+  }
+  var dotPropsTyped = {
+    index: childIndex,
+    dataKey,
+    cx: point.x,
+    cy: point.y,
+    r: 4,
+    fill: mainColor !== null && mainColor !== void 0 ? mainColor : 'none',
+    strokeWidth: 2,
+    stroke: '#fff',
+    payload: point.payload,
+    value: point.value
+  };
+
+  // @ts-expect-error svgPropertiesNoEventsFromUnknown(activeDot) is contributing unknown props
+  var dotProps = _objectSpread(_objectSpread(_objectSpread({}, dotPropsTyped), svgPropertiesNoEventsFromUnknown(activeDot)), adaptEventHandlers(activeDot));
+  var dot;
+  if (/*#__PURE__*/isValidElement(activeDot)) {
+    // @ts-expect-error we're improperly typing events
+    dot = /*#__PURE__*/cloneElement(activeDot, dotProps);
+  } else if (typeof activeDot === 'function') {
+    dot = activeDot(dotProps);
+  } else {
+    dot = /*#__PURE__*/React.createElement(Dot, dotProps);
+  }
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-active-dot",
+    clipPath: clipPath
+  }, dot);
+};
+export function ActivePoints(_ref2) {
+  var {
+    points,
+    mainColor,
+    activeDot,
+    itemDataKey,
+    clipPath,
+    zIndex = DefaultZIndexes.activeDot
+  } = _ref2;
+  var activeTooltipIndex = useAppSelector(selectActiveTooltipIndex);
+  var activeDataPoints = useActiveTooltipDataPoints();
+  if (points == null || activeDataPoints == null) {
+    return null;
+  }
+  var activePoint = points.find(p => activeDataPoints.includes(p.payload));
+  if (isNullish(activePoint)) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: zIndex
+  }, /*#__PURE__*/React.createElement(ActivePoint, {
+    point: activePoint,
+    childIndex: Number(activeTooltipIndex),
+    mainColor: mainColor,
+    dataKey: itemDataKey,
+    activeDot: activeDot,
+    clipPath: clipPath
+  }));
+}
Index: node_modules/recharts/es6/component/Cell.js
===================================================================
--- node_modules/recharts/es6/component/Cell.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/Cell.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,15 @@
+/**
+ * Cell component used to define colors and styles of chart elements.
+ *
+ * This component is now deprecated and will be removed in Recharts 4.0.
+ *
+ * Please use the `shape` prop or `content` prop on the respective chart components
+ * to customize the rendering of chart elements instead of using `Cell`.
+ *
+ * @see {@link https://recharts.github.io/en-US/guide/cell/ Guide: Migrate from Cell component to shape prop}
+ *
+ * @deprecated
+ * @consumes CellReader
+ */
+export var Cell = _props => null;
+Cell.displayName = 'Cell';
Index: node_modules/recharts/es6/component/Cursor.js
===================================================================
--- node_modules/recharts/es6/component/Cursor.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/Cursor.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,137 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { cloneElement, createElement, isValidElement } from 'react';
+import { clsx } from 'clsx';
+import { isPolarCoordinate } from '../util/types';
+import { Curve } from '../shape/Curve';
+import { Cross } from '../shape/Cross';
+import { getCursorRectangle } from '../util/cursor/getCursorRectangle';
+import { Rectangle } from '../shape/Rectangle';
+import { getRadialCursorPoints } from '../util/cursor/getRadialCursorPoints';
+import { Sector } from '../shape/Sector';
+import { getCursorPoints } from '../util/cursor/getCursorPoints';
+import { useChartLayout, useOffsetInternal } from '../context/chartLayoutContext';
+import { useTooltipAxisBandSize } from '../context/useTooltipAxis';
+import { useChartName } from '../state/selectors/selectors';
+import { svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+
+/**
+ * If set false, no cursor will be drawn when tooltip is active.
+ * If set an object, the option is the configuration of cursor.
+ * If set a React element, the option is the custom react element of drawing cursor
+ */
+
+function RenderCursor(_ref) {
+  var {
+    cursor,
+    cursorComp,
+    cursorProps
+  } = _ref;
+  if (/*#__PURE__*/isValidElement(cursor)) {
+    return /*#__PURE__*/cloneElement(cursor, cursorProps);
+  }
+  return /*#__PURE__*/createElement(cursorComp, cursorProps);
+}
+export function CursorInternal(props) {
+  var _props$zIndex;
+  var {
+    coordinate,
+    payload,
+    index,
+    offset,
+    tooltipAxisBandSize,
+    layout,
+    cursor,
+    tooltipEventType,
+    chartName
+  } = props;
+
+  // The cursor is a part of the Tooltip, and it should be shown (by default) when the Tooltip is active.
+  var activeCoordinate = coordinate;
+  var activePayload = payload;
+  var activeTooltipIndex = index;
+  if (!cursor || !activeCoordinate || chartName !== 'ScatterChart' && tooltipEventType !== 'axis') {
+    return null;
+  }
+  var restProps, cursorComp, preferredZIndex;
+  if (chartName === 'ScatterChart') {
+    restProps = activeCoordinate;
+    cursorComp = Cross;
+    preferredZIndex = DefaultZIndexes.cursorLine;
+  } else if (chartName === 'BarChart') {
+    restProps = getCursorRectangle(layout, activeCoordinate, offset, tooltipAxisBandSize);
+    cursorComp = Rectangle;
+    preferredZIndex = DefaultZIndexes.cursorRectangle;
+  } else if (layout === 'radial' && isPolarCoordinate(activeCoordinate)) {
+    var {
+      cx,
+      cy,
+      radius,
+      startAngle,
+      endAngle
+    } = getRadialCursorPoints(activeCoordinate);
+    restProps = {
+      cx,
+      cy,
+      startAngle,
+      endAngle,
+      innerRadius: radius,
+      outerRadius: radius
+    };
+    cursorComp = Sector;
+    preferredZIndex = DefaultZIndexes.cursorLine;
+  } else {
+    restProps = {
+      points: getCursorPoints(layout, activeCoordinate, offset)
+    };
+    cursorComp = Curve;
+    preferredZIndex = DefaultZIndexes.cursorLine;
+  }
+  var extraClassName = typeof cursor === 'object' && 'className' in cursor ? cursor.className : undefined;
+  var cursorProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
+    stroke: '#ccc',
+    pointerEvents: 'none'
+  }, offset), restProps), svgPropertiesNoEventsFromUnknown(cursor)), {}, {
+    payload: activePayload,
+    payloadIndex: activeTooltipIndex,
+    className: clsx('recharts-tooltip-cursor', extraClassName)
+  });
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: (_props$zIndex = props.zIndex) !== null && _props$zIndex !== void 0 ? _props$zIndex : preferredZIndex
+  }, /*#__PURE__*/React.createElement(RenderCursor, {
+    cursor: cursor,
+    cursorComp: cursorComp,
+    cursorProps: cursorProps
+  }));
+}
+
+/*
+ * Cursor is the background, or a highlight,
+ * that shows when user mouses over or activates
+ * an area.
+ *
+ * It usually shows together with a tooltip
+ * to emphasise which part of the chart does the tooltip refer to.
+ */
+export function Cursor(props) {
+  var tooltipAxisBandSize = useTooltipAxisBandSize();
+  var offset = useOffsetInternal();
+  var layout = useChartLayout();
+  var chartName = useChartName();
+  if (tooltipAxisBandSize == null || offset == null || layout == null || chartName == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(CursorInternal, _extends({}, props, {
+    offset: offset,
+    layout: layout,
+    tooltipAxisBandSize: tooltipAxisBandSize,
+    chartName: chartName
+  }));
+}
Index: node_modules/recharts/es6/component/Customized.js
===================================================================
--- node_modules/recharts/es6/component/Customized.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/Customized.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,39 @@
+var _excluded = ["component"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview Customized
+ */
+import * as React from 'react';
+import { isValidElement, cloneElement, createElement } from 'react';
+import { Layer } from '../container/Layer';
+import { warn } from '../util/LogUtils';
+/**
+ * Customized component used to be necessary to render custom elements in Recharts 2.x.
+ * Starting from Recharts 3.x, all charts are able to render arbitrary elements anywhere,
+ * and Customized is no longer needed.
+ *
+ * @example Before: `<Customized component={<MyCustomComponent />} />`
+ * @example After: `<MyCustomComponent />`
+ *
+ * @deprecated Just render your components directly. Will be removed in 4.0
+ */
+export function Customized(_ref) {
+  var {
+      component
+    } = _ref,
+    props = _objectWithoutProperties(_ref, _excluded);
+  var child;
+  if (/*#__PURE__*/isValidElement(component)) {
+    child = /*#__PURE__*/cloneElement(component, props);
+  } else if (typeof component === 'function') {
+    // @ts-expect-error TS cannot verify that C is FunctionComponent<P> here
+    child = /*#__PURE__*/createElement(component, props);
+  } else {
+    warn(false, "Customized's props `component` must be React.element or Function, but got %s.", typeof component);
+  }
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-customized-wrapper"
+  }, child);
+}
+Customized.displayName = 'Customized';
Index: node_modules/recharts/es6/component/DefaultLegendContent.js
===================================================================
--- node_modules/recharts/es6/component/DefaultLegendContent.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/DefaultLegendContent.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,166 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { Surface } from '../container/Surface';
+import { Symbols } from '../shape/Symbols';
+import { adaptEventsOfChild } from '../util/types';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+var SIZE = 32;
+var defaultLegendContentDefaultProps = {
+  align: 'center',
+  iconSize: 14,
+  inactiveColor: '#ccc',
+  layout: 'horizontal',
+  verticalAlign: 'middle'
+};
+function Icon(_ref) {
+  var {
+    data,
+    iconType,
+    inactiveColor
+  } = _ref;
+  var halfSize = SIZE / 2;
+  var sixthSize = SIZE / 6;
+  var thirdSize = SIZE / 3;
+  var color = data.inactive ? inactiveColor : data.color;
+  var preferredIcon = iconType !== null && iconType !== void 0 ? iconType : data.type;
+  if (preferredIcon === 'none') {
+    return null;
+  }
+  if (preferredIcon === 'plainline') {
+    var _data$payload;
+    return /*#__PURE__*/React.createElement("line", {
+      strokeWidth: 4,
+      fill: "none",
+      stroke: color,
+      strokeDasharray: (_data$payload = data.payload) === null || _data$payload === void 0 ? void 0 : _data$payload.strokeDasharray,
+      x1: 0,
+      y1: halfSize,
+      x2: SIZE,
+      y2: halfSize,
+      className: "recharts-legend-icon"
+    });
+  }
+  if (preferredIcon === 'line') {
+    return /*#__PURE__*/React.createElement("path", {
+      strokeWidth: 4,
+      fill: "none",
+      stroke: color,
+      d: "M0,".concat(halfSize, "h").concat(thirdSize, "\n            A").concat(sixthSize, ",").concat(sixthSize, ",0,1,1,").concat(2 * thirdSize, ",").concat(halfSize, "\n            H").concat(SIZE, "M").concat(2 * thirdSize, ",").concat(halfSize, "\n            A").concat(sixthSize, ",").concat(sixthSize, ",0,1,1,").concat(thirdSize, ",").concat(halfSize),
+      className: "recharts-legend-icon"
+    });
+  }
+  if (preferredIcon === 'rect') {
+    return /*#__PURE__*/React.createElement("path", {
+      stroke: "none",
+      fill: color,
+      d: "M0,".concat(SIZE / 8, "h").concat(SIZE, "v").concat(SIZE * 3 / 4, "h").concat(-SIZE, "z"),
+      className: "recharts-legend-icon"
+    });
+  }
+  if (/*#__PURE__*/React.isValidElement(data.legendIcon)) {
+    var iconProps = _objectSpread({}, data);
+    delete iconProps.legendIcon;
+    return /*#__PURE__*/React.cloneElement(data.legendIcon, iconProps);
+  }
+  return /*#__PURE__*/React.createElement(Symbols, {
+    fill: color,
+    cx: halfSize,
+    cy: halfSize,
+    size: SIZE,
+    sizeType: "diameter",
+    type: preferredIcon
+  });
+}
+function Items(props) {
+  var {
+    payload,
+    iconSize,
+    layout,
+    formatter,
+    inactiveColor,
+    iconType
+  } = props;
+  var viewBox = {
+    x: 0,
+    y: 0,
+    width: SIZE,
+    height: SIZE
+  };
+  var itemStyle = {
+    display: layout === 'horizontal' ? 'inline-block' : 'block',
+    marginRight: 10
+  };
+  var svgStyle = {
+    display: 'inline-block',
+    verticalAlign: 'middle',
+    marginRight: 4
+  };
+  return payload.map((entry, i) => {
+    var finalFormatter = entry.formatter || formatter;
+    var className = clsx({
+      'recharts-legend-item': true,
+      ["legend-item-".concat(i)]: true,
+      inactive: entry.inactive
+    });
+    if (entry.type === 'none') {
+      return null;
+    }
+    var color = entry.inactive ? inactiveColor : entry.color;
+    var finalValue = finalFormatter ? finalFormatter(entry.value, entry, i) : entry.value;
+    return /*#__PURE__*/React.createElement("li", _extends({
+      className: className,
+      style: itemStyle,
+      key: "legend-item-".concat(i)
+    }, adaptEventsOfChild(props, entry, i)), /*#__PURE__*/React.createElement(Surface, {
+      width: iconSize,
+      height: iconSize,
+      viewBox: viewBox,
+      style: svgStyle,
+      "aria-label": "".concat(finalValue, " legend icon")
+    }, /*#__PURE__*/React.createElement(Icon, {
+      data: entry,
+      iconType: iconType,
+      inactiveColor: inactiveColor
+    })), /*#__PURE__*/React.createElement("span", {
+      className: "recharts-legend-item-text",
+      style: {
+        color
+      }
+    }, finalValue));
+  });
+}
+
+/**
+ * This component is by default rendered inside the {@link Legend} component. You would not use it directly.
+ *
+ * You can use this component to customize the content of the legend,
+ * or you can provide your own completely independent content.
+ */
+export var DefaultLegendContent = outsideProps => {
+  var props = resolveDefaultProps(outsideProps, defaultLegendContentDefaultProps);
+  var {
+    payload,
+    layout,
+    align
+  } = props;
+  if (!payload || !payload.length) {
+    return null;
+  }
+  var finalStyle = {
+    padding: 0,
+    margin: 0,
+    textAlign: layout === 'horizontal' ? align : 'left'
+  };
+  return /*#__PURE__*/React.createElement("ul", {
+    className: "recharts-default-legend",
+    style: finalStyle
+  }, /*#__PURE__*/React.createElement(Items, _extends({}, props, {
+    payload: payload
+  })));
+};
Index: node_modules/recharts/es6/component/DefaultTooltipContent.js
===================================================================
--- node_modules/recharts/es6/component/DefaultTooltipContent.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/DefaultTooltipContent.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,131 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * @fileOverview Default Tooltip Content
+ */
+
+import * as React from 'react';
+import sortBy from 'es-toolkit/compat/sortBy';
+import { clsx } from 'clsx';
+import { isNullish, isNumOrStr } from '../util/DataUtils';
+function defaultFormatter(value) {
+  return Array.isArray(value) && isNumOrStr(value[0]) && isNumOrStr(value[1]) ? value.join(' ~ ') : value;
+}
+export var defaultDefaultTooltipContentProps = {
+  separator: ' : ',
+  contentStyle: {
+    margin: 0,
+    padding: 10,
+    backgroundColor: '#fff',
+    border: '1px solid #ccc',
+    whiteSpace: 'nowrap'
+  },
+  itemStyle: {
+    display: 'block',
+    paddingTop: 4,
+    paddingBottom: 4,
+    color: '#000'
+  },
+  labelStyle: {},
+  accessibilityLayer: false
+};
+
+/**
+ * This component is by default rendered inside the {@link Tooltip} component. You would not use it directly.
+ *
+ * You can use this component to customize the content of the tooltip,
+ * or you can provide your own completely independent content.
+ */
+export var DefaultTooltipContent = props => {
+  var {
+    separator = defaultDefaultTooltipContentProps.separator,
+    contentStyle,
+    itemStyle,
+    labelStyle = defaultDefaultTooltipContentProps.labelStyle,
+    payload,
+    formatter,
+    itemSorter,
+    wrapperClassName,
+    labelClassName,
+    label,
+    labelFormatter,
+    accessibilityLayer = defaultDefaultTooltipContentProps.accessibilityLayer
+  } = props;
+  var renderContent = () => {
+    if (payload && payload.length) {
+      var listStyle = {
+        padding: 0,
+        margin: 0
+      };
+      var items = (itemSorter ? sortBy(payload, itemSorter) : payload).map((entry, i) => {
+        if (entry.type === 'none') {
+          return null;
+        }
+        var finalFormatter = entry.formatter || formatter || defaultFormatter;
+        var {
+          value,
+          name
+        } = entry;
+        var finalValue = value;
+        var finalName = name;
+        if (finalFormatter) {
+          var formatted = finalFormatter(value, name, entry, i, payload);
+          if (Array.isArray(formatted)) {
+            [finalValue, finalName] = formatted;
+          } else if (formatted != null) {
+            finalValue = formatted;
+          } else {
+            return null;
+          }
+        }
+        var finalItemStyle = _objectSpread(_objectSpread({}, defaultDefaultTooltipContentProps.itemStyle), {}, {
+          color: entry.color || defaultDefaultTooltipContentProps.itemStyle.color
+        }, itemStyle);
+        return /*#__PURE__*/React.createElement("li", {
+          className: "recharts-tooltip-item",
+          key: "tooltip-item-".concat(i),
+          style: finalItemStyle
+        }, isNumOrStr(finalName) ? /*#__PURE__*/React.createElement("span", {
+          className: "recharts-tooltip-item-name"
+        }, finalName) : null, isNumOrStr(finalName) ? /*#__PURE__*/React.createElement("span", {
+          className: "recharts-tooltip-item-separator"
+        }, separator) : null, /*#__PURE__*/React.createElement("span", {
+          className: "recharts-tooltip-item-value"
+        }, finalValue), /*#__PURE__*/React.createElement("span", {
+          className: "recharts-tooltip-item-unit"
+        }, entry.unit || ''));
+      });
+      return /*#__PURE__*/React.createElement("ul", {
+        className: "recharts-tooltip-item-list",
+        style: listStyle
+      }, items);
+    }
+    return null;
+  };
+  var finalStyle = _objectSpread(_objectSpread({}, defaultDefaultTooltipContentProps.contentStyle), contentStyle);
+  var finalLabelStyle = _objectSpread({
+    margin: 0
+  }, labelStyle);
+  var hasLabel = !isNullish(label);
+  var finalLabel = hasLabel ? label : '';
+  var wrapperCN = clsx('recharts-default-tooltip', wrapperClassName);
+  var labelCN = clsx('recharts-tooltip-label', labelClassName);
+  if (hasLabel && labelFormatter && payload !== undefined && payload !== null) {
+    finalLabel = labelFormatter(label, payload);
+  }
+  var accessibilityAttributes = accessibilityLayer ? {
+    role: 'status',
+    'aria-live': 'assertive'
+  } : {};
+  return /*#__PURE__*/React.createElement("div", _extends({
+    className: wrapperCN,
+    style: finalStyle
+  }, accessibilityAttributes), /*#__PURE__*/React.createElement("p", {
+    className: labelCN,
+    style: finalLabelStyle
+  }, /*#__PURE__*/React.isValidElement(finalLabel) ? finalLabel : "".concat(finalLabel)), renderContent());
+};
Index: node_modules/recharts/es6/component/Dots.js
===================================================================
--- node_modules/recharts/es6/component/Dots.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/Dots.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,97 @@
+var _excluded = ["points"];
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { cloneElement, isValidElement } from 'react';
+import { clsx } from 'clsx';
+import { Dot } from '../shape/Dot';
+import { Layer } from '../container/Layer';
+import { isClipDot } from '../util/ReactUtils';
+import { svgPropertiesAndEventsFromUnknown } from '../util/svgPropertiesAndEvents';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+function DotItem(_ref) {
+  var {
+    option,
+    dotProps,
+    className
+  } = _ref;
+  if (/*#__PURE__*/isValidElement(option)) {
+    // @ts-expect-error we can't type check element cloning properly
+    return /*#__PURE__*/cloneElement(option, dotProps);
+  }
+  if (typeof option === 'function') {
+    return option(dotProps);
+  }
+  var finalClassName = clsx(className, typeof option !== 'boolean' ? option.className : '');
+  var _ref2 = dotProps !== null && dotProps !== void 0 ? dotProps : {},
+    {
+      points
+    } = _ref2,
+    props = _objectWithoutProperties(_ref2, _excluded);
+  return /*#__PURE__*/React.createElement(Dot, _extends({}, props, {
+    className: finalClassName
+  }));
+}
+function shouldRenderDots(points, dot) {
+  if (points == null) {
+    return false;
+  }
+  if (dot) {
+    return true;
+  }
+  return points.length === 1;
+}
+export function Dots(_ref3) {
+  var {
+    points,
+    dot,
+    className,
+    dotClassName,
+    dataKey,
+    baseProps,
+    needClip,
+    clipPathId,
+    zIndex = DefaultZIndexes.scatter
+  } = _ref3;
+  if (!shouldRenderDots(points, dot)) {
+    return null;
+  }
+  var clipDot = isClipDot(dot);
+  var customDotProps = svgPropertiesAndEventsFromUnknown(dot);
+  var dots = points.map((entry, i) => {
+    var _entry$x, _entry$y;
+    var dotProps = _objectSpread(_objectSpread(_objectSpread({
+      r: 3
+    }, baseProps), customDotProps), {}, {
+      index: i,
+      cx: (_entry$x = entry.x) !== null && _entry$x !== void 0 ? _entry$x : undefined,
+      cy: (_entry$y = entry.y) !== null && _entry$y !== void 0 ? _entry$y : undefined,
+      dataKey,
+      value: entry.value,
+      payload: entry.payload,
+      points
+    });
+    return /*#__PURE__*/React.createElement(DotItem, {
+      key: "dot-".concat(i),
+      option: dot,
+      dotProps: dotProps,
+      className: dotClassName
+    });
+  });
+  var layerProps = {};
+  if (needClip && clipPathId != null) {
+    layerProps.clipPath = "url(#clipPath-".concat(clipDot ? '' : 'dots-').concat(clipPathId, ")");
+  }
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: zIndex
+  }, /*#__PURE__*/React.createElement(Layer, _extends({
+    className: className
+  }, layerProps), dots));
+}
Index: node_modules/recharts/es6/component/Label.js
===================================================================
--- node_modules/recharts/es6/component/Label.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/Label.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,414 @@
+var _excluded = ["labelRef"],
+  _excluded2 = ["content"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { cloneElement, createContext, createElement, isValidElement, useContext, useMemo } from 'react';
+import { clsx } from 'clsx';
+import { isValidTextAnchor, Text } from './Text';
+import { isNullish, isNumber, isNumOrStr, mathSign, uniqueId } from '../util/DataUtils';
+import { polarToCartesian } from '../util/PolarUtils';
+import { cartesianViewBoxToTrapezoid, useViewBox } from '../context/chartLayoutContext';
+import { useAppSelector } from '../state/hooks';
+import { selectPolarViewBox } from '../state/selectors/polarAxisSelectors';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { getCartesianPosition } from '../cartesian/getCartesianPosition';
+
+/**
+ * @inline
+ */
+
+/**
+ * @inline
+ */
+
+/**
+ * @inline
+ */
+
+var CartesianLabelContext = /*#__PURE__*/createContext(null);
+export var CartesianLabelContextProvider = _ref => {
+  var {
+    x,
+    y,
+    upperWidth,
+    lowerWidth,
+    width,
+    height,
+    children
+  } = _ref;
+  var viewBox = useMemo(() => ({
+    x,
+    y,
+    upperWidth,
+    lowerWidth,
+    width,
+    height
+  }), [x, y, upperWidth, lowerWidth, width, height]);
+  return /*#__PURE__*/React.createElement(CartesianLabelContext.Provider, {
+    value: viewBox
+  }, children);
+};
+var useCartesianLabelContext = () => {
+  var labelChildContext = useContext(CartesianLabelContext);
+  var chartContext = useViewBox();
+  return labelChildContext || (chartContext ? cartesianViewBoxToTrapezoid(chartContext) : undefined);
+};
+var PolarLabelContext = /*#__PURE__*/createContext(null);
+export var PolarLabelContextProvider = _ref2 => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle,
+    clockWise,
+    children
+  } = _ref2;
+  var viewBox = useMemo(() => ({
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle,
+    clockWise
+  }), [cx, cy, innerRadius, outerRadius, startAngle, endAngle, clockWise]);
+  return /*#__PURE__*/React.createElement(PolarLabelContext.Provider, {
+    value: viewBox
+  }, children);
+};
+export var usePolarLabelContext = () => {
+  var labelChildContext = useContext(PolarLabelContext);
+  var chartContext = useAppSelector(selectPolarViewBox);
+  return labelChildContext || chartContext;
+};
+var getLabel = props => {
+  var {
+    value,
+    formatter
+  } = props;
+  var label = isNullish(props.children) ? value : props.children;
+  if (typeof formatter === 'function') {
+    return formatter(label);
+  }
+  return label;
+};
+export var isLabelContentAFunction = content => {
+  return content != null && typeof content === 'function';
+};
+var getDeltaAngle = (startAngle, endAngle) => {
+  var sign = mathSign(endAngle - startAngle);
+  var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);
+  return sign * deltaAngle;
+};
+var renderRadialLabel = (labelProps, position, label, attrs, viewBox) => {
+  var {
+    offset,
+    className
+  } = labelProps;
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle,
+    clockWise
+  } = viewBox;
+  var radius = (innerRadius + outerRadius) / 2;
+  var deltaAngle = getDeltaAngle(startAngle, endAngle);
+  var sign = deltaAngle >= 0 ? 1 : -1;
+  var labelAngle, direction;
+  switch (position) {
+    case 'insideStart':
+      labelAngle = startAngle + sign * offset;
+      direction = clockWise;
+      break;
+    case 'insideEnd':
+      labelAngle = endAngle - sign * offset;
+      direction = !clockWise;
+      break;
+    case 'end':
+      labelAngle = endAngle + sign * offset;
+      direction = clockWise;
+      break;
+    default:
+      throw new Error("Unsupported position ".concat(position));
+  }
+  direction = deltaAngle <= 0 ? direction : !direction;
+  var startPoint = polarToCartesian(cx, cy, radius, labelAngle);
+  var endPoint = polarToCartesian(cx, cy, radius, labelAngle + (direction ? 1 : -1) * 359);
+  var path = "M".concat(startPoint.x, ",").concat(startPoint.y, "\n    A").concat(radius, ",").concat(radius, ",0,1,").concat(direction ? 0 : 1, ",\n    ").concat(endPoint.x, ",").concat(endPoint.y);
+  var id = isNullish(labelProps.id) ? uniqueId('recharts-radial-line-') : labelProps.id;
+  return /*#__PURE__*/React.createElement("text", _extends({}, attrs, {
+    dominantBaseline: "central",
+    className: clsx('recharts-radial-bar-label', className)
+  }), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("path", {
+    id: id,
+    d: path
+  })), /*#__PURE__*/React.createElement("textPath", {
+    xlinkHref: "#".concat(id)
+  }, label));
+};
+var getAttrsOfPolarLabel = (viewBox, offset, position) => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle
+  } = viewBox;
+  var midAngle = (startAngle + endAngle) / 2;
+  if (position === 'outside') {
+    var {
+      x: _x,
+      y: _y
+    } = polarToCartesian(cx, cy, outerRadius + offset, midAngle);
+    return {
+      x: _x,
+      y: _y,
+      textAnchor: _x >= cx ? 'start' : 'end',
+      verticalAnchor: 'middle'
+    };
+  }
+  if (position === 'center') {
+    return {
+      x: cx,
+      y: cy,
+      textAnchor: 'middle',
+      verticalAnchor: 'middle'
+    };
+  }
+  if (position === 'centerTop') {
+    return {
+      x: cx,
+      y: cy,
+      textAnchor: 'middle',
+      verticalAnchor: 'start'
+    };
+  }
+  if (position === 'centerBottom') {
+    return {
+      x: cx,
+      y: cy,
+      textAnchor: 'middle',
+      verticalAnchor: 'end'
+    };
+  }
+  var r = (innerRadius + outerRadius) / 2;
+  var {
+    x,
+    y
+  } = polarToCartesian(cx, cy, r, midAngle);
+  return {
+    x,
+    y,
+    textAnchor: 'middle',
+    verticalAnchor: 'middle'
+  };
+};
+var isPolar = viewBox => viewBox != null && 'cx' in viewBox && isNumber(viewBox.cx);
+export var defaultLabelProps = {
+  angle: 0,
+  offset: 5,
+  zIndex: DefaultZIndexes.label,
+  position: 'middle',
+  textBreakAll: false
+};
+function polarViewBoxToTrapezoid(viewBox) {
+  if (!isPolar(viewBox)) {
+    return viewBox;
+  }
+  var {
+    cx,
+    cy,
+    outerRadius
+  } = viewBox;
+  var diameter = outerRadius * 2;
+  return {
+    x: cx - outerRadius,
+    y: cy - outerRadius,
+    width: diameter,
+    upperWidth: diameter,
+    lowerWidth: diameter,
+    height: diameter
+  };
+}
+
+/**
+ * @consumes CartesianViewBoxContext
+ * @consumes PolarViewBoxContext
+ * @consumes CartesianLabelContext
+ * @consumes PolarLabelContext
+ */
+export function Label(outerProps) {
+  var props = resolveDefaultProps(outerProps, defaultLabelProps);
+  var {
+    viewBox: viewBoxFromProps,
+    parentViewBox,
+    position,
+    value,
+    children,
+    content,
+    className = '',
+    textBreakAll,
+    labelRef
+  } = props;
+  var polarViewBox = usePolarLabelContext();
+  var cartesianViewBox = useCartesianLabelContext();
+
+  /*
+   * I am not proud about this solution, but it's a quick fix for https://github.com/recharts/recharts/issues/6030#issuecomment-3155352460.
+   * What we should really do is split Label into two components: CartesianLabel and PolarLabel and then handle their respective viewBoxes separately.
+   * Also other components should set its own viewBox in a context so that we can fix https://github.com/recharts/recharts/issues/6156
+   */
+  var resolvedViewBox = position === 'center' ? cartesianViewBox : polarViewBox !== null && polarViewBox !== void 0 ? polarViewBox : cartesianViewBox;
+  var viewBox, label, positionAttrs;
+  if (viewBoxFromProps == null) {
+    viewBox = resolvedViewBox;
+  } else if (isPolar(viewBoxFromProps)) {
+    viewBox = viewBoxFromProps;
+  } else {
+    viewBox = cartesianViewBoxToTrapezoid(viewBoxFromProps);
+  }
+  var cartesianBox = polarViewBoxToTrapezoid(viewBox);
+  if (!viewBox || isNullish(value) && isNullish(children) && ! /*#__PURE__*/isValidElement(content) && typeof content !== 'function') {
+    return null;
+  }
+  var propsWithViewBox = _objectSpread(_objectSpread({}, props), {}, {
+    viewBox
+  });
+  if (/*#__PURE__*/isValidElement(content)) {
+    var {
+        labelRef: _
+      } = propsWithViewBox,
+      propsWithoutLabelRef = _objectWithoutProperties(propsWithViewBox, _excluded);
+    return /*#__PURE__*/cloneElement(content, propsWithoutLabelRef);
+  }
+  if (typeof content === 'function') {
+    var {
+        content: _2
+      } = propsWithViewBox,
+      propsForContent = _objectWithoutProperties(propsWithViewBox, _excluded2);
+    // @ts-expect-error we're not checking if the content component returns something that Text is able to render
+    label = /*#__PURE__*/createElement(content, propsForContent);
+    if (/*#__PURE__*/isValidElement(label)) {
+      return label;
+    }
+  } else {
+    label = getLabel(props);
+  }
+  var attrs = svgPropertiesAndEvents(props);
+  if (isPolar(viewBox)) {
+    // TODO: Generic Polar Hook
+    if (position === 'insideStart' || position === 'insideEnd' || position === 'end') {
+      return renderRadialLabel(props, position, label, attrs, viewBox);
+    }
+    positionAttrs = getAttrsOfPolarLabel(viewBox, props.offset, props.position);
+  } else {
+    if (!cartesianBox) {
+      return null;
+    }
+    var cartesianResult = getCartesianPosition({
+      viewBox: cartesianBox,
+      position,
+      offset: props.offset,
+      parentViewBox: isPolar(parentViewBox) ? undefined : parentViewBox,
+      clamp: true
+    });
+    positionAttrs = _objectSpread(_objectSpread({
+      x: cartesianResult.x,
+      y: cartesianResult.y,
+      textAnchor: cartesianResult.horizontalAnchor,
+      verticalAnchor: cartesianResult.verticalAnchor
+    }, cartesianResult.width !== undefined ? {
+      width: cartesianResult.width
+    } : {}), cartesianResult.height !== undefined ? {
+      height: cartesianResult.height
+    } : {});
+  }
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(Text, _extends({
+    ref: labelRef,
+    className: clsx('recharts-label', className)
+  }, attrs, positionAttrs, {
+    /*
+     * textAnchor is decided by default based on the `position`
+     * but we allow overriding via props for precise control.
+     */
+    textAnchor: isValidTextAnchor(attrs.textAnchor) ? attrs.textAnchor : positionAttrs.textAnchor,
+    breakAll: textBreakAll
+  }), label));
+}
+Label.displayName = 'Label';
+var parseLabel = (label, viewBox, labelRef) => {
+  if (!label) {
+    return null;
+  }
+  var commonProps = {
+    viewBox,
+    labelRef
+  };
+  if (label === true) {
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit"
+    }, commonProps));
+  }
+  if (isNumOrStr(label)) {
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit",
+      value: label
+    }, commonProps));
+  }
+  if (/*#__PURE__*/isValidElement(label)) {
+    if (label.type === Label) {
+      return /*#__PURE__*/cloneElement(label, _objectSpread({
+        key: 'label-implicit'
+      }, commonProps));
+    }
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit",
+      content: label
+    }, commonProps));
+  }
+  if (isLabelContentAFunction(label)) {
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit",
+      content: label
+    }, commonProps));
+  }
+  if (label && typeof label === 'object') {
+    return /*#__PURE__*/React.createElement(Label, _extends({}, label, {
+      key: "label-implicit"
+    }, commonProps));
+  }
+  return null;
+};
+export function CartesianLabelFromLabelProp(_ref3) {
+  var {
+    label,
+    labelRef
+  } = _ref3;
+  var viewBox = useCartesianLabelContext();
+  return parseLabel(label, viewBox, labelRef) || null;
+}
+export function PolarLabelFromLabelProp(_ref4) {
+  var {
+    label
+  } = _ref4;
+  var viewBox = usePolarLabelContext();
+  return parseLabel(label, viewBox) || null;
+}
Index: node_modules/recharts/es6/component/LabelList.js
===================================================================
--- node_modules/recharts/es6/component/LabelList.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/LabelList.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,142 @@
+var _excluded = ["valueAccessor"],
+  _excluded2 = ["dataKey", "clockWise", "id", "textBreakAll", "zIndex"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { createContext, useContext } from 'react';
+import last from 'es-toolkit/compat/last';
+import { isLabelContentAFunction, Label } from './Label';
+import { Layer } from '../container/Layer';
+import { getValueByDataKey } from '../util/ChartUtils';
+import { isNullish } from '../util/DataUtils';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+
+/**
+ * This is public API because we expose it as the valueAccessor parameter.
+ *
+ * The properties of "viewBox" are repeated as the root props of the entry object.
+ * So it doesn't matter if you read entry.x or entry.viewBox.x, they are the same.
+ *
+ * It's not necessary to pass redundant data, but we keep it for backward compatibility.
+ */
+
+/**
+ * LabelList props do not allow refs because the same props are reused in multiple elements so we don't have a good single place to ref to.
+ */
+
+/**
+ * This is the type accepted for the `label` prop on various graphical items.
+ * It accepts:
+ *
+ * boolean:
+ *    true = labels show,
+ *    false = labels don't show
+ * React element:
+ *    will be cloned with extra props
+ * function:
+ *    is used as <Label content={function} />, so this will be called once for each individual label (so typically once for each data point)
+ * object:
+ *    the props to be passed to a LabelList component
+ *
+ * @inline
+ */
+
+var defaultAccessor = entry => Array.isArray(entry.value) ? last(entry.value) : entry.value;
+var CartesianLabelListContext = /*#__PURE__*/createContext(undefined);
+export var CartesianLabelListContextProvider = CartesianLabelListContext.Provider;
+var PolarLabelListContext = /*#__PURE__*/createContext(undefined);
+export var PolarLabelListContextProvider = PolarLabelListContext.Provider;
+function useCartesianLabelListContext() {
+  return useContext(CartesianLabelListContext);
+}
+function usePolarLabelListContext() {
+  return useContext(PolarLabelListContext);
+}
+
+/**
+ * @consumes LabelListContext
+ */
+export function LabelList(_ref) {
+  var {
+      valueAccessor = defaultAccessor
+    } = _ref,
+    restProps = _objectWithoutProperties(_ref, _excluded);
+  var {
+      dataKey,
+      clockWise,
+      id,
+      textBreakAll,
+      zIndex
+    } = restProps,
+    others = _objectWithoutProperties(restProps, _excluded2);
+  var cartesianData = useCartesianLabelListContext();
+  var polarData = usePolarLabelListContext();
+  var data = cartesianData || polarData;
+  if (!data || !data.length) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: zIndex !== null && zIndex !== void 0 ? zIndex : DefaultZIndexes.label
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-label-list"
+  }, data.map((entry, index) => {
+    var _restProps$fill;
+    var value = isNullish(dataKey) ? valueAccessor(entry, index) : getValueByDataKey(entry.payload, dataKey);
+    var idProps = isNullish(id) ? {} : {
+      id: "".concat(id, "-").concat(index)
+    };
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-".concat(index)
+    }, svgPropertiesAndEvents(entry), others, idProps, {
+      /*
+       * Prefer to use the explicit fill from LabelList props.
+       * Only in an absence of that, fall back to the fill of the entry.
+       * The entry fill can be quite difficult to see especially in Bar, Pie, RadialBar in inside positions.
+       * On the other hand it's quite convenient in Scatter, Line, or when the position is outside the Bar, Pie filled shapes.
+       */
+      fill: (_restProps$fill = restProps.fill) !== null && _restProps$fill !== void 0 ? _restProps$fill : entry.fill,
+      parentViewBox: entry.parentViewBox,
+      value: value,
+      textBreakAll: textBreakAll,
+      viewBox: entry.viewBox,
+      index: index
+      /*
+       * Here we don't want to use the default Label zIndex,
+       * we want it to inherit the zIndex of the LabelList itself
+       * which means just rendering as a regular child, without portaling anywhere.
+       */,
+      zIndex: 0
+    }));
+  })));
+}
+LabelList.displayName = 'LabelList';
+export function LabelListFromLabelProp(_ref2) {
+  var {
+    label
+  } = _ref2;
+  if (!label) {
+    return null;
+  }
+  if (label === true) {
+    return /*#__PURE__*/React.createElement(LabelList, {
+      key: "labelList-implicit"
+    });
+  }
+  if (/*#__PURE__*/React.isValidElement(label) || isLabelContentAFunction(label)) {
+    return /*#__PURE__*/React.createElement(LabelList, {
+      key: "labelList-implicit",
+      content: label
+    });
+  }
+  if (typeof label === 'object') {
+    return /*#__PURE__*/React.createElement(LabelList, _extends({
+      key: "labelList-implicit"
+    }, label, {
+      type: String(label.type)
+    }));
+  }
+  return null;
+}
Index: node_modules/recharts/es6/component/Legend.js
===================================================================
--- node_modules/recharts/es6/component/Legend.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/Legend.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,174 @@
+var _excluded = ["contextPayload"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { useEffect } from 'react';
+import { createPortal } from 'react-dom';
+import { useLegendPortal } from '../context/legendPortalContext';
+import { DefaultLegendContent } from './DefaultLegendContent';
+import { getUniqPayload } from '../util/payload/getUniqPayload';
+import { useLegendPayload } from '../context/legendPayloadContext';
+import { useElementOffset } from '../util/useElementOffset';
+import { useChartHeight, useChartWidth, useMargin } from '../context/chartLayoutContext';
+import { setLegendSettings, setLegendSize } from '../state/legendSlice';
+import { useAppDispatch } from '../state/hooks';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+function defaultUniqBy(entry) {
+  return entry.value;
+}
+function LegendContent(props) {
+  var {
+      contextPayload
+    } = props,
+    otherProps = _objectWithoutProperties(props, _excluded);
+  var finalPayload = getUniqPayload(contextPayload, props.payloadUniqBy, defaultUniqBy);
+  var contentProps = _objectSpread(_objectSpread({}, otherProps), {}, {
+    payload: finalPayload
+  });
+  if (/*#__PURE__*/React.isValidElement(props.content)) {
+    return /*#__PURE__*/React.cloneElement(props.content, contentProps);
+  }
+  if (typeof props.content === 'function') {
+    return /*#__PURE__*/React.createElement(props.content, contentProps);
+  }
+  return /*#__PURE__*/React.createElement(DefaultLegendContent, contentProps);
+}
+function getDefaultPosition(style, props, margin, chartWidth, chartHeight, box) {
+  var {
+    layout,
+    align,
+    verticalAlign
+  } = props;
+  var hPos, vPos;
+  if (!style || (style.left === undefined || style.left === null) && (style.right === undefined || style.right === null)) {
+    if (align === 'center' && layout === 'vertical') {
+      hPos = {
+        left: ((chartWidth || 0) - box.width) / 2
+      };
+    } else {
+      hPos = align === 'right' ? {
+        right: margin && margin.right || 0
+      } : {
+        left: margin && margin.left || 0
+      };
+    }
+  }
+  if (!style || (style.top === undefined || style.top === null) && (style.bottom === undefined || style.bottom === null)) {
+    if (verticalAlign === 'middle') {
+      vPos = {
+        top: ((chartHeight || 0) - box.height) / 2
+      };
+    } else {
+      vPos = verticalAlign === 'bottom' ? {
+        bottom: margin && margin.bottom || 0
+      } : {
+        top: margin && margin.top || 0
+      };
+    }
+  }
+  return _objectSpread(_objectSpread({}, hPos), vPos);
+}
+function LegendSettingsDispatcher(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setLegendSettings(props));
+  }, [dispatch, props]);
+  return null;
+}
+function LegendSizeDispatcher(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setLegendSize(props));
+    return () => {
+      dispatch(setLegendSize({
+        width: 0,
+        height: 0
+      }));
+    };
+  }, [dispatch, props]);
+  return null;
+}
+function getWidthOrHeight(layout, height, width, maxWidth) {
+  if (layout === 'vertical' && height != null) {
+    return {
+      height
+    };
+  }
+  if (layout === 'horizontal') {
+    return {
+      width: width || maxWidth
+    };
+  }
+  return null;
+}
+export var legendDefaultProps = {
+  align: 'center',
+  iconSize: 14,
+  inactiveColor: '#ccc',
+  itemSorter: 'value',
+  layout: 'horizontal',
+  verticalAlign: 'bottom'
+};
+
+/**
+ * @consumes CartesianChartContext
+ * @consumes PolarChartContext
+ */
+export function Legend(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, legendDefaultProps);
+  var contextPayload = useLegendPayload();
+  var legendPortalFromContext = useLegendPortal();
+  var margin = useMargin();
+  var {
+    width: widthFromProps,
+    height: heightFromProps,
+    wrapperStyle,
+    portal: portalFromProps
+  } = props;
+  // The contextPayload is not used directly inside the hook, but we need the onBBoxUpdate call
+  // when the payload changes, therefore it's here as a dependency.
+  var [lastBoundingBox, updateBoundingBox] = useElementOffset([contextPayload]);
+  var chartWidth = useChartWidth();
+  var chartHeight = useChartHeight();
+  if (chartWidth == null || chartHeight == null) {
+    return null;
+  }
+  var maxWidth = chartWidth - ((margin === null || margin === void 0 ? void 0 : margin.left) || 0) - ((margin === null || margin === void 0 ? void 0 : margin.right) || 0);
+  var widthOrHeight = getWidthOrHeight(props.layout, heightFromProps, widthFromProps, maxWidth);
+  // if the user supplies their own portal, only use their defined wrapper styles
+  var outerStyle = portalFromProps ? wrapperStyle : _objectSpread(_objectSpread({
+    position: 'absolute',
+    width: (widthOrHeight === null || widthOrHeight === void 0 ? void 0 : widthOrHeight.width) || widthFromProps || 'auto',
+    height: (widthOrHeight === null || widthOrHeight === void 0 ? void 0 : widthOrHeight.height) || heightFromProps || 'auto'
+  }, getDefaultPosition(wrapperStyle, props, margin, chartWidth, chartHeight, lastBoundingBox)), wrapperStyle);
+  var legendPortal = portalFromProps !== null && portalFromProps !== void 0 ? portalFromProps : legendPortalFromContext;
+  if (legendPortal == null || contextPayload == null) {
+    return null;
+  }
+  var legendElement = /*#__PURE__*/React.createElement("div", {
+    className: "recharts-legend-wrapper",
+    style: outerStyle,
+    ref: updateBoundingBox
+  }, /*#__PURE__*/React.createElement(LegendSettingsDispatcher, {
+    layout: props.layout,
+    align: props.align,
+    verticalAlign: props.verticalAlign,
+    itemSorter: props.itemSorter
+  }), !portalFromProps && /*#__PURE__*/React.createElement(LegendSizeDispatcher, {
+    width: lastBoundingBox.width,
+    height: lastBoundingBox.height
+  }), /*#__PURE__*/React.createElement(LegendContent, _extends({}, props, widthOrHeight, {
+    margin: margin,
+    chartWidth: chartWidth,
+    chartHeight: chartHeight,
+    contextPayload: contextPayload
+  })));
+  return /*#__PURE__*/createPortal(legendElement, legendPortal);
+}
+Legend.displayName = 'Legend';
Index: node_modules/recharts/es6/component/ResponsiveContainer.js
===================================================================
--- node_modules/recharts/es6/component/ResponsiveContainer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/ResponsiveContainer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,224 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { clsx } from 'clsx';
+import * as React from 'react';
+import { createContext, forwardRef, useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
+import throttle from 'es-toolkit/compat/throttle';
+import { isNumber, noop } from '../util/DataUtils';
+import { warn } from '../util/LogUtils';
+import { calculateChartDimensions, defaultResponsiveContainerProps, getDefaultWidthAndHeight, getInnerDivStyle } from './responsiveContainerUtils';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+var ResponsiveContainerContext = /*#__PURE__*/createContext(defaultResponsiveContainerProps.initialDimension);
+function isAcceptableSize(size) {
+  return isPositiveNumber(size.width) && isPositiveNumber(size.height);
+}
+function ResponsiveContainerContextProvider(_ref) {
+  var {
+    children,
+    width,
+    height
+  } = _ref;
+  var size = useMemo(() => ({
+    width,
+    height
+  }), [width, height]);
+  if (!isAcceptableSize(size)) {
+    /*
+     * Don't render the container if width or height is non-positive because
+     * in that case the chart will not be rendered properly anyway.
+     * We will instead wait for the next resize event to provide the correct dimensions.
+     */
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(ResponsiveContainerContext.Provider, {
+    value: size
+  }, children);
+}
+export var useResponsiveContainerContext = () => useContext(ResponsiveContainerContext);
+var SizeDetectorContainer = /*#__PURE__*/forwardRef((_ref2, ref) => {
+  var {
+    aspect,
+    initialDimension = defaultResponsiveContainerProps.initialDimension,
+    width,
+    height,
+    /*
+     * default min-width to 0 if not specified - 'auto' causes issues with flexbox
+     * https://github.com/recharts/recharts/issues/172
+     */
+    minWidth = defaultResponsiveContainerProps.minWidth,
+    minHeight,
+    maxHeight,
+    children,
+    debounce = defaultResponsiveContainerProps.debounce,
+    id,
+    className,
+    onResize,
+    style = {}
+  } = _ref2;
+  var containerRef = useRef(null);
+  /*
+   * We are using a ref to avoid re-creating the ResizeObserver when the onResize function changes.
+   * The ref is updated on every render, so the latest onResize function is always available in the effect.
+   */
+  var onResizeRef = useRef();
+  onResizeRef.current = onResize;
+  useImperativeHandle(ref, () => containerRef.current);
+  var [sizes, setSizes] = useState({
+    containerWidth: initialDimension.width,
+    containerHeight: initialDimension.height
+  });
+  var setContainerSize = useCallback((newWidth, newHeight) => {
+    setSizes(prevState => {
+      var roundedWidth = Math.round(newWidth);
+      var roundedHeight = Math.round(newHeight);
+      if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {
+        return prevState;
+      }
+      return {
+        containerWidth: roundedWidth,
+        containerHeight: roundedHeight
+      };
+    });
+  }, []);
+  useEffect(() => {
+    if (containerRef.current == null || typeof ResizeObserver === 'undefined') {
+      return noop;
+    }
+    var callback = entries => {
+      var _onResizeRef$current;
+      var entry = entries[0];
+      if (entry == null) {
+        return;
+      }
+      var {
+        width: containerWidth,
+        height: containerHeight
+      } = entry.contentRect;
+      setContainerSize(containerWidth, containerHeight);
+      (_onResizeRef$current = onResizeRef.current) === null || _onResizeRef$current === void 0 || _onResizeRef$current.call(onResizeRef, containerWidth, containerHeight);
+    };
+    if (debounce > 0) {
+      callback = throttle(callback, debounce, {
+        trailing: true,
+        leading: false
+      });
+    }
+    var observer = new ResizeObserver(callback);
+    var {
+      width: containerWidth,
+      height: containerHeight
+    } = containerRef.current.getBoundingClientRect();
+    setContainerSize(containerWidth, containerHeight);
+    observer.observe(containerRef.current);
+    return () => {
+      observer.disconnect();
+    };
+  }, [setContainerSize, debounce]);
+  var {
+    containerWidth,
+    containerHeight
+  } = sizes;
+  warn(!aspect || aspect > 0, 'The aspect(%s) must be greater than zero.', aspect);
+  var {
+    calculatedWidth,
+    calculatedHeight
+  } = calculateChartDimensions(containerWidth, containerHeight, {
+    width,
+    height,
+    aspect,
+    maxHeight
+  });
+  warn(calculatedWidth != null && calculatedWidth > 0 || calculatedHeight != null && calculatedHeight > 0, "The width(%s) and height(%s) of chart should be greater than 0,\n       please check the style of container, or the props width(%s) and height(%s),\n       or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\n       height and width.", calculatedWidth, calculatedHeight, width, height, minWidth, minHeight, aspect);
+  return /*#__PURE__*/React.createElement("div", {
+    id: id ? "".concat(id) : undefined,
+    className: clsx('recharts-responsive-container', className),
+    style: _objectSpread(_objectSpread({}, style), {}, {
+      width,
+      height,
+      minWidth,
+      minHeight,
+      maxHeight
+    }),
+    ref: containerRef
+  }, /*#__PURE__*/React.createElement("div", {
+    style: getInnerDivStyle({
+      width,
+      height
+    })
+  }, /*#__PURE__*/React.createElement(ResponsiveContainerContextProvider, {
+    width: calculatedWidth,
+    height: calculatedHeight
+  }, children)));
+});
+
+/**
+ * The `ResponsiveContainer` component is a container that adjusts its width and height based on the size of its parent element.
+ * It is used to create responsive charts that adapt to different screen sizes.
+ *
+ * This component uses the {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver ResizeObserver} API to monitor changes to the size of its parent element.
+ * If you need to support older browsers that do not support this API, you may need to include a polyfill.
+ *
+ * @see {@link https://recharts.github.io/en-US/guide/sizes/ Chart size guide}
+ *
+ * @provides ResponsiveContainerContext
+ */
+export var ResponsiveContainer = /*#__PURE__*/forwardRef((props, ref) => {
+  var responsiveContainerContext = useResponsiveContainerContext();
+  if (isPositiveNumber(responsiveContainerContext.width) && isPositiveNumber(responsiveContainerContext.height)) {
+    /*
+     * If we detect that we are already inside another ResponsiveContainer,
+     * we do not attempt to add another layer of responsiveness.
+     */
+    return props.children;
+  }
+  var {
+    width,
+    height
+  } = getDefaultWidthAndHeight({
+    width: props.width,
+    height: props.height,
+    aspect: props.aspect
+  });
+
+  /*
+   * Let's try to get the calculated dimensions without having the div container set up.
+   * Sometimes this does produce fixed, positive dimensions. If so, we can skip rendering the div and monitoring its size.
+   */
+  var {
+    calculatedWidth,
+    calculatedHeight
+  } = calculateChartDimensions(undefined, undefined, {
+    width,
+    height,
+    aspect: props.aspect,
+    maxHeight: props.maxHeight
+  });
+  if (isNumber(calculatedWidth) && isNumber(calculatedHeight)) {
+    /*
+     * If it just so happens that the combination of width, height, and aspect ratio
+     * results in fixed dimensions, then we don't need to monitor the container's size.
+     * We can just provide these fixed dimensions to the context.
+     *
+     * Note that here we are not checking for positive numbers;
+     * if the user provides a zero or negative width/height, we will just pass that along
+     * as whatever size we detect won't be helping anyway.
+     */
+    return /*#__PURE__*/React.createElement(ResponsiveContainerContextProvider, {
+      width: calculatedWidth,
+      height: calculatedHeight
+    }, props.children);
+  }
+  /*
+   * Static analysis did not produce fixed dimensions,
+   * so we need to render a special div and monitor its size.
+   */
+  return /*#__PURE__*/React.createElement(SizeDetectorContainer, _extends({}, props, {
+    width: width,
+    height: height,
+    ref: ref
+  }));
+});
Index: node_modules/recharts/es6/component/Text.js
===================================================================
--- node_modules/recharts/es6/component/Text.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/Text.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,285 @@
+var _excluded = ["x", "y", "lineHeight", "capHeight", "fill", "scaleToFit", "textAnchor", "verticalAnchor"],
+  _excluded2 = ["dx", "dy", "angle", "className", "breakAll"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { useMemo, forwardRef } from 'react';
+import { clsx } from 'clsx';
+import { isNullish, isNumber, isNumOrStr } from '../util/DataUtils';
+import { Global } from '../util/Global';
+import { getStringSize } from '../util/DOMUtils';
+import { reduceCSSCalc } from '../util/ReduceCSSCalc';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
+var BREAKING_SPACES = /[ \f\n\r\t\v\u2028\u2029]+/;
+var calculateWordWidths = _ref => {
+  var {
+    children,
+    breakAll,
+    style
+  } = _ref;
+  try {
+    var words = [];
+    if (!isNullish(children)) {
+      if (breakAll) {
+        words = children.toString().split('');
+      } else {
+        words = children.toString().split(BREAKING_SPACES);
+      }
+    }
+    var wordsWithComputedWidth = words.map(word => ({
+      word,
+      width: getStringSize(word, style).width
+    }));
+    var spaceWidth = breakAll ? 0 : getStringSize('\u00A0', style).width;
+    return {
+      wordsWithComputedWidth,
+      spaceWidth
+    };
+  } catch (_unused) {
+    return null;
+  }
+};
+
+/**
+ * @inline
+ */
+
+export function isValidTextAnchor(value) {
+  return value === 'start' || value === 'middle' || value === 'end' || value === 'inherit';
+}
+
+/**
+ * @inline
+ */
+
+/**
+ * @inline
+ */
+
+var calculate = (words, lineWidth, spaceWidth, scaleToFit) => words.reduce((result, _ref2) => {
+  var {
+    word,
+    width
+  } = _ref2;
+  var currentLine = result[result.length - 1];
+  if (currentLine && width != null && (lineWidth == null || scaleToFit || currentLine.width + width + spaceWidth < Number(lineWidth))) {
+    // Word can be added to an existing line
+    currentLine.words.push(word);
+    currentLine.width += width + spaceWidth;
+  } else {
+    // Add first word to line or word is too long to scaleToFit on existing line
+    var newLine = {
+      words: [word],
+      width
+    };
+    result.push(newLine);
+  }
+  return result;
+}, []);
+var findLongestLine = words => words.reduce((a, b) => a.width > b.width ? a : b);
+var suffix = '…';
+var checkOverflow = (text, index, breakAll, style, maxLines, lineWidth, spaceWidth, scaleToFit) => {
+  var tempText = text.slice(0, index);
+  var words = calculateWordWidths({
+    breakAll,
+    style,
+    children: tempText + suffix
+  });
+  if (!words) {
+    return [false, []];
+  }
+  var result = calculate(words.wordsWithComputedWidth, lineWidth, spaceWidth, scaleToFit);
+  var doesOverflow = result.length > maxLines || findLongestLine(result).width > Number(lineWidth);
+  return [doesOverflow, result];
+};
+var calculateWordsByLines = (_ref3, initialWordsWithComputedWith, spaceWidth, lineWidth, scaleToFit) => {
+  var {
+    maxLines,
+    children,
+    style,
+    breakAll
+  } = _ref3;
+  var shouldLimitLines = isNumber(maxLines);
+  var text = String(children);
+  var originalResult = calculate(initialWordsWithComputedWith, lineWidth, spaceWidth, scaleToFit);
+  if (!shouldLimitLines || scaleToFit) {
+    return originalResult;
+  }
+  var overflows = originalResult.length > maxLines || findLongestLine(originalResult).width > Number(lineWidth);
+  if (!overflows) {
+    return originalResult;
+  }
+  var start = 0;
+  var end = text.length - 1;
+  var iterations = 0;
+  var trimmedResult;
+  while (start <= end && iterations <= text.length - 1) {
+    var middle = Math.floor((start + end) / 2);
+    var prev = middle - 1;
+    var [doesPrevOverflow, result] = checkOverflow(text, prev, breakAll, style, maxLines, lineWidth, spaceWidth, scaleToFit);
+    var [doesMiddleOverflow] = checkOverflow(text, middle, breakAll, style, maxLines, lineWidth, spaceWidth, scaleToFit);
+    if (!doesPrevOverflow && !doesMiddleOverflow) {
+      start = middle + 1;
+    }
+    if (doesPrevOverflow && doesMiddleOverflow) {
+      end = middle - 1;
+    }
+    if (!doesPrevOverflow && doesMiddleOverflow) {
+      trimmedResult = result;
+      break;
+    }
+    iterations++;
+  }
+
+  // Fallback to originalResult (result without trimming) if we cannot find the
+  // where to trim.  This should not happen :tm:
+  return trimmedResult || originalResult;
+};
+var getWordsWithoutCalculate = children => {
+  var words = !isNullish(children) ? children.toString().split(BREAKING_SPACES) : [];
+  return [{
+    words,
+    width: undefined
+  }];
+};
+export var getWordsByLines = _ref4 => {
+  var {
+    width,
+    scaleToFit,
+    children,
+    style,
+    breakAll,
+    maxLines
+  } = _ref4;
+  // Only perform calculations if using features that require them (multiline, scaleToFit)
+  if ((width || scaleToFit) && !Global.isSsr) {
+    var wordsWithComputedWidth, spaceWidth;
+    var wordWidths = calculateWordWidths({
+      breakAll,
+      children,
+      style
+    });
+    if (wordWidths) {
+      var {
+        wordsWithComputedWidth: wcw,
+        spaceWidth: sw
+      } = wordWidths;
+      wordsWithComputedWidth = wcw;
+      spaceWidth = sw;
+    } else {
+      return getWordsWithoutCalculate(children);
+    }
+    return calculateWordsByLines({
+      breakAll,
+      children,
+      maxLines,
+      style
+    }, wordsWithComputedWidth, spaceWidth, width, Boolean(scaleToFit));
+  }
+  return getWordsWithoutCalculate(children);
+};
+var DEFAULT_FILL = '#808080';
+export var textDefaultProps = {
+  angle: 0,
+  breakAll: false,
+  // Magic number from d3
+  capHeight: '0.71em',
+  fill: DEFAULT_FILL,
+  lineHeight: '1em',
+  scaleToFit: false,
+  textAnchor: 'start',
+  // Maintain compat with existing charts / default SVG behavior
+  verticalAnchor: 'end',
+  x: 0,
+  y: 0
+};
+export var Text = /*#__PURE__*/forwardRef((outsideProps, ref) => {
+  var _resolveDefaultProps = resolveDefaultProps(outsideProps, textDefaultProps),
+    {
+      x: propsX,
+      y: propsY,
+      lineHeight,
+      capHeight,
+      fill,
+      scaleToFit,
+      textAnchor,
+      verticalAnchor
+    } = _resolveDefaultProps,
+    props = _objectWithoutProperties(_resolveDefaultProps, _excluded);
+  var wordsByLines = useMemo(() => {
+    return getWordsByLines({
+      breakAll: props.breakAll,
+      children: props.children,
+      maxLines: props.maxLines,
+      scaleToFit,
+      style: props.style,
+      width: props.width
+    });
+  }, [props.breakAll, props.children, props.maxLines, scaleToFit, props.style, props.width]);
+  var {
+      dx,
+      dy,
+      angle,
+      className,
+      breakAll
+    } = props,
+    textProps = _objectWithoutProperties(props, _excluded2);
+  if (!isNumOrStr(propsX) || !isNumOrStr(propsY) || wordsByLines.length === 0) {
+    return null;
+  }
+  var x = Number(propsX) + (isNumber(dx) ? dx : 0);
+  var y = Number(propsY) + (isNumber(dy) ? dy : 0);
+  if (!isWellBehavedNumber(x) || !isWellBehavedNumber(y)) {
+    return null;
+  }
+  var startDy;
+  switch (verticalAnchor) {
+    case 'start':
+      startDy = reduceCSSCalc("calc(".concat(capHeight, ")"));
+      break;
+    case 'middle':
+      startDy = reduceCSSCalc("calc(".concat((wordsByLines.length - 1) / 2, " * -").concat(lineHeight, " + (").concat(capHeight, " / 2))"));
+      break;
+    default:
+      startDy = reduceCSSCalc("calc(".concat(wordsByLines.length - 1, " * -").concat(lineHeight, ")"));
+      break;
+  }
+  var transforms = [];
+  var firstLine = wordsByLines[0];
+  if (scaleToFit && firstLine != null) {
+    var lineWidth = firstLine.width;
+    var {
+      width
+    } = props;
+    transforms.push("scale(".concat(isNumber(width) && isNumber(lineWidth) ? width / lineWidth : 1, ")"));
+  }
+  if (angle) {
+    transforms.push("rotate(".concat(angle, ", ").concat(x, ", ").concat(y, ")"));
+  }
+  if (transforms.length) {
+    textProps.transform = transforms.join(' ');
+  }
+  return /*#__PURE__*/React.createElement("text", _extends({}, svgPropertiesAndEvents(textProps), {
+    ref: ref,
+    x: x,
+    y: y,
+    className: clsx('recharts-text', className),
+    textAnchor: textAnchor,
+    fill: fill.includes('url') ? DEFAULT_FILL : fill
+  }), wordsByLines.map((line, index) => {
+    var words = line.words.join(breakAll ? '' : ' ');
+    return (
+      /*#__PURE__*/
+      // duplicate words will cause duplicate keys which is why we add the array index here
+      React.createElement("tspan", {
+        x: x,
+        dy: index === 0 ? startDy : lineHeight,
+        key: "".concat(words, "-").concat(index)
+      }, words)
+    );
+  }));
+});
+Text.displayName = 'Text';
Index: node_modules/recharts/es6/component/Tooltip.js
===================================================================
--- node_modules/recharts/es6/component/Tooltip.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/Tooltip.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,177 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { useEffect } from 'react';
+import { createPortal } from 'react-dom';
+import { DefaultTooltipContent } from './DefaultTooltipContent';
+import { TooltipBoundingBox } from './TooltipBoundingBox';
+import { getUniqPayload } from '../util/payload/getUniqPayload';
+import { useViewBox } from '../context/chartLayoutContext';
+import { useAccessibilityLayer } from '../context/accessibilityContext';
+import { useElementOffset } from '../util/useElementOffset';
+import { Cursor } from './Cursor';
+import { selectActiveCoordinate, selectActiveLabel, selectIsTooltipActive, selectTooltipPayload } from '../state/selectors/selectors';
+import { useTooltipPortal } from '../context/tooltipPortalContext';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { setTooltipSettingsState } from '../state/tooltipSlice';
+import { useTooltipChartSynchronisation } from '../synchronisation/useChartSynchronisation';
+import { useTooltipEventType } from '../state/selectors/selectTooltipEventType';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+function defaultUniqBy(entry) {
+  return entry.dataKey;
+}
+function renderContent(content, props) {
+  if (/*#__PURE__*/React.isValidElement(content)) {
+    return /*#__PURE__*/React.cloneElement(content, props);
+  }
+  if (typeof content === 'function') {
+    return /*#__PURE__*/React.createElement(content, props);
+  }
+  return /*#__PURE__*/React.createElement(DefaultTooltipContent, props);
+}
+var emptyPayload = [];
+export var defaultTooltipProps = {
+  allowEscapeViewBox: {
+    x: false,
+    y: false
+  },
+  animationDuration: 400,
+  animationEasing: 'ease',
+  axisId: 0,
+  contentStyle: {},
+  cursor: true,
+  filterNull: true,
+  includeHidden: false,
+  isAnimationActive: 'auto',
+  itemSorter: 'name',
+  itemStyle: {},
+  labelStyle: {},
+  offset: 10,
+  reverseDirection: {
+    x: false,
+    y: false
+  },
+  separator: ' : ',
+  trigger: 'hover',
+  useTranslate3d: false,
+  wrapperStyle: {}
+};
+
+/**
+ * The Tooltip component displays a floating box with data values when hovering over or clicking on chart elements.
+ *
+ * It can be configured to show information for individual data points or for all points at a specific axis coordinate.
+ * The appearance and content of the tooltip can be customized via props.
+ *
+ * @see {@link https://github.com/recharts/recharts/wiki/Tooltip-event-type-and-shared-prop Tooltip event type and shared prop wiki page}
+ * @see {@link https://recharts.github.io/en-US/guide/activeIndex/ Active index replacement when migrating from Recharts v2 to v3}
+ *
+ * @consumes CartesianChartContext
+ * @consumes PolarChartContext
+ * @consumes TooltipEntrySettings
+ */
+export function Tooltip(outsideProps) {
+  var _useAppSelector, _ref;
+  var props = resolveDefaultProps(outsideProps, defaultTooltipProps);
+  var {
+    active: activeFromProps,
+    allowEscapeViewBox,
+    animationDuration,
+    animationEasing,
+    content,
+    filterNull,
+    isAnimationActive,
+    offset,
+    payloadUniqBy,
+    position,
+    reverseDirection,
+    useTranslate3d,
+    wrapperStyle,
+    cursor,
+    shared,
+    trigger,
+    defaultIndex,
+    portal: portalFromProps,
+    axisId
+  } = props;
+  var dispatch = useAppDispatch();
+  var defaultIndexAsString = typeof defaultIndex === 'number' ? String(defaultIndex) : defaultIndex;
+  useEffect(() => {
+    dispatch(setTooltipSettingsState({
+      shared,
+      trigger,
+      axisId,
+      active: activeFromProps,
+      defaultIndex: defaultIndexAsString
+    }));
+  }, [dispatch, shared, trigger, axisId, activeFromProps, defaultIndexAsString]);
+  var viewBox = useViewBox();
+  var accessibilityLayer = useAccessibilityLayer();
+  var tooltipEventType = useTooltipEventType(shared);
+  var {
+    activeIndex,
+    isActive
+  } = (_useAppSelector = useAppSelector(state => selectIsTooltipActive(state, tooltipEventType, trigger, defaultIndexAsString))) !== null && _useAppSelector !== void 0 ? _useAppSelector : {};
+  var payloadFromRedux = useAppSelector(state => selectTooltipPayload(state, tooltipEventType, trigger, defaultIndexAsString));
+  var labelFromRedux = useAppSelector(state => selectActiveLabel(state, tooltipEventType, trigger, defaultIndexAsString));
+  var coordinate = useAppSelector(state => selectActiveCoordinate(state, tooltipEventType, trigger, defaultIndexAsString));
+  var payload = payloadFromRedux;
+  var tooltipPortalFromContext = useTooltipPortal();
+  /*
+   * The user can set `active=true` on the Tooltip in which case the Tooltip will stay always active,
+   * or `active=false` in which case the Tooltip never shows.
+   *
+   * If the `active` prop is not defined then it will show and hide based on mouse or keyboard activity.
+   */
+  var finalIsActive = (_ref = activeFromProps !== null && activeFromProps !== void 0 ? activeFromProps : isActive) !== null && _ref !== void 0 ? _ref : false;
+  var [lastBoundingBox, updateBoundingBox] = useElementOffset([payload, finalIsActive]);
+  var finalLabel = tooltipEventType === 'axis' ? labelFromRedux : undefined;
+  useTooltipChartSynchronisation(tooltipEventType, trigger, coordinate, finalLabel, activeIndex, finalIsActive);
+  var tooltipPortal = portalFromProps !== null && portalFromProps !== void 0 ? portalFromProps : tooltipPortalFromContext;
+  if (tooltipPortal == null || viewBox == null || tooltipEventType == null) {
+    return null;
+  }
+  var finalPayload = payload !== null && payload !== void 0 ? payload : emptyPayload;
+  if (!finalIsActive) {
+    finalPayload = emptyPayload;
+  }
+  if (filterNull && finalPayload.length) {
+    finalPayload = getUniqPayload(finalPayload.filter(entry => entry.value != null && (entry.hide !== true || props.includeHidden)), payloadUniqBy, defaultUniqBy);
+  }
+  var hasPayload = finalPayload.length > 0;
+  var tooltipElement = /*#__PURE__*/React.createElement(TooltipBoundingBox, {
+    allowEscapeViewBox: allowEscapeViewBox,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive,
+    active: finalIsActive,
+    coordinate: coordinate,
+    hasPayload: hasPayload,
+    offset: offset,
+    position: position,
+    reverseDirection: reverseDirection,
+    useTranslate3d: useTranslate3d,
+    viewBox: viewBox,
+    wrapperStyle: wrapperStyle,
+    lastBoundingBox: lastBoundingBox,
+    innerRef: updateBoundingBox,
+    hasPortalFromProps: Boolean(portalFromProps)
+  }, renderContent(content, _objectSpread(_objectSpread({}, props), {}, {
+    payload: finalPayload,
+    label: finalLabel,
+    active: finalIsActive,
+    activeIndex,
+    coordinate,
+    accessibilityLayer
+  })));
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/createPortal(tooltipElement, tooltipPortal), finalIsActive && /*#__PURE__*/React.createElement(Cursor, {
+    cursor: cursor,
+    tooltipEventType: tooltipEventType,
+    coordinate: coordinate,
+    payload: finalPayload,
+    index: activeIndex
+  }));
+}
Index: node_modules/recharts/es6/component/TooltipBoundingBox.js
===================================================================
--- node_modules/recharts/es6/component/TooltipBoundingBox.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/TooltipBoundingBox.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,113 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { PureComponent } from 'react';
+import { getTooltipTranslate } from '../util/tooltip/translate';
+export class TooltipBoundingBox extends PureComponent {
+  constructor() {
+    super(...arguments);
+    _defineProperty(this, "state", {
+      dismissed: false,
+      dismissedAtCoordinate: {
+        x: 0,
+        y: 0
+      }
+    });
+    _defineProperty(this, "handleKeyDown", event => {
+      if (event.key === 'Escape') {
+        var _this$props$coordinat, _this$props$coordinat2, _this$props$coordinat3, _this$props$coordinat4;
+        this.setState({
+          dismissed: true,
+          dismissedAtCoordinate: {
+            x: (_this$props$coordinat = (_this$props$coordinat2 = this.props.coordinate) === null || _this$props$coordinat2 === void 0 ? void 0 : _this$props$coordinat2.x) !== null && _this$props$coordinat !== void 0 ? _this$props$coordinat : 0,
+            y: (_this$props$coordinat3 = (_this$props$coordinat4 = this.props.coordinate) === null || _this$props$coordinat4 === void 0 ? void 0 : _this$props$coordinat4.y) !== null && _this$props$coordinat3 !== void 0 ? _this$props$coordinat3 : 0
+          }
+        });
+      }
+    });
+  }
+  componentDidMount() {
+    document.addEventListener('keydown', this.handleKeyDown);
+  }
+  componentWillUnmount() {
+    document.removeEventListener('keydown', this.handleKeyDown);
+  }
+  componentDidUpdate() {
+    var _this$props$coordinat5, _this$props$coordinat6;
+    if (!this.state.dismissed) {
+      return;
+    }
+    if (((_this$props$coordinat5 = this.props.coordinate) === null || _this$props$coordinat5 === void 0 ? void 0 : _this$props$coordinat5.x) !== this.state.dismissedAtCoordinate.x || ((_this$props$coordinat6 = this.props.coordinate) === null || _this$props$coordinat6 === void 0 ? void 0 : _this$props$coordinat6.y) !== this.state.dismissedAtCoordinate.y) {
+      this.state.dismissed = false;
+    }
+  }
+  render() {
+    var {
+      active,
+      allowEscapeViewBox,
+      animationDuration,
+      animationEasing,
+      children,
+      coordinate,
+      hasPayload,
+      isAnimationActive,
+      offset,
+      position,
+      reverseDirection,
+      useTranslate3d,
+      viewBox,
+      wrapperStyle,
+      lastBoundingBox,
+      innerRef,
+      hasPortalFromProps
+    } = this.props;
+    var offsetLeft = typeof offset === 'number' ? offset : offset.x;
+    var offsetTop = typeof offset === 'number' ? offset : offset.y;
+    var {
+      cssClasses,
+      cssProperties
+    } = getTooltipTranslate({
+      allowEscapeViewBox,
+      coordinate,
+      offsetLeft,
+      offsetTop,
+      position,
+      reverseDirection,
+      tooltipBox: {
+        height: lastBoundingBox.height,
+        width: lastBoundingBox.width
+      },
+      useTranslate3d,
+      viewBox
+    });
+
+    // do not use absolute styles if the user has passed a custom portal prop
+    var positionStyles = hasPortalFromProps ? {} : _objectSpread(_objectSpread({
+      transition: isAnimationActive && active ? "transform ".concat(animationDuration, "ms ").concat(animationEasing) : undefined
+    }, cssProperties), {}, {
+      pointerEvents: 'none',
+      visibility: !this.state.dismissed && active && hasPayload ? 'visible' : 'hidden',
+      position: 'absolute',
+      top: 0,
+      left: 0
+    });
+    var outerStyle = _objectSpread(_objectSpread({}, positionStyles), {}, {
+      visibility: !this.state.dismissed && active && hasPayload ? 'visible' : 'hidden'
+    }, wrapperStyle);
+    return (
+      /*#__PURE__*/
+      // This element allow listening to the `Escape` key. See https://github.com/recharts/recharts/pull/2925
+      React.createElement("div", {
+        // @ts-expect-error typescript library does not recognize xmlns attribute, but it's required for an HTML chunk inside SVG.
+        xmlns: "http://www.w3.org/1999/xhtml",
+        tabIndex: -1,
+        className: cssClasses,
+        style: outerStyle,
+        ref: innerRef
+      }, children)
+    );
+  }
+}
Index: node_modules/recharts/es6/component/responsiveContainerUtils.js
===================================================================
--- node_modules/recharts/es6/component/responsiveContainerUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/component/responsiveContainerUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,113 @@
+import { isPercent } from '../util/DataUtils';
+export var defaultResponsiveContainerProps = {
+  width: '100%',
+  height: '100%',
+  debounce: 0,
+  minWidth: 0,
+  initialDimension: {
+    width: -1,
+    height: -1
+  }
+};
+export var calculateChartDimensions = (containerWidth, containerHeight, props) => {
+  var {
+    width = defaultResponsiveContainerProps.width,
+    height = defaultResponsiveContainerProps.height,
+    aspect,
+    maxHeight
+  } = props;
+
+  /*
+   * The containerWidth and containerHeight are already percentage based because it's set as that percentage in CSS.
+   * Means we don't have to calculate percentages here.
+   */
+  var calculatedWidth = isPercent(width) ? containerWidth : Number(width);
+  var calculatedHeight = isPercent(height) ? containerHeight : Number(height);
+  if (aspect && aspect > 0) {
+    // Preserve the desired aspect ratio
+    if (calculatedWidth) {
+      // Will default to using width for aspect ratio
+      calculatedHeight = calculatedWidth / aspect;
+    } else if (calculatedHeight) {
+      // But we should also take height into consideration
+      calculatedWidth = calculatedHeight * aspect;
+    }
+
+    // if maxHeight is set, overwrite if calculatedHeight is greater than maxHeight
+    if (maxHeight && calculatedHeight != null && calculatedHeight > maxHeight) {
+      calculatedHeight = maxHeight;
+    }
+  }
+  return {
+    calculatedWidth,
+    calculatedHeight
+  };
+};
+var bothOverflow = {
+  width: 0,
+  height: 0,
+  overflow: 'visible'
+};
+var overflowX = {
+  width: 0,
+  overflowX: 'visible'
+};
+var overflowY = {
+  height: 0,
+  overflowY: 'visible'
+};
+var noStyle = {};
+
+/**
+ * This zero-size, overflow-visible is required to allow the chart to shrink.
+ * Without it, the chart itself will fill the ResponsiveContainer, and while it allows the chart to grow,
+ * it would always keep the container at the size of the chart,
+ * and ResizeObserver would never fire.
+ * With this zero-size element, the chart itself never actually fills the container,
+ * it just so happens that it is visible because it overflows.
+ * I learned this trick from the `react-virtualized` library: https://github.com/bvaughn/react-virtualized-auto-sizer/blob/master/src/AutoSizer.ts
+ * See https://github.com/recharts/recharts/issues/172 and also https://github.com/bvaughn/react-virtualized/issues/68
+ *
+ * Also, we don't need to apply the zero-size style if the dimension is a fixed number (or undefined),
+ * because in that case the chart can't shrink in that dimension anyway.
+ * This fixes defining the dimensions using aspect ratio: https://github.com/recharts/recharts/issues/6245
+ */
+export var getInnerDivStyle = props => {
+  var {
+    width,
+    height
+  } = props;
+  var isWidthPercent = isPercent(width);
+  var isHeightPercent = isPercent(height);
+  if (isWidthPercent && isHeightPercent) {
+    return bothOverflow;
+  }
+  if (isWidthPercent) {
+    return overflowX;
+  }
+  if (isHeightPercent) {
+    return overflowY;
+  }
+  return noStyle;
+};
+export function getDefaultWidthAndHeight(_ref) {
+  var {
+    width,
+    height,
+    aspect
+  } = _ref;
+  var calculatedWidth = width;
+  var calculatedHeight = height;
+  if (calculatedWidth === undefined && calculatedHeight === undefined) {
+    calculatedWidth = defaultResponsiveContainerProps.width;
+    calculatedHeight = defaultResponsiveContainerProps.height;
+  } else if (calculatedWidth === undefined) {
+    calculatedWidth = aspect && aspect > 0 ? undefined : defaultResponsiveContainerProps.width;
+  } else if (calculatedHeight === undefined) {
+    calculatedHeight = aspect && aspect > 0 ? undefined : defaultResponsiveContainerProps.height;
+  }
+  return {
+    width: calculatedWidth,
+    height: calculatedHeight
+  };
+}
Index: node_modules/recharts/es6/container/ClipPathProvider.js
===================================================================
--- node_modules/recharts/es6/container/ClipPathProvider.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/container/ClipPathProvider.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,45 @@
+import * as React from 'react';
+import { createContext, useContext, useState } from 'react';
+import { uniqueId } from '../util/DataUtils';
+import { usePlotArea } from '../hooks';
+var ClipPathIdContext = /*#__PURE__*/createContext(undefined);
+
+/**
+ * Generates a unique clip path ID for use in SVG elements,
+ * and puts it in a context provider.
+ *
+ * To read the clip path ID, use the `useClipPathId` hook,
+ * or render `<ClipPath>` component which will automatically use the ID from this context.
+ *
+ * @param props children - React children to be wrapped by the provider
+ * @returns React Context Provider
+ */
+export var ClipPathProvider = _ref => {
+  var {
+    children
+  } = _ref;
+  var [clipPathId] = useState("".concat(uniqueId('recharts'), "-clip"));
+  var plotArea = usePlotArea();
+  if (plotArea == null) {
+    return null;
+  }
+  var {
+    x,
+    y,
+    width,
+    height
+  } = plotArea;
+  return /*#__PURE__*/React.createElement(ClipPathIdContext.Provider, {
+    value: clipPathId
+  }, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("clipPath", {
+    id: clipPathId
+  }, /*#__PURE__*/React.createElement("rect", {
+    x: x,
+    y: y,
+    height: height,
+    width: width
+  }))), children);
+};
+export var useClipPathId = () => {
+  return useContext(ClipPathIdContext);
+};
Index: node_modules/recharts/es6/container/Layer.js
===================================================================
--- node_modules/recharts/es6/container/Layer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/container/Layer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,28 @@
+var _excluded = ["children", "className"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+/**
+ * Creates an SVG group element to group other SVG elements.
+ *
+ * Useful if you want to apply transformations or styles to a set of elements
+ * without affecting other elements in the SVG.
+ *
+ * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/g
+ */
+export var Layer = /*#__PURE__*/React.forwardRef((props, ref) => {
+  var {
+      children,
+      className
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var layerClass = clsx('recharts-layer', className);
+  return /*#__PURE__*/React.createElement("g", _extends({
+    className: layerClass
+  }, svgPropertiesAndEvents(others), {
+    ref: ref
+  }), children);
+});
Index: node_modules/recharts/es6/container/RootSurface.js
===================================================================
--- node_modules/recharts/es6/container/RootSurface.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/container/RootSurface.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,103 @@
+var _excluded = ["children"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { useChartHeight, useChartWidth } from '../context/chartLayoutContext';
+import { useAccessibilityLayer } from '../context/accessibilityContext';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { Surface } from './Surface';
+import { useAppSelector } from '../state/hooks';
+import { selectBrushDimensions } from '../state/selectors/brushSelectors';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+import { AllZIndexPortals } from '../zIndex/ZIndexPortal';
+var FULL_WIDTH_AND_HEIGHT = {
+  width: '100%',
+  height: '100%',
+  /*
+   * display: block is necessary here because the default for an SVG is display: inline,
+   * which in some browsers (Chrome) adds a little bit of extra space above and below the SVG
+   * to make space for the descender of letters like "g" and "y". This throws off the height calculation
+   * and causes the container to grow indefinitely on each render with responsive=true.
+   * Display: block removes that extra space.
+   *
+   * Interestingly, Firefox does not have this problem, but it doesn't hurt to add the style anyway.
+   */
+  display: 'block'
+};
+var MainChartSurface = /*#__PURE__*/forwardRef((props, ref) => {
+  var width = useChartWidth();
+  var height = useChartHeight();
+  var hasAccessibilityLayer = useAccessibilityLayer();
+  if (!isPositiveNumber(width) || !isPositiveNumber(height)) {
+    return null;
+  }
+  var {
+    children,
+    otherAttributes,
+    title,
+    desc
+  } = props;
+  var tabIndex, role;
+  if (otherAttributes != null) {
+    if (typeof otherAttributes.tabIndex === 'number') {
+      tabIndex = otherAttributes.tabIndex;
+    } else {
+      tabIndex = hasAccessibilityLayer ? 0 : undefined;
+    }
+    if (typeof otherAttributes.role === 'string') {
+      role = otherAttributes.role;
+    } else {
+      role = hasAccessibilityLayer ? 'application' : undefined;
+    }
+  }
+  return /*#__PURE__*/React.createElement(Surface, _extends({}, otherAttributes, {
+    title: title,
+    desc: desc,
+    role: role,
+    tabIndex: tabIndex,
+    width: width,
+    height: height,
+    style: FULL_WIDTH_AND_HEIGHT,
+    ref: ref
+  }), children);
+});
+var BrushPanoramaSurface = _ref => {
+  var {
+    children
+  } = _ref;
+  var brushDimensions = useAppSelector(selectBrushDimensions);
+  if (!brushDimensions) {
+    return null;
+  }
+  var {
+    width,
+    height,
+    y,
+    x
+  } = brushDimensions;
+  return /*#__PURE__*/React.createElement(Surface, {
+    width: width,
+    height: height,
+    x: x,
+    y: y
+  }, children);
+};
+export var RootSurface = /*#__PURE__*/forwardRef((_ref2, ref) => {
+  var {
+      children
+    } = _ref2,
+    rest = _objectWithoutProperties(_ref2, _excluded);
+  var isPanorama = useIsPanorama();
+  if (isPanorama) {
+    return /*#__PURE__*/React.createElement(BrushPanoramaSurface, null, /*#__PURE__*/React.createElement(AllZIndexPortals, {
+      isPanorama: true
+    }, children));
+  }
+  return /*#__PURE__*/React.createElement(MainChartSurface, _extends({
+    ref: ref
+  }, rest), /*#__PURE__*/React.createElement(AllZIndexPortals, {
+    isPanorama: false
+  }, children));
+});
Index: node_modules/recharts/es6/container/Surface.js
===================================================================
--- node_modules/recharts/es6/container/Surface.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/container/Surface.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,43 @@
+var _excluded = ["children", "width", "height", "viewBox", "className", "style", "title", "desc"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { clsx } from 'clsx';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+/**
+ * Renders an SVG element.
+ *
+ * All charts already include a Surface component, so you would not normally use this directly.
+ *
+ * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg
+ */
+export var Surface = /*#__PURE__*/forwardRef((props, ref) => {
+  var {
+      children,
+      width,
+      height,
+      viewBox,
+      className,
+      style,
+      title,
+      desc
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var svgView = viewBox || {
+    width,
+    height,
+    x: 0,
+    y: 0
+  };
+  var layerClass = clsx('recharts-surface', className);
+  return /*#__PURE__*/React.createElement("svg", _extends({}, svgPropertiesAndEvents(others), {
+    className: layerClass,
+    width: width,
+    height: height,
+    style: style,
+    viewBox: "".concat(svgView.x, " ").concat(svgView.y, " ").concat(svgView.width, " ").concat(svgView.height),
+    ref: ref
+  }), /*#__PURE__*/React.createElement("title", null, title), /*#__PURE__*/React.createElement("desc", null, desc), children);
+});
Index: node_modules/recharts/es6/context/ErrorBarContext.js
===================================================================
--- node_modules/recharts/es6/context/ErrorBarContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/ErrorBarContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,66 @@
+var _excluded = ["children"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { createContext, useContext, useEffect, useRef } from 'react';
+import { addErrorBar, removeErrorBar, replaceErrorBar } from '../state/errorBarSlice';
+import { useAppDispatch } from '../state/hooks';
+import { useGraphicalItemId } from './RegisterGraphicalItemId';
+var initialContextState = {
+  data: [],
+  xAxisId: 'xAxis-0',
+  yAxisId: 'yAxis-0',
+  dataPointFormatter: () => ({
+    x: 0,
+    y: 0,
+    value: 0
+  }),
+  errorBarOffset: 0
+};
+var ErrorBarContext = /*#__PURE__*/createContext(initialContextState);
+export function SetErrorBarContext(props) {
+  var {
+      children
+    } = props,
+    rest = _objectWithoutProperties(props, _excluded);
+  return /*#__PURE__*/React.createElement(ErrorBarContext.Provider, {
+    value: rest
+  }, children);
+}
+export var useErrorBarContext = () => useContext(ErrorBarContext);
+export function ReportErrorBarSettings(props) {
+  var dispatch = useAppDispatch();
+  var graphicalItemId = useGraphicalItemId();
+  var prevPropsRef = useRef(null);
+  useEffect(() => {
+    if (graphicalItemId == null) {
+      // ErrorBar outside a graphical item context does not do anything.
+      return;
+    }
+    if (prevPropsRef.current === null) {
+      dispatch(addErrorBar({
+        itemId: graphicalItemId,
+        errorBar: props
+      }));
+    } else if (prevPropsRef.current !== props) {
+      dispatch(replaceErrorBar({
+        itemId: graphicalItemId,
+        prev: prevPropsRef.current,
+        next: props
+      }));
+    }
+    prevPropsRef.current = props;
+  }, [dispatch, graphicalItemId, props]);
+  useEffect(() => {
+    return () => {
+      if (prevPropsRef.current != null && graphicalItemId != null) {
+        dispatch(removeErrorBar({
+          itemId: graphicalItemId,
+          errorBar: prevPropsRef.current
+        }));
+        prevPropsRef.current = null;
+      }
+    };
+  }, [dispatch, graphicalItemId]);
+  return null;
+}
Index: node_modules/recharts/es6/context/PanoramaContext.js
===================================================================
--- node_modules/recharts/es6/context/PanoramaContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/PanoramaContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { createContext, useContext } from 'react';
+var PanoramaContext = /*#__PURE__*/createContext(null);
+export var useIsPanorama = () => useContext(PanoramaContext) != null;
+export var PanoramaContextProvider = _ref => {
+  var {
+    children
+  } = _ref;
+  return /*#__PURE__*/React.createElement(PanoramaContext.Provider, {
+    value: true
+  }, children);
+};
Index: node_modules/recharts/es6/context/RegisterGraphicalItemId.js
===================================================================
--- node_modules/recharts/es6/context/RegisterGraphicalItemId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/RegisterGraphicalItemId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,18 @@
+import * as React from 'react';
+import { createContext, useContext } from 'react';
+import { useUniqueId } from '../util/useUniqueId';
+var GraphicalItemIdContext = /*#__PURE__*/createContext(undefined);
+export var RegisterGraphicalItemId = _ref => {
+  var {
+    id,
+    type,
+    children
+  } = _ref;
+  var resolvedId = useUniqueId("recharts-".concat(type), id);
+  return /*#__PURE__*/React.createElement(GraphicalItemIdContext.Provider, {
+    value: resolvedId
+  }, children(resolvedId));
+};
+export function useGraphicalItemId() {
+  return useContext(GraphicalItemIdContext);
+}
Index: node_modules/recharts/es6/context/accessibilityContext.js
===================================================================
--- node_modules/recharts/es6/context/accessibilityContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/accessibilityContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,5 @@
+import { useAppSelector } from '../state/hooks';
+export var useAccessibilityLayer = () => {
+  var _useAppSelector;
+  return (_useAppSelector = useAppSelector(state => state.rootProps.accessibilityLayer)) !== null && _useAppSelector !== void 0 ? _useAppSelector : true;
+};
Index: node_modules/recharts/es6/context/brushUpdateContext.js
===================================================================
--- node_modules/recharts/es6/context/brushUpdateContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/brushUpdateContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,2 @@
+import { createContext } from 'react';
+export var BrushUpdateDispatchContext = /*#__PURE__*/createContext(() => {});
Index: node_modules/recharts/es6/context/chartDataContext.js
===================================================================
--- node_modules/recharts/es6/context/chartDataContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/chartDataContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,78 @@
+import { useEffect } from 'react';
+import { setChartData, setComputedData } from '../state/chartDataSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { useIsPanorama } from './PanoramaContext';
+export var ChartDataContextProvider = props => {
+  var {
+    chartData
+  } = props;
+  var dispatch = useAppDispatch();
+  var isPanorama = useIsPanorama();
+  useEffect(() => {
+    if (isPanorama) {
+      // Panorama mode reuses data from the main chart, so we must not overwrite it here.
+      return () => {
+        // there is nothing to clean up
+      };
+    }
+    dispatch(setChartData(chartData));
+    return () => {
+      dispatch(setChartData(undefined));
+    };
+  }, [chartData, dispatch, isPanorama]);
+  return null;
+};
+export var SetComputedData = props => {
+  var {
+    computedData
+  } = props;
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setComputedData(computedData));
+    return () => {
+      dispatch(setChartData(undefined));
+    };
+  }, [computedData, dispatch]);
+  return null;
+};
+var selectChartData = state => state.chartData.chartData;
+
+/**
+ * "data" is the data of the chart - it has no type because this part of recharts is very flexible.
+ * Basically it's an array of "something" and then there's the dataKey property in various places
+ * that's meant to pull other things away from the data.
+ *
+ * Some charts have `data` defined on the chart root, and they will return the array through this hook.
+ * For example: <ComposedChart data={data} />.
+ *
+ * Other charts, such as Pie, have data defined on individual graphical elements.
+ * These charts will return `undefined` through this hook, and you need to read the data from children.
+ * For example: <PieChart><Pie data={data} />
+ *
+ * Some charts also allow setting both - data on the parent, and data on the children at the same time!
+ * However, this particular selector will only return the ones defined on the parent.
+ *
+ * @deprecated use one of the other selectors instead - which one, depends on how do you identify the applicable graphical items.
+ *
+ * @return data array for some charts and undefined for other
+ */
+export var useChartData = () => useAppSelector(selectChartData);
+var selectDataIndex = state => {
+  var {
+    dataStartIndex,
+    dataEndIndex
+  } = state.chartData;
+  return {
+    startIndex: dataStartIndex,
+    endIndex: dataEndIndex
+  };
+};
+
+/**
+ * startIndex and endIndex are data boundaries, set through Brush.
+ *
+ * @return object with startIndex and endIndex
+ */
+export var useDataIndex = () => {
+  return useAppSelector(selectDataIndex);
+};
Index: node_modules/recharts/es6/context/chartLayoutContext.js
===================================================================
--- node_modules/recharts/es6/context/chartLayoutContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/chartLayoutContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,209 @@
+import { useEffect } from 'react';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { setChartSize, setMargin } from '../state/layoutSlice';
+import { selectChartOffsetInternal, selectChartViewBox } from '../state/selectors/selectChartOffsetInternal';
+import { selectChartHeight, selectChartWidth } from '../state/selectors/containerSelectors';
+import { useIsPanorama } from './PanoramaContext';
+import { selectBrushDimensions, selectBrushSettings } from '../state/selectors/brushSelectors';
+import { useResponsiveContainerContext } from '../component/ResponsiveContainer';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+export function cartesianViewBoxToTrapezoid(box) {
+  if (!box) {
+    return undefined;
+  }
+  return {
+    x: box.x,
+    y: box.y,
+    upperWidth: 'upperWidth' in box ? box.upperWidth : box.width,
+    lowerWidth: 'lowerWidth' in box ? box.lowerWidth : box.width,
+    width: box.width,
+    height: box.height
+  };
+}
+export var useViewBox = () => {
+  var _useAppSelector;
+  var panorama = useIsPanorama();
+  var rootViewBox = useAppSelector(selectChartViewBox);
+  var brushDimensions = useAppSelector(selectBrushDimensions);
+  var brushPadding = (_useAppSelector = useAppSelector(selectBrushSettings)) === null || _useAppSelector === void 0 ? void 0 : _useAppSelector.padding;
+  if (!panorama || !brushDimensions || !brushPadding) {
+    return rootViewBox;
+  }
+  return {
+    width: brushDimensions.width - brushPadding.left - brushPadding.right,
+    height: brushDimensions.height - brushPadding.top - brushPadding.bottom,
+    x: brushPadding.left,
+    y: brushPadding.top
+  };
+};
+var manyComponentsThrowErrorsIfOffsetIsUndefined = {
+  top: 0,
+  bottom: 0,
+  left: 0,
+  right: 0,
+  width: 0,
+  height: 0,
+  brushBottom: 0
+};
+/**
+ * For internal use only. If you want this information, `import { useOffset } from 'recharts'` instead.
+ *
+ * Returns the offset of the chart in pixels.
+ *
+ * @returns {ChartOffsetInternal} The offset of the chart in pixels, or a default value if not in a chart context.
+ */
+export var useOffsetInternal = () => {
+  var _useAppSelector2;
+  return (_useAppSelector2 = useAppSelector(selectChartOffsetInternal)) !== null && _useAppSelector2 !== void 0 ? _useAppSelector2 : manyComponentsThrowErrorsIfOffsetIsUndefined;
+};
+
+/**
+ * Returns the width of the chart in pixels.
+ *
+ * If you are using chart with hardcoded `width` prop, then the width returned will be the same
+ * as the `width` prop on the main chart element.
+ *
+ * If you are using a chart with a `ResponsiveContainer`, the width will be the size of the chart
+ * as the ResponsiveContainer has decided it would be.
+ *
+ * If the chart has any axes or legend, the `width` will be the size of the chart
+ * including the axes and legend. Meaning: adding axes and legend will not change the width.
+ *
+ * The dimensions do not scale, meaning as user zoom in and out, the width number will not change
+ * as the chart gets visually larger or smaller.
+ *
+ * Returns `undefined` if used outside a chart context.
+ *
+ * @returns {number | undefined} The width of the chart in pixels, or `undefined` if not in a chart context.
+ */
+export var useChartWidth = () => {
+  return useAppSelector(selectChartWidth);
+};
+
+/**
+ * Returns the height of the chart in pixels.
+ *
+ * If you are using chart with hardcoded `height` props, then the height returned will be the same
+ * as the `height` prop on the main chart element.
+ *
+ * If you are using a chart with a `ResponsiveContainer`, the height will be the size of the chart
+ * as the ResponsiveContainer has decided it would be.
+ *
+ * If the chart has any axes or legend, the `height` will be the size of the chart
+ * including the axes and legend. Meaning: adding axes and legend will not change the height.
+ *
+ * The dimensions do not scale, meaning as user zoom in and out, the height number will not change
+ * as the chart gets visually larger or smaller.
+ *
+ * Returns `undefined` if used outside a chart context.
+ *
+ * @returns {number | undefined} The height of the chart in pixels, or `undefined` if not in a chart context.
+ */
+export var useChartHeight = () => {
+  return useAppSelector(selectChartHeight);
+};
+
+/**
+ * Margin is the empty space around the chart. Excludes axes and legend and brushes and the like.
+ * This is declared by the user in the chart props.
+ * If you are interested in the space occupied by axes, legend, or brushes,
+ * use {@link useOffset} instead, which also includes calculated widths and heights of axes and legends.
+ *
+ * Returns `undefined` if used outside a chart context.
+ *
+ * @returns {Margin | undefined} The margin of the chart in pixels, or `undefined` if not in a chart context.
+ */
+export var useMargin = () => {
+  return useAppSelector(state => state.layout.margin);
+};
+export var selectChartLayout = state => state.layout.layoutType;
+export var useChartLayout = () => useAppSelector(selectChartLayout);
+export var useCartesianChartLayout = () => {
+  var layout = useChartLayout();
+  if (layout === 'horizontal' || layout === 'vertical') {
+    return layout;
+  }
+  return undefined;
+};
+export var selectPolarChartLayout = state => {
+  var layout = state.layout.layoutType;
+  if (layout === 'centric' || layout === 'radial') {
+    return layout;
+  }
+  return undefined;
+};
+export var usePolarChartLayout = () => {
+  return useAppSelector(selectPolarChartLayout);
+};
+
+/**
+ * Returns true if the component is rendered inside a chart context.
+ * Some components may be used both inside and outside of charts,
+ * and this hook allows them to determine if they are in a chart context or not.
+ *
+ * Other selectors may return undefined when used outside a chart context,
+ * or undefined when inside a chart, but without relevant data.
+ * This hook provides a more explicit way to check for chart context.
+ *
+ * @returns {boolean} True if in chart context, false otherwise.
+ */
+export var useIsInChartContext = () => {
+  /*
+   * All charts provide a layout type in the chart context.
+   * If we have a layout type, we are in a chart context.
+   */
+  var layout = useChartLayout();
+  return layout !== undefined;
+};
+export var ReportChartSize = props => {
+  var dispatch = useAppDispatch();
+
+  /*
+   * Skip dispatching properties in panorama chart for two reasons:
+   * 1. The root chart should be deciding on these properties, and
+   * 2. Brush reads these properties from redux store, and so they must remain stable
+   *      to avoid circular dependency and infinite re-rendering.
+   */
+  var isPanorama = useIsPanorama();
+  var {
+    width: widthFromProps,
+    height: heightFromProps
+  } = props;
+  var responsiveContainerCalculations = useResponsiveContainerContext();
+  var width = widthFromProps;
+  var height = heightFromProps;
+  if (responsiveContainerCalculations) {
+    /*
+     * In case we receive width and height from ResponsiveContainer,
+     * we will always prefer those.
+     * Only in case ResponsiveContainer does not provide width or height,
+     * we will fall back to the explicitly provided width and height.
+     *
+     * This to me feels backwards - we should allow override by the more specific props on individual charts, right?
+     * But this is 3.x behaviour, so let's keep it for backwards compatibility.
+     *
+     * We can change this in 4.x if we want to.
+     */
+    width = responsiveContainerCalculations.width > 0 ? responsiveContainerCalculations.width : widthFromProps;
+    height = responsiveContainerCalculations.height > 0 ? responsiveContainerCalculations.height : heightFromProps;
+  }
+  useEffect(() => {
+    if (!isPanorama && isPositiveNumber(width) && isPositiveNumber(height)) {
+      dispatch(setChartSize({
+        width,
+        height
+      }));
+    }
+  }, [dispatch, isPanorama, width, height]);
+  return null;
+};
+export var ReportChartMargin = _ref => {
+  var {
+    margin
+  } = _ref;
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setMargin(margin));
+  }, [dispatch, margin]);
+  return null;
+};
Index: node_modules/recharts/es6/context/legendPayloadContext.js
===================================================================
--- node_modules/recharts/es6/context/legendPayloadContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/legendPayloadContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,10 @@
+import { useAppSelector } from '../state/hooks';
+import { selectLegendPayload } from '../state/selectors/legendSelectors';
+
+/**
+ * Use this hook in Legend, or anywhere else where you want to read the current Legend items.
+ * @return all Legend items ready to be rendered
+ */
+export function useLegendPayload() {
+  return useAppSelector(selectLegendPayload);
+}
Index: node_modules/recharts/es6/context/legendPortalContext.js
===================================================================
--- node_modules/recharts/es6/context/legendPortalContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/legendPortalContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,3 @@
+import { createContext, useContext } from 'react';
+export var LegendPortalContext = /*#__PURE__*/createContext(null);
+export var useLegendPortal = () => useContext(LegendPortalContext);
Index: node_modules/recharts/es6/context/tooltipContext.js
===================================================================
--- node_modules/recharts/es6/context/tooltipContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/tooltipContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,33 @@
+import { useAppDispatch } from '../state/hooks';
+import { mouseLeaveItem, setActiveClickItemIndex, setActiveMouseOverItemIndex } from '../state/tooltipSlice';
+export var useMouseEnterItemDispatch = (onMouseEnterFromProps, dataKey, graphicalItemId) => {
+  var dispatch = useAppDispatch();
+  return (data, index) => event => {
+    onMouseEnterFromProps === null || onMouseEnterFromProps === void 0 || onMouseEnterFromProps(data, index, event);
+    dispatch(setActiveMouseOverItemIndex({
+      activeIndex: String(index),
+      activeDataKey: dataKey,
+      activeCoordinate: data.tooltipPosition,
+      activeGraphicalItemId: graphicalItemId
+    }));
+  };
+};
+export var useMouseLeaveItemDispatch = onMouseLeaveFromProps => {
+  var dispatch = useAppDispatch();
+  return (data, index) => event => {
+    onMouseLeaveFromProps === null || onMouseLeaveFromProps === void 0 || onMouseLeaveFromProps(data, index, event);
+    dispatch(mouseLeaveItem());
+  };
+};
+export var useMouseClickItemDispatch = (onMouseClickFromProps, dataKey, graphicalItemId) => {
+  var dispatch = useAppDispatch();
+  return (data, index) => event => {
+    onMouseClickFromProps === null || onMouseClickFromProps === void 0 || onMouseClickFromProps(data, index, event);
+    dispatch(setActiveClickItemIndex({
+      activeIndex: String(index),
+      activeDataKey: dataKey,
+      activeCoordinate: data.tooltipPosition,
+      activeGraphicalItemId: graphicalItemId
+    }));
+  };
+};
Index: node_modules/recharts/es6/context/tooltipPortalContext.js
===================================================================
--- node_modules/recharts/es6/context/tooltipPortalContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/tooltipPortalContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,3 @@
+import { createContext, useContext } from 'react';
+export var TooltipPortalContext = /*#__PURE__*/createContext(null);
+export var useTooltipPortal = () => useContext(TooltipPortalContext);
Index: node_modules/recharts/es6/context/useTooltipAxis.js
===================================================================
--- node_modules/recharts/es6/context/useTooltipAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/context/useTooltipAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { useAppSelector } from '../state/hooks';
+import { getBandSizeOfAxis } from '../util/ChartUtils';
+import { selectTooltipAxis } from '../state/selectors/axisSelectors';
+import { selectTooltipAxisScale, selectTooltipAxisTicks } from '../state/selectors/tooltipSelectors';
+export var useTooltipAxis = () => useAppSelector(selectTooltipAxis);
+export var useTooltipAxisBandSize = () => {
+  var tooltipAxis = useTooltipAxis();
+  var tooltipTicks = useAppSelector(selectTooltipAxisTicks);
+  var tooltipAxisScale = useAppSelector(selectTooltipAxisScale);
+  if (!tooltipAxis || !tooltipAxisScale) {
+    return getBandSizeOfAxis(undefined, tooltipTicks);
+  }
+  return getBandSizeOfAxis(_objectSpread(_objectSpread({}, tooltipAxis), {}, {
+    scale: tooltipAxisScale
+  }), tooltipTicks);
+};
Index: node_modules/recharts/es6/hooks.js
===================================================================
--- node_modules/recharts/es6/hooks.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/hooks.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,176 @@
+import { defaultAxisId } from './state/cartesianAxisSlice';
+import { selectAxisDomain, selectAxisWithScale } from './state/selectors/axisSelectors';
+import { useAppSelector } from './state/hooks';
+import { useIsPanorama } from './context/PanoramaContext';
+import { selectActiveLabel, selectActiveTooltipCoordinate, selectActiveTooltipDataPoints, selectIsTooltipActive } from './state/selectors/tooltipSelectors';
+import { selectChartOffset } from './state/selectors/selectChartOffset';
+import { selectPlotArea } from './state/selectors/selectPlotArea';
+export var useXAxis = xAxisId => {
+  var isPanorama = useIsPanorama();
+  return useAppSelector(state => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama));
+};
+export var useYAxis = yAxisId => {
+  var isPanorama = useIsPanorama();
+  return useAppSelector(state => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama));
+};
+
+/**
+ * Returns the active tooltip label. The label is one of the values from the chart data,
+ * and is used to display in the tooltip content.
+ *
+ * Returns undefined if there is no active user interaction or if used outside a chart context
+ *
+ * @returns ActiveLabel
+ */
+export var useActiveTooltipLabel = () => {
+  return useAppSelector(selectActiveLabel);
+};
+
+/**
+ * Returns the offset of the chart in pixels.
+ *
+ * Offset defines the blank space between the chart and the plot area.
+ * This blank space is occupied by supporting elements like axes, legends, and brushes.
+ *
+ * The offset includes:
+ *
+ * - Margins
+ * - Width and height of the axes
+ * - Width and height of the legend
+ * - Brush height
+ *
+ * If you are interested in the margin alone, use {@link useMargin} instead.
+ *
+ * The offset is independent of charts position on the page, meaning it does not change as the chart is scrolled or resized.
+ *
+ * It is also independent of the scale and zoom, meaning that as the user zooms in and out,
+ * the numbers will not change as the chart gets visually larger or smaller.
+ *
+ * This hook must be used within a chart context (inside a `<LineChart>`, `<BarChart>`, etc.).
+ * This hook returns `undefined` if used outside a chart context.
+ *
+ * @returns Offset of the chart in pixels, or undefined if used outside a chart context.
+ */
+export var useOffset = () => {
+  return useAppSelector(selectChartOffset);
+};
+
+/**
+ * Plot area is the area where the actual chart data is rendered.
+ * This means: bars, lines, scatter points, etc.
+ *
+ * The plot area is calculated based on the chart dimensions and the offset.
+ *
+ * Plot area `width` and `height` are the dimensions in pixels;
+ * `x` and `y` are the coordinates of the top-left corner of the plot area relative to the chart container.
+ *
+ * They are also independent of the scale and zoom, meaning that as the user zooms in and out,
+ * the plot area dimensions will not change as the chart gets visually larger or smaller.
+ *
+ * This hook must be used within a chart context (inside a `<LineChart>`, `<BarChart>`, etc.).
+ * This hook returns `undefined` if used outside a chart context.
+ *
+ * @returns Plot area of the chart in pixels, or undefined if used outside a chart context.
+ */
+export var usePlotArea = () => {
+  return useAppSelector(selectPlotArea);
+};
+
+/**
+ * Returns the currently active data points being displayed in the Tooltip.
+ * Active means that it is currently visible; this hook will return `undefined` if there is no current interaction.
+ *
+ * This follows the `<Tooltip />` props, if the Tooltip element is present in the chart.
+ * If there is no `<Tooltip />` then this hook will follow the default Tooltip props.
+ *
+ * Data point is whatever you pass as an input to the chart using the `data={}` prop.
+ *
+ * This returns an array because a chart can have multiple graphical items in it (multiple Lines for example)
+ * and tooltip with `shared={true}` will display all items at the same time.
+ *
+ * Returns undefined when used outside a chart context.
+ *
+ * @returns Data points that are currently visible in a Tooltip
+ */
+export var useActiveTooltipDataPoints = () => {
+  return useAppSelector(selectActiveTooltipDataPoints);
+};
+
+/**
+ * Returns the calculated domain of an X-axis.
+ *
+ * The domain can be numerical: `[min, max]`, or categorical: `['a', 'b', 'c']`.
+ *
+ * The type of the domain is defined by the `type` prop of the XAxis.
+ *
+ * The values of the domain are calculated based on the data and the `dataKey` of the axis.
+ *
+ * If the chart has a Brush, the domain will be filtered to the brushed indexes if the hook is used outside a Brush context,
+ * and the full domain will be returned if the hook is used inside a Brush context.
+ *
+ * @param xAxisId The `xAxisId` of the X-axis. Defaults to `0` if not provided.
+ * @returns The domain of the X-axis, or `undefined` if it cannot be calculated or if used outside a chart context.
+ */
+export var useXAxisDomain = function useXAxisDomain() {
+  var xAxisId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultAxisId;
+  var isPanorama = useIsPanorama();
+  return useAppSelector(state => selectAxisDomain(state, 'xAxis', xAxisId, isPanorama));
+};
+
+/**
+ * Returns the calculated domain of a Y-axis.
+ *
+ * The domain can be numerical: `[min, max]`, or categorical: `['a', 'b', 'c']`.
+ *
+ * The type of the domain is defined by the `type` prop of the YAxis.
+ *
+ * The values of the domain are calculated based on the data and the `dataKey` of the axis.
+ *
+ * Does not interact with Brushes, as Y-axes do not support brushing.
+ *
+ * @param yAxisId The `yAxisId` of the Y-axis. Defaults to `0` if not provided.
+ * @returns The domain of the Y-axis, or `undefined` if it cannot be calculated or if used outside a chart context.
+ */
+export var useYAxisDomain = function useYAxisDomain() {
+  var yAxisId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultAxisId;
+  var isPanorama = useIsPanorama();
+  return useAppSelector(state => selectAxisDomain(state, 'yAxis', yAxisId, isPanorama));
+};
+
+/**
+ * Returns true if the {@link Tooltip} is currently active (visible).
+ *
+ * Returns false if the Tooltip is not active or if used outside a chart context.
+ *
+ * Recharts only allows one Tooltip per chart, so this hook does not take any parameters.
+ * Weird things may happen if you have multiple Tooltip components in the same chart so please don't do that.
+ *
+ * @returns {boolean} True if the Tooltip is active, false otherwise.
+ * @since 3.7
+ */
+export var useIsTooltipActive = () => {
+  var _useAppSelector;
+  return (_useAppSelector = useAppSelector(selectIsTooltipActive)) !== null && _useAppSelector !== void 0 ? _useAppSelector : false;
+};
+
+/**
+ * Returns the Cartesian `x` + `y` coordinates of the active {@link Tooltip}.
+ *
+ * Returns undefined if there is no active user interaction or if used outside a chart context.
+ *
+ * Recharts only allows one Tooltip per chart, so this hook does not take any parameters.
+ * Weird things may happen if you have multiple Tooltip components in the same chart so please don't do that.
+ *
+ * @returns {Coordinate | undefined} The coordinate of the active Tooltip, or undefined.
+ * @since 3.7
+ */
+export var useActiveTooltipCoordinate = () => {
+  var coordinate = useAppSelector(selectActiveTooltipCoordinate);
+  if (coordinate == null) {
+    return undefined;
+  }
+  return {
+    x: coordinate.x,
+    y: coordinate.y
+  };
+};
Index: node_modules/recharts/es6/index.js
===================================================================
--- node_modules/recharts/es6/index.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/index.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,67 @@
+// "export type" declarations on separate lines are in use
+// to workaround babel issue(s) 11465 12578
+//
+
+// see https://github.com/babel/babel/issues/11464#issuecomment-617606898
+export { Surface } from './container/Surface';
+export { Layer } from './container/Layer';
+export { Legend } from './component/Legend';
+export { DefaultLegendContent } from './component/DefaultLegendContent';
+export { Tooltip } from './component/Tooltip';
+export { DefaultTooltipContent } from './component/DefaultTooltipContent';
+export { ResponsiveContainer } from './component/ResponsiveContainer';
+export { Cell } from './component/Cell';
+export { Text } from './component/Text';
+export { Label } from './component/Label';
+export { LabelList } from './component/LabelList';
+export { Customized } from './component/Customized';
+export { Sector } from './shape/Sector';
+export { Curve } from './shape/Curve';
+export { Rectangle } from './shape/Rectangle';
+export { Polygon } from './shape/Polygon';
+export { Dot } from './shape/Dot';
+export { Cross } from './shape/Cross';
+export { Symbols } from './shape/Symbols';
+export { PolarGrid } from './polar/PolarGrid';
+export { PolarRadiusAxis } from './polar/PolarRadiusAxis';
+export { PolarAngleAxis } from './polar/PolarAngleAxis';
+export { Pie } from './polar/Pie';
+export { Radar } from './polar/Radar';
+export { RadialBar } from './polar/RadialBar';
+export { Brush } from './cartesian/Brush';
+export { ReferenceLine } from './cartesian/ReferenceLine';
+export { ReferenceDot } from './cartesian/ReferenceDot';
+export { ReferenceArea } from './cartesian/ReferenceArea';
+export { CartesianAxis } from './cartesian/CartesianAxis';
+export { CartesianGrid } from './cartesian/CartesianGrid';
+export { Line } from './cartesian/Line';
+export { Area } from './cartesian/Area';
+export { Bar } from './cartesian/Bar';
+export { BarStack } from './cartesian/BarStack';
+export { Scatter } from './cartesian/Scatter';
+export { XAxis } from './cartesian/XAxis';
+export { YAxis } from './cartesian/YAxis';
+export { ZAxis } from './cartesian/ZAxis';
+export { ErrorBar } from './cartesian/ErrorBar';
+export { LineChart } from './chart/LineChart';
+export { BarChart } from './chart/BarChart';
+export { PieChart } from './chart/PieChart';
+export { Treemap } from './chart/Treemap';
+export { Sankey } from './chart/Sankey';
+export { RadarChart } from './chart/RadarChart';
+export { ScatterChart } from './chart/ScatterChart';
+export { AreaChart } from './chart/AreaChart';
+export { RadialBarChart } from './chart/RadialBarChart';
+export { ComposedChart } from './chart/ComposedChart';
+export { SunburstChart } from './chart/SunburstChart';
+export { Funnel } from './cartesian/Funnel';
+export { FunnelChart } from './chart/FunnelChart';
+export { Trapezoid } from './shape/Trapezoid';
+export { Global } from './util/Global';
+export { ZIndexLayer } from './zIndex/ZIndexLayer';
+export { DefaultZIndexes } from './zIndex/DefaultZIndexes';
+
+/** export getNiceTickValues so this can be used as a replacement for what is in recharts-scale */
+export { getNiceTickValues } from './util/scale/getNiceTickValues';
+export { useActiveTooltipLabel, useOffset, usePlotArea, useActiveTooltipDataPoints, useXAxisDomain, useYAxisDomain, useIsTooltipActive, useActiveTooltipCoordinate } from './hooks';
+export { useChartHeight, useChartWidth, useMargin } from './context/chartLayoutContext';
Index: node_modules/recharts/es6/polar/Pie.js
===================================================================
--- node_modules/recharts/es6/polar/Pie.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/polar/Pie.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,632 @@
+var _excluded = ["key"],
+  _excluded2 = ["onMouseEnter", "onClick", "onMouseLeave"],
+  _excluded3 = ["id"],
+  _excluded4 = ["id"];
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { useCallback, useMemo, useRef, useState } from 'react';
+import get from 'es-toolkit/compat/get';
+import { clsx } from 'clsx';
+import { selectPieLegend, selectPieSectors } from '../state/selectors/pieSelectors';
+import { useAppSelector } from '../state/hooks';
+import { Layer } from '../container/Layer';
+import { Curve } from '../shape/Curve';
+import { Text } from '../component/Text';
+import { Cell } from '../component/Cell';
+import { findAllByType } from '../util/ReactUtils';
+import { getMaxRadius, polarToCartesian } from '../util/PolarUtils';
+import { getPercentValue, interpolate, isNumber, mathSign } from '../util/DataUtils';
+import { getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { Shape } from '../util/ActiveShapeUtils';
+import { useMouseClickItemDispatch, useMouseEnterItemDispatch, useMouseLeaveItemDispatch } from '../context/tooltipContext';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { selectActiveTooltipDataKey, selectActiveTooltipGraphicalItemId, selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';
+import { SetPolarLegendPayload } from '../state/SetLegendPayload';
+import { DATA_ITEM_GRAPHICAL_ITEM_ID_ATTRIBUTE_NAME, DATA_ITEM_INDEX_ATTRIBUTE_NAME } from '../util/Constants';
+import { useAnimationId } from '../util/useAnimationId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetPolarGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents, svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+import { LabelListFromLabelProp, PolarLabelListContextProvider } from '../component/LabelList';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { getClassNameFromUnknown } from '../util/getClassNameFromUnknown';
+
+/**
+ * The `label` prop in Pie accepts a variety of alternatives.
+ */
+
+/**
+ * We spread the data object into the sector data item,
+ * so we can't really know what is going to be inside.
+ *
+ * This type represents our best effort, but it all depends on the input data
+ * and what is inside of it.
+ *
+ * https://github.com/recharts/recharts/issues/6380
+ * https://github.com/recharts/recharts/discussions/6375
+ */
+
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+function SetPiePayloadLegend(props) {
+  var cells = useMemo(() => findAllByType(props.children, Cell), [props.children]);
+  var legendPayload = useAppSelector(state => selectPieLegend(state, props.id, cells));
+  if (legendPayload == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(SetPolarLegendPayload, {
+    legendPayload: legendPayload
+  });
+}
+var SetPieTooltipEntrySettings = /*#__PURE__*/React.memo(_ref => {
+  var {
+    dataKey,
+    nameKey,
+    sectors,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType,
+    id
+  } = _ref;
+  var tooltipEntrySettings = {
+    dataDefinedOnItem: sectors.map(p => p.tooltipPayload),
+    getPosition: index => {
+      var _sectors$Number;
+      return (_sectors$Number = sectors[Number(index)]) === null || _sectors$Number === void 0 ? void 0 : _sectors$Number.tooltipPosition;
+    },
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '',
+      // why doesn't Pie support unit?
+      graphicalItemId: id
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+var getTextAnchor = (x, cx) => {
+  if (x > cx) {
+    return 'start';
+  }
+  if (x < cx) {
+    return 'end';
+  }
+  return 'middle';
+};
+var getOuterRadius = (dataPoint, outerRadius, maxPieRadius) => {
+  if (typeof outerRadius === 'function') {
+    return getPercentValue(outerRadius(dataPoint), maxPieRadius, maxPieRadius * 0.8);
+  }
+  return getPercentValue(outerRadius, maxPieRadius, maxPieRadius * 0.8);
+};
+var parseCoordinateOfPie = (pieSettings, offset, dataPoint) => {
+  var {
+    top,
+    left,
+    width,
+    height
+  } = offset;
+  var maxPieRadius = getMaxRadius(width, height);
+  var cx = left + getPercentValue(pieSettings.cx, width, width / 2);
+  var cy = top + getPercentValue(pieSettings.cy, height, height / 2);
+  var innerRadius = getPercentValue(pieSettings.innerRadius, maxPieRadius, 0);
+  var outerRadius = getOuterRadius(dataPoint, pieSettings.outerRadius, maxPieRadius);
+  var maxRadius = pieSettings.maxRadius || Math.sqrt(width * width + height * height) / 2;
+  return {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    maxRadius
+  };
+};
+var parseDeltaAngle = (startAngle, endAngle) => {
+  var sign = mathSign(endAngle - startAngle);
+  var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);
+  return sign * deltaAngle;
+};
+var renderLabelLineItem = (option, props) => {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error we can't know if the type of props matches the element
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  if (typeof option === 'function') {
+    return option(props);
+  }
+  var className = clsx('recharts-pie-label-line', typeof option !== 'boolean' ? option.className : '');
+  // React doesn't like it when we spread a key property onto an element
+  var {
+      key
+    } = props,
+    otherProps = _objectWithoutProperties(props, _excluded);
+  return /*#__PURE__*/React.createElement(Curve, _extends({}, otherProps, {
+    type: "linear",
+    className: className
+  }));
+};
+var renderLabelItem = (option, props, value) => {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error element cloning is not typed
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  var label = value;
+  if (typeof option === 'function') {
+    label = option(props);
+    if (/*#__PURE__*/React.isValidElement(label)) {
+      return label;
+    }
+  }
+  var className = clsx('recharts-pie-label-text', getClassNameFromUnknown(option));
+  return /*#__PURE__*/React.createElement(Text, _extends({}, props, {
+    alignmentBaseline: "middle",
+    className: className
+  }), label);
+};
+function PieLabels(_ref2) {
+  var {
+    sectors,
+    props,
+    showLabels
+  } = _ref2;
+  var {
+    label,
+    labelLine,
+    dataKey
+  } = props;
+  if (!showLabels || !label || !sectors) {
+    return null;
+  }
+  var pieProps = svgPropertiesNoEvents(props);
+  var customLabelProps = svgPropertiesNoEventsFromUnknown(label);
+  var customLabelLineProps = svgPropertiesNoEventsFromUnknown(labelLine);
+  var offsetRadius = typeof label === 'object' && 'offsetRadius' in label && typeof label.offsetRadius === 'number' && label.offsetRadius || 20;
+  var labels = sectors.map((entry, i) => {
+    var midAngle = (entry.startAngle + entry.endAngle) / 2;
+    var endPoint = polarToCartesian(entry.cx, entry.cy, entry.outerRadius + offsetRadius, midAngle);
+    var labelProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieProps), entry), {}, {
+      // @ts-expect-error customLabelProps is contributing unknown props
+      stroke: 'none'
+    }, customLabelProps), {}, {
+      index: i,
+      textAnchor: getTextAnchor(endPoint.x, entry.cx)
+    }, endPoint);
+    var lineProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieProps), entry), {}, {
+      // @ts-expect-error customLabelLineProps is contributing unknown props
+      fill: 'none',
+      // @ts-expect-error customLabelLineProps is contributing unknown props
+      stroke: entry.fill
+    }, customLabelLineProps), {}, {
+      index: i,
+      points: [polarToCartesian(entry.cx, entry.cy, entry.outerRadius, midAngle), endPoint],
+      key: 'line'
+    });
+    return /*#__PURE__*/React.createElement(ZIndexLayer, {
+      zIndex: DefaultZIndexes.label,
+      key: "label-".concat(entry.startAngle, "-").concat(entry.endAngle, "-").concat(entry.midAngle, "-").concat(i)
+    }, /*#__PURE__*/React.createElement(Layer, null, labelLine && renderLabelLineItem(labelLine, lineProps), renderLabelItem(label, labelProps, getValueByDataKey(entry, dataKey))));
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-pie-labels"
+  }, labels);
+}
+function PieLabelList(_ref3) {
+  var {
+    sectors,
+    props,
+    showLabels
+  } = _ref3;
+  var {
+    label
+  } = props;
+  if (typeof label === 'object' && label != null && 'position' in label) {
+    return /*#__PURE__*/React.createElement(LabelListFromLabelProp, {
+      label: label
+    });
+  }
+  return /*#__PURE__*/React.createElement(PieLabels, {
+    sectors: sectors,
+    props: props,
+    showLabels: showLabels
+  });
+}
+function PieSectors(props) {
+  var {
+    sectors,
+    activeShape,
+    inactiveShape: inactiveShapeProp,
+    allOtherPieProps,
+    shape,
+    id
+  } = props;
+  var activeIndex = useAppSelector(selectActiveTooltipIndex);
+  var activeDataKey = useAppSelector(selectActiveTooltipDataKey);
+  var activeGraphicalItemId = useAppSelector(selectActiveTooltipGraphicalItemId);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = allOtherPieProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherPieProps, _excluded2);
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherPieProps.dataKey, id);
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherPieProps.dataKey, id);
+  if (sectors == null || sectors.length === 0) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(React.Fragment, null, sectors.map((entry, i) => {
+    if ((entry === null || entry === void 0 ? void 0 : entry.startAngle) === 0 && (entry === null || entry === void 0 ? void 0 : entry.endAngle) === 0 && sectors.length !== 1) return null;
+
+    // For Pie charts, when multiple Pies share the same dataKey, we need to ensure only the hovered Pie's sector is active.
+    // We do this by checking if the active graphical item ID matches this Pie's ID.
+    var graphicalItemMatches = activeGraphicalItemId == null || activeGraphicalItemId === id;
+    var isActive = String(i) === activeIndex && (activeDataKey == null || allOtherPieProps.dataKey === activeDataKey) && graphicalItemMatches;
+    var inactiveShape = activeIndex ? inactiveShapeProp : null;
+    var sectorOptions = activeShape && isActive ? activeShape : inactiveShape;
+    var sectorProps = _objectSpread(_objectSpread({}, entry), {}, {
+      stroke: entry.stroke,
+      tabIndex: -1,
+      [DATA_ITEM_INDEX_ATTRIBUTE_NAME]: i,
+      [DATA_ITEM_GRAPHICAL_ITEM_ID_ATTRIBUTE_NAME]: id
+    });
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      key: "sector-".concat(entry === null || entry === void 0 ? void 0 : entry.startAngle, "-").concat(entry === null || entry === void 0 ? void 0 : entry.endAngle, "-").concat(entry.midAngle, "-").concat(i),
+      tabIndex: -1,
+      className: "recharts-pie-sector"
+    }, adaptEventsOfChild(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error the types need a bit of attention
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onClick: onClickFromContext(entry, i)
+    }), /*#__PURE__*/React.createElement(Shape, _extends({
+      option: shape !== null && shape !== void 0 ? shape : sectorOptions,
+      index: i,
+      shapeType: "sector",
+      isActive: isActive
+    }, sectorProps)));
+  }));
+}
+export function computePieSectors(_ref4) {
+  var _pieSettings$paddingA;
+  var {
+    pieSettings,
+    displayedData,
+    cells,
+    offset
+  } = _ref4;
+  var {
+    cornerRadius,
+    startAngle,
+    endAngle,
+    dataKey,
+    nameKey,
+    tooltipType
+  } = pieSettings;
+  var minAngle = Math.abs(pieSettings.minAngle);
+  var deltaAngle = parseDeltaAngle(startAngle, endAngle);
+  var absDeltaAngle = Math.abs(deltaAngle);
+  var paddingAngle = displayedData.length <= 1 ? 0 : (_pieSettings$paddingA = pieSettings.paddingAngle) !== null && _pieSettings$paddingA !== void 0 ? _pieSettings$paddingA : 0;
+  var notZeroItemCount = displayedData.filter(entry => getValueByDataKey(entry, dataKey, 0) !== 0).length;
+  var totalPaddingAngle = (absDeltaAngle >= 360 ? notZeroItemCount : notZeroItemCount - 1) * paddingAngle;
+  var realTotalAngle = absDeltaAngle - notZeroItemCount * minAngle - totalPaddingAngle;
+  var sum = displayedData.reduce((result, entry) => {
+    var val = getValueByDataKey(entry, dataKey, 0);
+    return result + (isNumber(val) ? val : 0);
+  }, 0);
+  var sectors;
+  if (sum > 0) {
+    var prev;
+    sectors = displayedData.map((entry, i) => {
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      var val = getValueByDataKey(entry, dataKey, 0);
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      var name = getValueByDataKey(entry, nameKey, i);
+      var coordinate = parseCoordinateOfPie(pieSettings, offset, entry);
+      var percent = (isNumber(val) ? val : 0) / sum;
+      var tempStartAngle;
+
+      // @ts-expect-error can't spread unknown
+      var entryWithCellInfo = _objectSpread(_objectSpread({}, entry), cells && cells[i] && cells[i].props);
+      if (i) {
+        tempStartAngle = prev.endAngle + mathSign(deltaAngle) * paddingAngle * (val !== 0 ? 1 : 0);
+      } else {
+        tempStartAngle = startAngle;
+      }
+      var tempEndAngle = tempStartAngle + mathSign(deltaAngle) * ((val !== 0 ? minAngle : 0) + percent * realTotalAngle);
+      var midAngle = (tempStartAngle + tempEndAngle) / 2;
+      var middleRadius = (coordinate.innerRadius + coordinate.outerRadius) / 2;
+      var tooltipPayload = [{
+        name,
+        value: val,
+        payload: entryWithCellInfo,
+        dataKey,
+        type: tooltipType,
+        graphicalItemId: pieSettings.id
+      }];
+      var tooltipPosition = polarToCartesian(coordinate.cx, coordinate.cy, middleRadius, midAngle);
+      prev = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieSettings.presentationProps), {}, {
+        percent,
+        cornerRadius: typeof cornerRadius === 'string' ? parseFloat(cornerRadius) : cornerRadius,
+        name,
+        tooltipPayload,
+        midAngle,
+        middleRadius,
+        tooltipPosition
+      }, entryWithCellInfo), coordinate), {}, {
+        value: val,
+        dataKey,
+        startAngle: tempStartAngle,
+        endAngle: tempEndAngle,
+        payload: entryWithCellInfo,
+        paddingAngle: mathSign(deltaAngle) * paddingAngle
+      });
+      return prev;
+    });
+  }
+  return sectors;
+}
+function PieLabelListProvider(_ref5) {
+  var {
+    showLabels,
+    sectors,
+    children
+  } = _ref5;
+  var labelListEntries = useMemo(() => {
+    if (!showLabels || !sectors) {
+      return [];
+    }
+    return sectors.map(entry => ({
+      value: entry.value,
+      payload: entry.payload,
+      clockWise: false,
+      parentViewBox: undefined,
+      viewBox: {
+        cx: entry.cx,
+        cy: entry.cy,
+        innerRadius: entry.innerRadius,
+        outerRadius: entry.outerRadius,
+        startAngle: entry.startAngle,
+        endAngle: entry.endAngle,
+        clockWise: false
+      },
+      fill: entry.fill
+    }));
+  }, [sectors, showLabels]);
+  return /*#__PURE__*/React.createElement(PolarLabelListContextProvider, {
+    value: showLabels ? labelListEntries : undefined
+  }, children);
+}
+function SectorsWithAnimation(_ref6) {
+  var {
+    props,
+    previousSectorsRef,
+    id
+  } = _ref6;
+  var {
+    sectors,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    activeShape,
+    inactiveShape,
+    onAnimationStart,
+    onAnimationEnd
+  } = props;
+  var animationId = useAnimationId(props, 'recharts-pie-');
+  var prevSectors = previousSectorsRef.current;
+  var [isAnimating, setIsAnimating] = useState(false);
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(PieLabelListProvider, {
+    showLabels: !isAnimating,
+    sectors: sectors
+  }, /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    animationId: animationId,
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationStart: handleAnimationStart,
+    onAnimationEnd: handleAnimationEnd,
+    key: animationId
+  }, t => {
+    var _first$startAngle;
+    var stepData = [];
+    var first = sectors && sectors[0];
+    var curAngle = (_first$startAngle = first === null || first === void 0 ? void 0 : first.startAngle) !== null && _first$startAngle !== void 0 ? _first$startAngle : 0;
+    sectors === null || sectors === void 0 || sectors.forEach((entry, index) => {
+      var prev = prevSectors && prevSectors[index];
+      var paddingAngle = index > 0 ? get(entry, 'paddingAngle', 0) : 0;
+      if (prev) {
+        var angle = interpolate(prev.endAngle - prev.startAngle, entry.endAngle - entry.startAngle, t);
+        var latest = _objectSpread(_objectSpread({}, entry), {}, {
+          startAngle: curAngle + paddingAngle,
+          endAngle: curAngle + angle + paddingAngle
+        });
+        stepData.push(latest);
+        curAngle = latest.endAngle;
+      } else {
+        var {
+          endAngle,
+          startAngle
+        } = entry;
+        var deltaAngle = interpolate(0, endAngle - startAngle, t);
+        var _latest = _objectSpread(_objectSpread({}, entry), {}, {
+          startAngle: curAngle + paddingAngle,
+          endAngle: curAngle + deltaAngle + paddingAngle
+        });
+        stepData.push(_latest);
+        curAngle = _latest.endAngle;
+      }
+    });
+
+    // eslint-disable-next-line no-param-reassign
+    previousSectorsRef.current = stepData;
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(PieSectors, {
+      sectors: stepData,
+      activeShape: activeShape,
+      inactiveShape: inactiveShape,
+      allOtherPieProps: props,
+      shape: props.shape,
+      id: id
+    }));
+  }), /*#__PURE__*/React.createElement(PieLabelList, {
+    showLabels: !isAnimating,
+    sectors: sectors,
+    props: props
+  }), props.children);
+}
+export var defaultPieProps = {
+  animationBegin: 400,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  cx: '50%',
+  cy: '50%',
+  dataKey: 'value',
+  endAngle: 360,
+  fill: '#808080',
+  hide: false,
+  innerRadius: 0,
+  isAnimationActive: 'auto',
+  label: false,
+  labelLine: true,
+  legendType: 'rect',
+  minAngle: 0,
+  nameKey: 'name',
+  outerRadius: '80%',
+  paddingAngle: 0,
+  rootTabIndex: 0,
+  startAngle: 0,
+  stroke: '#fff',
+  zIndex: DefaultZIndexes.area
+};
+function PieImpl(props) {
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded3);
+  var {
+    hide,
+    className,
+    rootTabIndex
+  } = props;
+  var cells = useMemo(() => findAllByType(props.children, Cell), [props.children]);
+  var sectors = useAppSelector(state => selectPieSectors(state, id, cells));
+  var previousSectorsRef = useRef(null);
+  var layerClass = clsx('recharts-pie', className);
+  if (hide || sectors == null) {
+    previousSectorsRef.current = null;
+    return /*#__PURE__*/React.createElement(Layer, {
+      tabIndex: rootTabIndex,
+      className: layerClass
+    });
+  }
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(SetPieTooltipEntrySettings, {
+    dataKey: props.dataKey,
+    nameKey: props.nameKey,
+    sectors: sectors,
+    stroke: props.stroke,
+    strokeWidth: props.strokeWidth,
+    fill: props.fill,
+    name: props.name,
+    hide: props.hide,
+    tooltipType: props.tooltipType,
+    id: id
+  }), /*#__PURE__*/React.createElement(Layer, {
+    tabIndex: rootTabIndex,
+    className: layerClass
+  }, /*#__PURE__*/React.createElement(SectorsWithAnimation, {
+    props: _objectSpread(_objectSpread({}, propsWithoutId), {}, {
+      sectors
+    }),
+    previousSectorsRef: previousSectorsRef,
+    id: id
+  })));
+}
+/**
+ * @consumes PolarChartContext
+ * @provides LabelListContext
+ * @provides CellReader
+ */
+export function Pie(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultPieProps);
+  var {
+      id: externalId
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded4);
+  var presentationProps = svgPropertiesNoEvents(propsWithoutId);
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: externalId,
+    type: "pie"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetPolarGraphicalItem, {
+    type: "pie",
+    id: id,
+    data: propsWithoutId.data,
+    dataKey: propsWithoutId.dataKey,
+    hide: propsWithoutId.hide,
+    angleAxisId: 0,
+    radiusAxisId: 0,
+    name: propsWithoutId.name,
+    nameKey: propsWithoutId.nameKey,
+    tooltipType: propsWithoutId.tooltipType,
+    legendType: propsWithoutId.legendType,
+    fill: propsWithoutId.fill,
+    cx: propsWithoutId.cx,
+    cy: propsWithoutId.cy,
+    startAngle: propsWithoutId.startAngle,
+    endAngle: propsWithoutId.endAngle,
+    paddingAngle: propsWithoutId.paddingAngle,
+    minAngle: propsWithoutId.minAngle,
+    innerRadius: propsWithoutId.innerRadius,
+    outerRadius: propsWithoutId.outerRadius,
+    cornerRadius: propsWithoutId.cornerRadius,
+    presentationProps: presentationProps,
+    maxRadius: props.maxRadius
+  }), /*#__PURE__*/React.createElement(SetPiePayloadLegend, _extends({}, propsWithoutId, {
+    id: id
+  })), /*#__PURE__*/React.createElement(PieImpl, _extends({}, propsWithoutId, {
+    id: id
+  }))));
+}
+Pie.displayName = 'Pie';
Index: node_modules/recharts/es6/polar/PolarAngleAxis.js
===================================================================
--- node_modules/recharts/es6/polar/PolarAngleAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/polar/PolarAngleAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,278 @@
+var _excluded = ["children", "type"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { useEffect, useMemo } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { Dot } from '../shape/Dot';
+import { Polygon } from '../shape/Polygon';
+import { Text } from '../component/Text';
+import { adaptEventsOfChild } from '../util/types';
+import { degreeToRadian, polarToCartesian } from '../util/PolarUtils';
+import { addAngleAxis, removeAngleAxis } from '../state/polarAxisSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectPolarAngleAxisTicks, selectPolarAxisScale } from '../state/selectors/polarScaleSelectors';
+import { selectAngleAxis, selectPolarViewBox } from '../state/selectors/polarAxisSelectors';
+import { defaultPolarAngleAxisProps } from './defaultPolarAngleAxisProps';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { svgPropertiesNoEvents, svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { usePolarChartLayout } from '../context/chartLayoutContext';
+import { noop } from '../util/DataUtils';
+import { getAxisTypeBasedOnLayout } from '../util/getAxisTypeBasedOnLayout';
+import { getClassNameFromUnknown } from '../util/getClassNameFromUnknown';
+var eps = 1e-5;
+var COS_45 = Math.cos(degreeToRadian(45));
+var AXIS_TYPE = 'angleAxis';
+function SetAngleAxisSettings(props) {
+  var dispatch = useAppDispatch();
+  var layout = usePolarChartLayout();
+  var settings = useMemo(() => {
+    var {
+        children,
+        type: typeFromProps
+      } = props,
+      rest = _objectWithoutProperties(props, _excluded);
+    var evaluatedType = getAxisTypeBasedOnLayout(layout, 'angleAxis', typeFromProps);
+    if (evaluatedType == null) {
+      return undefined;
+    }
+    return _objectSpread(_objectSpread({}, rest), {}, {
+      type: evaluatedType
+    });
+  }, [props, layout]);
+  var synchronizedSettings = useAppSelector(state => selectAngleAxis(state, settings === null || settings === void 0 ? void 0 : settings.id));
+  var settingsAreSynchronized = settings === synchronizedSettings;
+  useEffect(() => {
+    if (settings == null) {
+      return noop;
+    }
+    dispatch(addAngleAxis(settings));
+    return () => {
+      dispatch(removeAngleAxis(settings));
+    };
+  }, [dispatch, settings]);
+  if (settingsAreSynchronized) {
+    return props.children;
+  }
+  return null;
+}
+
+/**
+ * Calculate the coordinate of line endpoint
+ * @param data The data if there are ticks
+ * @param props axis settings
+ * @return (x1, y1): The point close to text,
+ *         (x2, y2): The point close to axis
+ */
+var getTickLineCoord = (data, props) => {
+  var {
+    cx,
+    cy,
+    radius,
+    orientation,
+    tickSize
+  } = props;
+  var tickLineSize = tickSize || 8;
+  var p1 = polarToCartesian(cx, cy, radius, data.coordinate);
+  var p2 = polarToCartesian(cx, cy, radius + (orientation === 'inner' ? -1 : 1) * tickLineSize, data.coordinate);
+  return {
+    x1: p1.x,
+    y1: p1.y,
+    x2: p2.x,
+    y2: p2.y
+  };
+};
+
+/**
+ * Get the text-anchor of each tick
+ * @param data Data of ticks
+ * @param orientation of the axis ticks
+ * @return text-anchor
+ */
+var getTickTextAnchor = (data, orientation) => {
+  var cos = Math.cos(degreeToRadian(-data.coordinate));
+  if (cos > eps) {
+    return orientation === 'outer' ? 'start' : 'end';
+  }
+  if (cos < -eps) {
+    return orientation === 'outer' ? 'end' : 'start';
+  }
+  return 'middle';
+};
+
+/**
+ * Get the text vertical anchor of each tick
+ * @param data Data of a tick
+ * @return text vertical anchor
+ */
+var getTickTextVerticalAnchor = data => {
+  var cos = Math.cos(degreeToRadian(-data.coordinate));
+  var sin = Math.sin(degreeToRadian(-data.coordinate));
+
+  // handle top and bottom sectors: 90±45deg and 270±45deg
+  if (Math.abs(cos) <= COS_45) {
+    // sin > 0: top sector, sin < 0: bottom sector
+    return sin > 0 ? 'start' : 'end';
+  }
+  return 'middle';
+};
+var AxisLine = props => {
+  var {
+    cx,
+    cy,
+    radius,
+    axisLineType,
+    axisLine,
+    ticks
+  } = props;
+  if (!axisLine) {
+    return null;
+  }
+  var axisLineProps = _objectSpread(_objectSpread({}, svgPropertiesNoEvents(props)), {}, {
+    fill: 'none'
+  }, svgPropertiesNoEvents(axisLine));
+  if (axisLineType === 'circle') {
+    // @ts-expect-error wrong SVG element type
+    return /*#__PURE__*/React.createElement(Dot, _extends({
+      className: "recharts-polar-angle-axis-line"
+    }, axisLineProps, {
+      cx: cx,
+      cy: cy,
+      r: radius
+    }));
+  }
+  var points = ticks.map(entry => polarToCartesian(cx, cy, radius, entry.coordinate));
+
+  // @ts-expect-error wrong SVG element type
+  return /*#__PURE__*/React.createElement(Polygon, _extends({
+    className: "recharts-polar-angle-axis-line"
+  }, axisLineProps, {
+    points: points
+  }));
+};
+var TickItemText = _ref => {
+  var {
+    tick,
+    tickProps,
+    value
+  } = _ref;
+  if (!tick) {
+    return null;
+  }
+  if (/*#__PURE__*/React.isValidElement(tick)) {
+    return /*#__PURE__*/React.cloneElement(tick, tickProps);
+  }
+  if (typeof tick === 'function') {
+    return tick(tickProps);
+  }
+  return /*#__PURE__*/React.createElement(Text, _extends({}, tickProps, {
+    className: "recharts-polar-angle-axis-tick-value"
+  }), value);
+};
+var Ticks = props => {
+  var {
+    tick,
+    tickLine,
+    tickFormatter,
+    stroke,
+    ticks
+  } = props;
+  var axisProps = svgPropertiesNoEvents(props);
+  var customTickProps = svgPropertiesNoEventsFromUnknown(tick);
+  var tickLineProps = _objectSpread(_objectSpread({}, axisProps), {}, {
+    fill: 'none'
+  }, svgPropertiesNoEvents(tickLine));
+  var items = ticks.map((entry, i) => {
+    var lineCoord = getTickLineCoord(entry, props);
+    var textAnchor = getTickTextAnchor(entry, props.orientation);
+    var verticalAnchor = getTickTextVerticalAnchor(entry);
+    var tickProps = _objectSpread(_objectSpread(_objectSpread({}, axisProps), {}, {
+      // @ts-expect-error customTickProps is contributing unknown props
+      textAnchor,
+      verticalAnchor,
+      // @ts-expect-error customTickProps is contributing unknown props
+      stroke: 'none',
+      // @ts-expect-error customTickProps is contributing unknown props
+      fill: stroke
+    }, customTickProps), {}, {
+      index: i,
+      payload: entry,
+      x: lineCoord.x2,
+      y: lineCoord.y2
+    });
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      className: clsx('recharts-polar-angle-axis-tick', getClassNameFromUnknown(tick)),
+      key: "tick-".concat(entry.coordinate)
+    }, adaptEventsOfChild(props, entry, i)), tickLine && /*#__PURE__*/React.createElement("line", _extends({
+      className: "recharts-polar-angle-axis-tick-line"
+    }, tickLineProps, lineCoord)), /*#__PURE__*/React.createElement(TickItemText, {
+      tick: tick,
+      tickProps: tickProps,
+      value: tickFormatter ? tickFormatter(entry.value, i) : entry.value
+    }));
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-polar-angle-axis-ticks"
+  }, items);
+};
+export var PolarAngleAxisWrapper = defaultsAndInputs => {
+  var {
+    angleAxisId
+  } = defaultsAndInputs;
+  var viewBox = useAppSelector(selectPolarViewBox);
+  var scale = useAppSelector(state => selectPolarAxisScale(state, 'angleAxis', angleAxisId));
+  var isPanorama = useIsPanorama();
+  var ticks = useAppSelector(state => selectPolarAngleAxisTicks(state, 'angleAxis', angleAxisId, isPanorama));
+  if (viewBox == null || !ticks || !ticks.length || scale == null) {
+    return null;
+  }
+  var props = _objectSpread(_objectSpread(_objectSpread({}, defaultsAndInputs), {}, {
+    scale
+  }, viewBox), {}, {
+    radius: viewBox.outerRadius,
+    ticks
+  });
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-polar-angle-axis', AXIS_TYPE, props.className)
+  }, /*#__PURE__*/React.createElement(AxisLine, props), /*#__PURE__*/React.createElement(Ticks, props)));
+};
+
+/**
+ * @provides PolarLabelContext
+ * @consumes PolarViewBoxContext
+ */
+export function PolarAngleAxis(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultPolarAngleAxisProps);
+  return /*#__PURE__*/React.createElement(SetAngleAxisSettings, {
+    id: props.angleAxisId,
+    scale: props.scale,
+    type: props.type,
+    dataKey: props.dataKey,
+    unit: undefined,
+    name: props.name,
+    allowDuplicatedCategory: false // Ignoring the prop on purpose because axis calculation behaves as if it was false and Tooltip requires it to be true.
+    ,
+    allowDataOverflow: false,
+    reversed: props.reversed,
+    includeHidden: false,
+    allowDecimals: props.allowDecimals,
+    tickCount: props.tickCount
+    // @ts-expect-error the type does not match. Is RadiusAxis really expecting what it says?
+    ,
+    ticks: props.ticks,
+    tick: props.tick,
+    domain: props.domain
+  }, /*#__PURE__*/React.createElement(PolarAngleAxisWrapper, props));
+}
+PolarAngleAxis.displayName = 'PolarAngleAxis';
Index: node_modules/recharts/es6/polar/PolarGrid.js
===================================================================
--- node_modules/recharts/es6/polar/PolarGrid.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/polar/PolarGrid.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,208 @@
+var _excluded = ["gridType", "radialLines", "angleAxisId", "radiusAxisId", "cx", "cy", "innerRadius", "outerRadius", "polarAngles", "polarRadius", "zIndex"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { clsx } from 'clsx';
+import * as React from 'react';
+import { polarToCartesian } from '../util/PolarUtils';
+import { useAppSelector } from '../state/hooks';
+import { selectPolarGridAngles, selectPolarGridRadii } from '../state/selectors/polarGridSelectors';
+import { selectPolarViewBox } from '../state/selectors/polarAxisSelectors';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+var getPolygonPath = (radius, cx, cy, polarAngles) => {
+  var path = '';
+  polarAngles.forEach((angle, i) => {
+    var point = polarToCartesian(cx, cy, radius, angle);
+    if (i) {
+      path += "L ".concat(point.x, ",").concat(point.y);
+    } else {
+      path += "M ".concat(point.x, ",").concat(point.y);
+    }
+  });
+  path += 'Z';
+  return path;
+};
+
+// Draw axis of radial line
+var PolarAngles = props => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    polarAngles,
+    radialLines
+  } = props;
+  if (!polarAngles || !polarAngles.length || !radialLines) {
+    return null;
+  }
+  var polarAnglesProps = _objectSpread({
+    stroke: '#ccc'
+  }, svgPropertiesNoEvents(props));
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-polar-grid-angle"
+  }, polarAngles.map(entry => {
+    var start = polarToCartesian(cx, cy, innerRadius, entry);
+    var end = polarToCartesian(cx, cy, outerRadius, entry);
+    return /*#__PURE__*/React.createElement("line", _extends({
+      key: "line-".concat(entry)
+    }, polarAnglesProps, {
+      x1: start.x,
+      y1: start.y,
+      x2: end.x,
+      y2: end.y
+    }));
+  }));
+};
+
+// Draw concentric circles
+var ConcentricCircle = props => {
+  var {
+    cx,
+    cy,
+    radius
+  } = props;
+  var concentricCircleProps = _objectSpread({
+    stroke: '#ccc',
+    fill: 'none'
+  }, svgPropertiesNoEvents(props));
+  return (
+    /*#__PURE__*/
+    // @ts-expect-error wrong SVG element type
+    React.createElement("circle", _extends({}, concentricCircleProps, {
+      className: clsx('recharts-polar-grid-concentric-circle', props.className),
+      cx: cx,
+      cy: cy,
+      r: radius
+    }))
+  );
+};
+
+// Draw concentric polygons
+var ConcentricPolygon = props => {
+  var {
+    radius
+  } = props;
+  var concentricPolygonProps = _objectSpread({
+    stroke: '#ccc',
+    fill: 'none'
+  }, svgPropertiesNoEvents(props));
+  return /*#__PURE__*/React.createElement("path", _extends({}, concentricPolygonProps, {
+    className: clsx('recharts-polar-grid-concentric-polygon', props.className),
+    d: getPolygonPath(radius, props.cx, props.cy, props.polarAngles)
+  }));
+};
+
+// Draw concentric axis
+var ConcentricGridPath = props => {
+  var {
+    polarRadius,
+    gridType
+  } = props;
+  if (!polarRadius || !polarRadius.length) {
+    return null;
+  }
+  var maxPolarRadius = Math.max(...polarRadius);
+  var renderBackground = props.fill && props.fill !== 'none';
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-polar-grid-concentric"
+  }, renderBackground && gridType === 'circle' && /*#__PURE__*/React.createElement(ConcentricCircle, _extends({}, props, {
+    radius: maxPolarRadius
+  })), renderBackground && gridType !== 'circle' && /*#__PURE__*/React.createElement(ConcentricPolygon, _extends({}, props, {
+    radius: maxPolarRadius
+  })), polarRadius.map((entry, i) => {
+    var key = i;
+    if (gridType === 'circle') {
+      return /*#__PURE__*/React.createElement(ConcentricCircle, _extends({
+        key: key
+      }, props, {
+        fill: "none",
+        radius: entry
+      }));
+    }
+    return /*#__PURE__*/React.createElement(ConcentricPolygon, _extends({
+      key: key
+    }, props, {
+      fill: "none",
+      radius: entry
+    }));
+  }));
+};
+export var defaultPolarGridProps = {
+  angleAxisId: 0,
+  radiusAxisId: 0,
+  gridType: 'polygon',
+  radialLines: true,
+  zIndex: DefaultZIndexes.grid
+};
+
+/**
+ * @consumes PolarViewBoxContext
+ */
+export var PolarGrid = outsideProps => {
+  var _ref, _polarViewBox$cx, _ref2, _polarViewBox$cy, _ref3, _polarViewBox$innerRa, _ref4, _polarViewBox$outerRa;
+  var _resolveDefaultProps = resolveDefaultProps(outsideProps, defaultPolarGridProps),
+    {
+      gridType,
+      radialLines,
+      angleAxisId,
+      radiusAxisId,
+      cx: cxFromOutside,
+      cy: cyFromOutside,
+      innerRadius: innerRadiusFromOutside,
+      outerRadius: outerRadiusFromOutside,
+      polarAngles: polarAnglesInput,
+      polarRadius: polarRadiusInput,
+      zIndex
+    } = _resolveDefaultProps,
+    inputs = _objectWithoutProperties(_resolveDefaultProps, _excluded);
+  var polarViewBox = useAppSelector(selectPolarViewBox);
+  var polarAnglesFromRedux = useAppSelector(state => selectPolarGridAngles(state, angleAxisId));
+  var polarRadiiFromRedux = useAppSelector(state => selectPolarGridRadii(state, radiusAxisId));
+  var polarAngles = Array.isArray(polarAnglesInput) ? polarAnglesInput : polarAnglesFromRedux;
+  var polarRadius = Array.isArray(polarRadiusInput) ? polarRadiusInput : polarRadiiFromRedux;
+  if (polarAngles == null || polarRadius == null) {
+    return null;
+  }
+  var props = _objectSpread({
+    cx: (_ref = (_polarViewBox$cx = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.cx) !== null && _polarViewBox$cx !== void 0 ? _polarViewBox$cx : cxFromOutside) !== null && _ref !== void 0 ? _ref : 0,
+    cy: (_ref2 = (_polarViewBox$cy = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.cy) !== null && _polarViewBox$cy !== void 0 ? _polarViewBox$cy : cyFromOutside) !== null && _ref2 !== void 0 ? _ref2 : 0,
+    innerRadius: (_ref3 = (_polarViewBox$innerRa = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.innerRadius) !== null && _polarViewBox$innerRa !== void 0 ? _polarViewBox$innerRa : innerRadiusFromOutside) !== null && _ref3 !== void 0 ? _ref3 : 0,
+    outerRadius: (_ref4 = (_polarViewBox$outerRa = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.outerRadius) !== null && _polarViewBox$outerRa !== void 0 ? _polarViewBox$outerRa : outerRadiusFromOutside) !== null && _ref4 !== void 0 ? _ref4 : 0,
+    polarAngles,
+    polarRadius,
+    zIndex
+  }, inputs);
+  var {
+    outerRadius
+  } = props;
+  if (outerRadius <= 0) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement("g", {
+    className: "recharts-polar-grid"
+  }, /*#__PURE__*/React.createElement(ConcentricGridPath, _extends({
+    gridType: gridType,
+    radialLines: radialLines
+  }, props, {
+    polarAngles: polarAngles,
+    polarRadius: polarRadius
+  })), /*#__PURE__*/React.createElement(PolarAngles, _extends({
+    gridType: gridType,
+    radialLines: radialLines
+  }, props, {
+    polarAngles: polarAngles,
+    polarRadius: polarRadius
+  }))));
+};
+PolarGrid.displayName = 'PolarGrid';
Index: node_modules/recharts/es6/polar/PolarRadiusAxis.js
===================================================================
--- node_modules/recharts/es6/polar/PolarRadiusAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/polar/PolarRadiusAxis.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,228 @@
+var _excluded = ["type"],
+  _excluded2 = ["cx", "cy", "angle", "axisLine"],
+  _excluded3 = ["angle", "tickFormatter", "stroke", "tick"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { useEffect, useMemo } from 'react';
+import maxBy from 'es-toolkit/compat/maxBy';
+import minBy from 'es-toolkit/compat/minBy';
+import { clsx } from 'clsx';
+import { Text } from '../component/Text';
+import { PolarLabelContextProvider, PolarLabelFromLabelProp } from '../component/Label';
+import { Layer } from '../container/Layer';
+import { polarToCartesian } from '../util/PolarUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { addRadiusAxis, removeRadiusAxis } from '../state/polarAxisSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectPolarAxisScale, selectPolarAxisTicks } from '../state/selectors/polarScaleSelectors';
+import { selectPolarViewBox } from '../state/selectors/polarAxisSelectors';
+import { defaultPolarRadiusAxisProps } from './defaultPolarRadiusAxisProps';
+import { svgPropertiesNoEvents, svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { usePolarChartLayout } from '../context/chartLayoutContext';
+import { noop } from '../util/DataUtils';
+import { getAxisTypeBasedOnLayout } from '../util/getAxisTypeBasedOnLayout';
+import { getClassNameFromUnknown } from '../util/getClassNameFromUnknown';
+var AXIS_TYPE = 'radiusAxis';
+function SetRadiusAxisSettings(props) {
+  var dispatch = useAppDispatch();
+  var layout = usePolarChartLayout();
+  var settings = useMemo(() => {
+    var {
+        type: typeFromProps
+      } = props,
+      rest = _objectWithoutProperties(props, _excluded);
+    var evaluatedType = getAxisTypeBasedOnLayout(layout, 'radiusAxis', typeFromProps);
+    if (evaluatedType == null) {
+      return undefined;
+    }
+    return _objectSpread(_objectSpread({}, rest), {}, {
+      type: evaluatedType
+    });
+  }, [props, layout]);
+  useEffect(() => {
+    if (settings == null) {
+      return noop;
+    }
+    dispatch(addRadiusAxis(settings));
+    return () => {
+      dispatch(removeRadiusAxis(settings));
+    };
+  }, [dispatch, settings]);
+  return null;
+}
+
+/**
+ * Calculate the coordinate of tick
+ * @param coordinate The radius of tick
+ * @param angle from props
+ * @param cx from chart
+ * @param cy from chart
+ * @return (x, y)
+ */
+var getTickValueCoord = (_ref, angle, cx, cy) => {
+  var {
+    coordinate
+  } = _ref;
+  return polarToCartesian(cx, cy, coordinate, angle);
+};
+var getTickTextAnchor = orientation => {
+  var textAnchor;
+  switch (orientation) {
+    case 'left':
+      textAnchor = 'end';
+      break;
+    case 'right':
+      textAnchor = 'start';
+      break;
+    default:
+      textAnchor = 'middle';
+      break;
+  }
+  return textAnchor;
+};
+var getViewBox = (angle, cx, cy, ticks) => {
+  var maxRadiusTick = maxBy(ticks, entry => entry.coordinate || 0);
+  var minRadiusTick = minBy(ticks, entry => entry.coordinate || 0);
+  return {
+    cx,
+    cy,
+    startAngle: angle,
+    endAngle: angle,
+    innerRadius: (minRadiusTick === null || minRadiusTick === void 0 ? void 0 : minRadiusTick.coordinate) || 0,
+    outerRadius: (maxRadiusTick === null || maxRadiusTick === void 0 ? void 0 : maxRadiusTick.coordinate) || 0,
+    clockWise: false
+  };
+};
+var renderAxisLine = (props, ticks) => {
+  var {
+      cx,
+      cy,
+      angle,
+      axisLine
+    } = props,
+    others = _objectWithoutProperties(props, _excluded2);
+  var extent = ticks.reduce((result, entry) => [Math.min(result[0], entry.coordinate), Math.max(result[1], entry.coordinate)], [Infinity, -Infinity]);
+  var point0 = polarToCartesian(cx, cy, extent[0], angle);
+  var point1 = polarToCartesian(cx, cy, extent[1], angle);
+  var axisLineProps = _objectSpread(_objectSpread(_objectSpread({}, svgPropertiesNoEvents(others)), {}, {
+    fill: 'none'
+  }, svgPropertiesNoEvents(axisLine)), {}, {
+    x1: point0.x,
+    y1: point0.y,
+    x2: point1.x,
+    y2: point1.y
+  });
+
+  // @ts-expect-error wrong SVG element type
+  return /*#__PURE__*/React.createElement("line", _extends({
+    className: "recharts-polar-radius-axis-line"
+  }, axisLineProps));
+};
+var renderTickItem = (option, tickProps, value) => {
+  var tickItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    tickItem = /*#__PURE__*/React.cloneElement(option, tickProps);
+  } else if (typeof option === 'function') {
+    tickItem = option(tickProps);
+  } else {
+    tickItem = /*#__PURE__*/React.createElement(Text, _extends({}, tickProps, {
+      className: "recharts-polar-radius-axis-tick-value"
+    }), value);
+  }
+  return tickItem;
+};
+var renderTicks = (props, ticks) => {
+  var {
+      angle,
+      tickFormatter,
+      stroke,
+      tick
+    } = props,
+    others = _objectWithoutProperties(props, _excluded3);
+  var textAnchor = getTickTextAnchor(props.orientation);
+  var axisProps = svgPropertiesNoEvents(others);
+  var customTickProps = svgPropertiesNoEventsFromUnknown(tick);
+  var items = ticks.map((entry, i) => {
+    var coord = getTickValueCoord(entry, props.angle, props.cx, props.cy);
+    var tickProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
+      textAnchor,
+      transform: "rotate(".concat(90 - angle, ", ").concat(coord.x, ", ").concat(coord.y, ")")
+    }, axisProps), {}, {
+      stroke: 'none',
+      fill: stroke
+    }, customTickProps), {}, {
+      index: i
+    }, coord), {}, {
+      payload: entry
+    });
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      className: clsx('recharts-polar-radius-axis-tick', getClassNameFromUnknown(tick)),
+      key: "tick-".concat(entry.coordinate)
+    }, adaptEventsOfChild(props, entry, i)), renderTickItem(tick, tickProps, tickFormatter ? tickFormatter(entry.value, i) : entry.value));
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-polar-radius-axis-ticks"
+  }, items);
+};
+export var PolarRadiusAxisWrapper = defaultsAndInputs => {
+  var {
+    radiusAxisId
+  } = defaultsAndInputs;
+  var viewBox = useAppSelector(selectPolarViewBox);
+  var scale = useAppSelector(state => selectPolarAxisScale(state, 'radiusAxis', radiusAxisId));
+  var ticks = useAppSelector(state => selectPolarAxisTicks(state, 'radiusAxis', radiusAxisId, false));
+  if (viewBox == null || !ticks || !ticks.length || scale == null) {
+    return null;
+  }
+  var props = _objectSpread(_objectSpread({}, defaultsAndInputs), {}, {
+    scale
+  }, viewBox);
+  var {
+    tick,
+    axisLine
+  } = props;
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-polar-radius-axis', AXIS_TYPE, props.className)
+  }, axisLine && renderAxisLine(props, ticks), tick && renderTicks(props, ticks), /*#__PURE__*/React.createElement(PolarLabelContextProvider, getViewBox(props.angle, props.cx, props.cy, ticks), /*#__PURE__*/React.createElement(PolarLabelFromLabelProp, {
+    label: props.label
+  }), props.children)));
+};
+
+/**
+ * @provides PolarLabelContext
+ * @consumes PolarViewBoxContext
+ */
+export function PolarRadiusAxis(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultPolarRadiusAxisProps);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetRadiusAxisSettings, {
+    domain: props.domain,
+    id: props.radiusAxisId,
+    scale: props.scale,
+    type: props.type,
+    dataKey: props.dataKey,
+    unit: undefined,
+    name: props.name,
+    allowDuplicatedCategory: props.allowDuplicatedCategory,
+    allowDataOverflow: props.allowDataOverflow,
+    reversed: props.reversed,
+    includeHidden: props.includeHidden,
+    allowDecimals: props.allowDecimals
+    // @ts-expect-error the type does not match. Is RadiusAxis really expecting what it says?
+    ,
+    ticks: props.ticks,
+    tickCount: props.tickCount,
+    tick: props.tick
+  }), /*#__PURE__*/React.createElement(PolarRadiusAxisWrapper, props));
+}
+PolarRadiusAxis.displayName = 'PolarRadiusAxis';
Index: node_modules/recharts/es6/polar/Radar.js
===================================================================
--- node_modules/recharts/es6/polar/Radar.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/polar/Radar.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,451 @@
+var _excluded = ["id"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { useCallback, useRef, useState } from 'react';
+import last from 'es-toolkit/compat/last';
+import { clsx } from 'clsx';
+import { interpolate, isNullish, noop } from '../util/DataUtils';
+import { polarToCartesian } from '../util/PolarUtils';
+import { getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
+import { Polygon } from '../shape/Polygon';
+import { Layer } from '../container/Layer';
+import { CartesianLabelListContextProvider, LabelListFromLabelProp } from '../component/LabelList';
+import { Dots } from '../component/Dots';
+import { ActivePoints } from '../component/ActivePoints';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { selectRadarPoints } from '../state/selectors/radarSelectors';
+import { useAppSelector } from '../state/hooks';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { SetPolarLegendPayload } from '../state/SetLegendPayload';
+import { useAnimationId } from '../util/useAnimationId';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetPolarGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+function getLegendItemColor(stroke, fill) {
+  return stroke && stroke !== 'none' ? stroke : fill;
+}
+var computeLegendPayloadFromRadarSectors = props => {
+  var {
+    dataKey,
+    name,
+    stroke,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: getLegendItemColor(stroke, fill),
+    value: getTooltipNameProp(name, dataKey),
+    payload: props
+  }];
+};
+var SetRadarTooltipEntrySettings = /*#__PURE__*/React.memo(_ref => {
+  var {
+    dataKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType,
+    id
+  } = _ref;
+  var tooltipEntrySettings = {
+    /*
+     * I suppose this here _could_ return props.points
+     * because while Radar does not support item tooltip mode, it _could_ support it.
+     * But when I actually do return the points here, a defaultIndex test starts failing.
+     * So, undefined it is.
+     */
+    dataDefinedOnItem: undefined,
+    getPosition: noop,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      nameKey: undefined,
+      // RadarChart does not have nameKey unfortunately
+      dataKey,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: getLegendItemColor(stroke, fill),
+      unit: '',
+      // why doesn't Radar support unit?
+      graphicalItemId: id
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+function RadarDotsWrapper(_ref2) {
+  var {
+    points,
+    props
+  } = _ref2;
+  var {
+    dot,
+    dataKey
+  } = props;
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded);
+  var baseProps = svgPropertiesNoEvents(propsWithoutId);
+  return /*#__PURE__*/React.createElement(Dots, {
+    points: points,
+    dot: dot,
+    className: "recharts-radar-dots",
+    dotClassName: "recharts-radar-dot",
+    dataKey: dataKey,
+    baseProps: baseProps
+  });
+}
+export function computeRadarPoints(_ref3) {
+  var {
+    radiusAxis,
+    angleAxis,
+    displayedData,
+    dataKey,
+    bandSize
+  } = _ref3;
+  var {
+    cx,
+    cy
+  } = angleAxis;
+  var isRange = false;
+  var points = [];
+  var angleBandSize = angleAxis.type !== 'number' ? bandSize !== null && bandSize !== void 0 ? bandSize : 0 : 0;
+  displayedData.forEach((entry, i) => {
+    var _angleAxis$scale$map, _radiusAxis$scale$map;
+    var name = getValueByDataKey(entry, angleAxis.dataKey, i);
+    var value = getValueByDataKey(entry, dataKey);
+    var angle = ((_angleAxis$scale$map = angleAxis.scale.map(name)) !== null && _angleAxis$scale$map !== void 0 ? _angleAxis$scale$map : 0) + angleBandSize;
+    var pointValue = Array.isArray(value) ? last(value) : value;
+    var radius = isNullish(pointValue) ? 0 : (_radiusAxis$scale$map = radiusAxis.scale.map(pointValue)) !== null && _radiusAxis$scale$map !== void 0 ? _radiusAxis$scale$map : 0;
+    if (Array.isArray(value) && value.length >= 2) {
+      isRange = true;
+    }
+    points.push(_objectSpread(_objectSpread({}, polarToCartesian(cx, cy, radius, angle)), {}, {
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      name,
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      value,
+      cx,
+      cy,
+      radius,
+      angle,
+      payload: entry
+    }));
+  });
+  var baseLinePoints = [];
+  if (isRange) {
+    points.forEach(point => {
+      if (Array.isArray(point.value)) {
+        var _radiusAxis$scale$map2;
+        var baseValue = point.value[0];
+        var radius = isNullish(baseValue) ? 0 : (_radiusAxis$scale$map2 = radiusAxis.scale.map(baseValue)) !== null && _radiusAxis$scale$map2 !== void 0 ? _radiusAxis$scale$map2 : 0;
+        baseLinePoints.push(_objectSpread(_objectSpread({}, point), {}, {
+          radius
+        }, polarToCartesian(cx, cy, radius, point.angle)));
+      } else {
+        baseLinePoints.push(point);
+      }
+    });
+  }
+  return {
+    points,
+    isRange,
+    baseLinePoints
+  };
+}
+function RadarLabelListProvider(_ref4) {
+  var {
+    showLabels,
+    points,
+    children
+  } = _ref4;
+  /*
+   * Radar provides a Cartesian label list context. Do we want to also provide a polar label list context?
+   * That way, users can choose to use polar positions for the Radar labels.
+   */
+  // const labelListEntries: ReadonlyArray<PolarLabelListEntry> = points.map(
+  //   (point): PolarLabelListEntry => ({
+  //     value: point.value,
+  //     payload: point.payload,
+  //     parentViewBox: undefined,
+  //     clockWise: false,
+  //     viewBox: {
+  //       cx: point.cx,
+  //       cy: point.cy,
+  //       innerRadius: point.radius,
+  //       outerRadius: point.radius,
+  //       startAngle: point.angle,
+  //       endAngle: point.angle,
+  //       clockWise: false,
+  //     },
+  //   }),
+  // );
+
+  var labelListEntries = points.map(point => {
+    var _point$value;
+    var viewBox = {
+      x: point.x,
+      y: point.y,
+      width: 0,
+      lowerWidth: 0,
+      upperWidth: 0,
+      height: 0
+    };
+    return _objectSpread(_objectSpread({}, viewBox), {}, {
+      value: (_point$value = point.value) !== null && _point$value !== void 0 ? _point$value : '',
+      payload: point.payload,
+      parentViewBox: undefined,
+      viewBox,
+      fill: undefined
+    });
+  });
+  return /*#__PURE__*/React.createElement(CartesianLabelListContextProvider, {
+    value: showLabels ? labelListEntries : undefined
+  }, children);
+}
+function StaticPolygon(_ref5) {
+  var {
+    points,
+    baseLinePoints,
+    props
+  } = _ref5;
+  if (points == null) {
+    return null;
+  }
+  var {
+    shape,
+    isRange,
+    connectNulls
+  } = props;
+  var handleMouseEnter = e => {
+    var {
+      onMouseEnter
+    } = props;
+    if (onMouseEnter) {
+      onMouseEnter(props, e);
+    }
+  };
+  var handleMouseLeave = e => {
+    var {
+      onMouseLeave
+    } = props;
+    if (onMouseLeave) {
+      onMouseLeave(props, e);
+    }
+  };
+  var radar;
+  if (/*#__PURE__*/React.isValidElement(shape)) {
+    radar = /*#__PURE__*/React.cloneElement(shape, _objectSpread(_objectSpread({}, props), {}, {
+      points
+    }));
+  } else if (typeof shape === 'function') {
+    radar = shape(_objectSpread(_objectSpread({}, props), {}, {
+      points
+    }));
+  } else {
+    radar = /*#__PURE__*/React.createElement(Polygon, _extends({}, svgPropertiesAndEvents(props), {
+      onMouseEnter: handleMouseEnter,
+      onMouseLeave: handleMouseLeave,
+      points: points,
+      baseLinePoints: isRange ? baseLinePoints : undefined,
+      connectNulls: connectNulls
+    }));
+  }
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-radar-polygon"
+  }, radar, /*#__PURE__*/React.createElement(RadarDotsWrapper, {
+    props: props,
+    points: points
+  }));
+}
+var interpolatePolarPoint = (prevPoints, prevPointsDiffFactor, t) => (entry, index) => {
+  var prev = prevPoints && prevPoints[Math.floor(index * prevPointsDiffFactor)];
+  if (prev) {
+    return _objectSpread(_objectSpread({}, entry), {}, {
+      x: interpolate(prev.x, entry.x, t),
+      y: interpolate(prev.y, entry.y, t)
+    });
+  }
+  return _objectSpread(_objectSpread({}, entry), {}, {
+    x: interpolate(entry.cx, entry.x, t),
+    y: interpolate(entry.cy, entry.y, t)
+  });
+};
+function PolygonWithAnimation(_ref6) {
+  var {
+    props,
+    previousPointsRef,
+    previousBaseLinePointsRef
+  } = _ref6;
+  var {
+    points,
+    baseLinePoints,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevPoints = previousPointsRef.current;
+  var prevBaseLinePoints = previousBaseLinePointsRef.current;
+  var prevPointsDiffFactor = prevPoints ? prevPoints.length / points.length : 1;
+  var prevBaseLinePointsDiffFactor = prevBaseLinePoints ? prevBaseLinePoints.length / baseLinePoints.length : 1;
+  var animationId = useAnimationId(props, 'recharts-radar-');
+  var [isAnimating, setIsAnimating] = useState(false);
+  var showLabels = !isAnimating;
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(RadarLabelListProvider, {
+    showLabels: showLabels,
+    points: points
+  }, /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    animationId: animationId,
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    key: "radar-".concat(animationId),
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart
+  }, t => {
+    var stepData = t === 1 ? points : points.map(interpolatePolarPoint(prevPoints, prevPointsDiffFactor, t));
+    var stepBaseLinePoints = t === 1 ? baseLinePoints : baseLinePoints === null || baseLinePoints === void 0 ? void 0 : baseLinePoints.map(interpolatePolarPoint(prevBaseLinePoints, prevBaseLinePointsDiffFactor, t));
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = stepData;
+      // eslint-disable-next-line no-param-reassign
+      previousBaseLinePointsRef.current = stepBaseLinePoints;
+    }
+    return /*#__PURE__*/React.createElement(StaticPolygon, {
+      points: stepData,
+      baseLinePoints: stepBaseLinePoints,
+      props: props
+    });
+  }), /*#__PURE__*/React.createElement(LabelListFromLabelProp, {
+    label: props.label
+  }), props.children);
+}
+function RenderPolygon(props) {
+  var previousPointsRef = useRef(undefined);
+  var previousBaseLinePointsRef = useRef(undefined);
+  return /*#__PURE__*/React.createElement(PolygonWithAnimation, {
+    props: props,
+    previousPointsRef: previousPointsRef,
+    previousBaseLinePointsRef: previousBaseLinePointsRef
+  });
+}
+export var defaultRadarProps = {
+  activeDot: true,
+  angleAxisId: 0,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  dot: false,
+  hide: false,
+  isAnimationActive: 'auto',
+  label: false,
+  legendType: 'rect',
+  radiusAxisId: 0,
+  zIndex: DefaultZIndexes.area
+};
+function RadarWithState(props) {
+  var {
+    hide,
+    className,
+    points
+  } = props;
+  if (hide) {
+    return null;
+  }
+  var layerClass = clsx('recharts-radar', className);
+  return /*#__PURE__*/React.createElement(ZIndexLayer, {
+    zIndex: props.zIndex
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: layerClass
+  }, /*#__PURE__*/React.createElement(RenderPolygon, props)), /*#__PURE__*/React.createElement(ActivePoints, {
+    points: points,
+    mainColor: getLegendItemColor(props.stroke, props.fill),
+    itemDataKey: props.dataKey,
+    activeDot: props.activeDot
+  }));
+}
+function RadarImpl(props) {
+  var isPanorama = useIsPanorama();
+  var radarPoints = useAppSelector(state => selectRadarPoints(state, props.radiusAxisId, props.angleAxisId, isPanorama, props.id));
+  if ((radarPoints === null || radarPoints === void 0 ? void 0 : radarPoints.points) == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(RadarWithState, _extends({}, props, {
+    points: radarPoints === null || radarPoints === void 0 ? void 0 : radarPoints.points,
+    baseLinePoints: radarPoints === null || radarPoints === void 0 ? void 0 : radarPoints.baseLinePoints,
+    isRange: radarPoints === null || radarPoints === void 0 ? void 0 : radarPoints.isRange
+  }));
+}
+
+/**
+ * @consumes PolarChartContext
+ * @provides LabelListContext
+ */
+export function Radar(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultRadarProps);
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: props.id,
+    type: "radar"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetPolarGraphicalItem, {
+    type: "radar",
+    id: id,
+    data: undefined // Radar does not have data prop, why?
+    ,
+    dataKey: props.dataKey,
+    hide: props.hide,
+    angleAxisId: props.angleAxisId,
+    radiusAxisId: props.radiusAxisId
+  }), /*#__PURE__*/React.createElement(SetPolarLegendPayload, {
+    legendPayload: computeLegendPayloadFromRadarSectors(props)
+  }), /*#__PURE__*/React.createElement(SetRadarTooltipEntrySettings, {
+    dataKey: props.dataKey,
+    stroke: props.stroke,
+    strokeWidth: props.strokeWidth,
+    fill: props.fill,
+    name: props.name,
+    hide: props.hide,
+    tooltipType: props.tooltipType,
+    id: id
+  }), /*#__PURE__*/React.createElement(RadarImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+Radar.displayName = 'Radar';
Index: node_modules/recharts/es6/polar/RadialBar.js
===================================================================
--- node_modules/recharts/es6/polar/RadialBar.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/polar/RadialBar.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,477 @@
+var _excluded = ["shape", "activeShape", "cornerRadius", "id"],
+  _excluded2 = ["onMouseEnter", "onClick", "onMouseLeave"],
+  _excluded3 = ["value", "background"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { PureComponent, useCallback, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { parseCornerRadius, RadialBarSector } from '../util/RadialBarUtils';
+import { Layer } from '../container/Layer';
+import { findAllByType } from '../util/ReactUtils';
+import { LabelListFromLabelProp, PolarLabelListContextProvider } from '../component/LabelList';
+import { Cell } from '../component/Cell';
+import { interpolate, mathSign, noop } from '../util/DataUtils';
+import { getCateCoordinateOfBar, getNormalizedStackId, getTooltipNameProp, getValueByDataKey, truncateByDomain } from '../util/ChartUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { useMouseClickItemDispatch, useMouseEnterItemDispatch, useMouseLeaveItemDispatch } from '../context/tooltipContext';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { selectRadialBarLegendPayload, selectRadialBarSectors } from '../state/selectors/radialBarSelectors';
+import { useAppSelector } from '../state/hooks';
+import { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';
+import { SetPolarLegendPayload } from '../state/SetLegendPayload';
+import { useAnimationId } from '../util/useAnimationId';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetPolarGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents, svgPropertiesNoEventsFromUnknown } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { ZIndexLayer } from '../zIndex/ZIndexLayer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+import { getZIndexFromUnknown } from '../zIndex/getZIndexFromUnknown';
+var STABLE_EMPTY_ARRAY = [];
+function RadialBarLabelListProvider(_ref) {
+  var {
+    showLabels,
+    sectors,
+    children
+  } = _ref;
+  var labelListEntries = sectors.map(sector => ({
+    value: sector.value,
+    payload: sector.payload,
+    parentViewBox: undefined,
+    clockWise: false,
+    viewBox: {
+      cx: sector.cx,
+      cy: sector.cy,
+      innerRadius: sector.innerRadius,
+      outerRadius: sector.outerRadius,
+      startAngle: sector.startAngle,
+      endAngle: sector.endAngle,
+      clockWise: false
+    },
+    fill: sector.fill
+  }));
+  return /*#__PURE__*/React.createElement(PolarLabelListContextProvider, {
+    value: showLabels ? labelListEntries : undefined
+  }, children);
+}
+function RadialBarSectors(_ref2) {
+  var {
+    sectors,
+    allOtherRadialBarProps,
+    showLabels
+  } = _ref2;
+  var {
+      shape,
+      activeShape,
+      cornerRadius,
+      id
+    } = allOtherRadialBarProps,
+    others = _objectWithoutProperties(allOtherRadialBarProps, _excluded);
+  var baseProps = svgPropertiesNoEvents(others);
+  var activeIndex = useAppSelector(selectActiveTooltipIndex);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = allOtherRadialBarProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherRadialBarProps, _excluded2);
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherRadialBarProps.dataKey, id);
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherRadialBarProps.dataKey, id);
+  if (sectors == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(RadialBarLabelListProvider, {
+    showLabels: showLabels,
+    sectors: sectors
+  }, sectors.map((entry, i) => {
+    var isActive = activeShape && activeIndex === String(i);
+    // @ts-expect-error the types need a bit of attention
+    var onMouseEnter = onMouseEnterFromContext(entry, i);
+    // @ts-expect-error the types need a bit of attention
+    var onMouseLeave = onMouseLeaveFromContext(entry, i);
+    // @ts-expect-error the types need a bit of attention
+    var onClick = onClickFromContext(entry, i);
+    var radialBarSectorProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, baseProps), {}, {
+      cornerRadius: parseCornerRadius(cornerRadius)
+    }, entry), adaptEventsOfChild(restOfAllOtherProps, entry, i)), {}, {
+      onMouseEnter,
+      onMouseLeave,
+      onClick,
+      className: "recharts-radial-bar-sector ".concat(entry.className),
+      forceCornerRadius: others.forceCornerRadius,
+      cornerIsExternal: others.cornerIsExternal,
+      isActive,
+      option: isActive ? activeShape : shape
+    });
+    if (isActive) {
+      return /*#__PURE__*/React.createElement(ZIndexLayer, {
+        zIndex: DefaultZIndexes.activeBar,
+        key: "sector-".concat(entry.cx, "-").concat(entry.cy, "-").concat(entry.innerRadius, "-").concat(entry.outerRadius, "-").concat(entry.startAngle, "-").concat(entry.endAngle, "-").concat(i)
+      }, /*#__PURE__*/React.createElement(RadialBarSector, radialBarSectorProps));
+    }
+    return /*#__PURE__*/React.createElement(RadialBarSector, _extends({
+      key: "sector-".concat(entry.cx, "-").concat(entry.cy, "-").concat(entry.innerRadius, "-").concat(entry.outerRadius, "-").concat(entry.startAngle, "-").concat(entry.endAngle, "-").concat(i)
+    }, radialBarSectorProps));
+  }), /*#__PURE__*/React.createElement(LabelListFromLabelProp, {
+    label: allOtherRadialBarProps.label
+  }), allOtherRadialBarProps.children);
+}
+function SectorsWithAnimation(_ref3) {
+  var {
+    props,
+    previousSectorsRef
+  } = _ref3;
+  var {
+    sectors,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var animationId = useAnimationId(props, 'recharts-radialbar-');
+  var prevData = previousSectorsRef.current;
+  var [isAnimating, setIsAnimating] = useState(false);
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    animationId: animationId,
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationStart: handleAnimationStart,
+    onAnimationEnd: handleAnimationEnd,
+    key: animationId
+  }, t => {
+    var stepData = t === 1 ? sectors : (sectors !== null && sectors !== void 0 ? sectors : STABLE_EMPTY_ARRAY).map((entry, index) => {
+      var prev = prevData && prevData[index];
+      if (prev) {
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          startAngle: interpolate(prev.startAngle, entry.startAngle, t),
+          endAngle: interpolate(prev.endAngle, entry.endAngle, t)
+        });
+      }
+      var {
+        endAngle,
+        startAngle
+      } = entry;
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        endAngle: interpolate(startAngle, endAngle, t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousSectorsRef.current = stepData !== null && stepData !== void 0 ? stepData : null;
+    }
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(RadialBarSectors, {
+      sectors: stepData !== null && stepData !== void 0 ? stepData : STABLE_EMPTY_ARRAY,
+      allOtherRadialBarProps: props,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderSectors(props) {
+  var previousSectorsRef = useRef(null);
+  return /*#__PURE__*/React.createElement(SectorsWithAnimation, {
+    props: props,
+    previousSectorsRef: previousSectorsRef
+  });
+}
+function SetRadialBarPayloadLegend(props) {
+  var legendPayload = useAppSelector(state => selectRadialBarLegendPayload(state, props.legendType));
+  return /*#__PURE__*/React.createElement(SetPolarLegendPayload, {
+    legendPayload: legendPayload !== null && legendPayload !== void 0 ? legendPayload : []
+  });
+}
+var SetRadialBarTooltipEntrySettings = /*#__PURE__*/React.memo(_ref4 => {
+  var {
+    dataKey,
+    sectors,
+    stroke,
+    strokeWidth,
+    name,
+    hide,
+    fill,
+    tooltipType,
+    id
+  } = _ref4;
+  var tooltipEntrySettings = {
+    dataDefinedOnItem: sectors,
+    getPosition: noop,
+    settings: {
+      graphicalItemId: id,
+      stroke,
+      strokeWidth,
+      fill,
+      nameKey: undefined,
+      // RadialBar does not have nameKey, why?
+      dataKey,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '' // Why does RadialBar not support unit?
+    }
+  };
+  return /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    tooltipEntrySettings: tooltipEntrySettings
+  });
+});
+class RadialBarWithState extends PureComponent {
+  renderBackground(sectors) {
+    if (sectors == null) {
+      return null;
+    }
+    var {
+      cornerRadius
+    } = this.props;
+    var backgroundProps = svgPropertiesNoEventsFromUnknown(this.props.background);
+    return /*#__PURE__*/React.createElement(ZIndexLayer, {
+      zIndex: getZIndexFromUnknown(this.props.background, DefaultZIndexes.barBackground)
+    }, sectors.map((entry, i) => {
+      var {
+          value,
+          background
+        } = entry,
+        rest = _objectWithoutProperties(entry, _excluded3);
+      if (!background) {
+        return null;
+      }
+      var props = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
+        cornerRadius: parseCornerRadius(cornerRadius)
+      }, rest), {}, {
+        // @ts-expect-error backgroundProps is contributing unknown props
+        fill: '#eee'
+      }, background), backgroundProps), adaptEventsOfChild(this.props, entry, i)), {}, {
+        index: i,
+        className: clsx('recharts-radial-bar-background-sector', String(backgroundProps === null || backgroundProps === void 0 ? void 0 : backgroundProps.className)),
+        option: background,
+        isActive: false
+      });
+      return /*#__PURE__*/React.createElement(RadialBarSector, _extends({
+        key: "background-".concat(rest.cx, "-").concat(rest.cy, "-").concat(rest.innerRadius, "-").concat(rest.outerRadius, "-").concat(rest.startAngle, "-").concat(rest.endAngle, "-").concat(i)
+      }, props));
+    }));
+  }
+  render() {
+    var {
+      hide,
+      sectors,
+      className,
+      background
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = clsx('recharts-area', className);
+    return /*#__PURE__*/React.createElement(ZIndexLayer, {
+      zIndex: this.props.zIndex
+    }, /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass
+    }, background && /*#__PURE__*/React.createElement(Layer, {
+      className: "recharts-radial-bar-background"
+    }, this.renderBackground(sectors)), /*#__PURE__*/React.createElement(Layer, {
+      className: "recharts-radial-bar-sectors"
+    }, /*#__PURE__*/React.createElement(RenderSectors, this.props))));
+  }
+}
+function RadialBarImpl(props) {
+  var _useAppSelector;
+  var cells = findAllByType(props.children, Cell);
+  var radialBarSettings = {
+    data: undefined,
+    hide: false,
+    id: props.id,
+    dataKey: props.dataKey,
+    minPointSize: props.minPointSize,
+    stackId: getNormalizedStackId(props.stackId),
+    maxBarSize: props.maxBarSize,
+    barSize: props.barSize,
+    type: 'radialBar',
+    angleAxisId: props.angleAxisId,
+    radiusAxisId: props.radiusAxisId
+  };
+  var sectors = (_useAppSelector = useAppSelector(state => selectRadialBarSectors(state, props.radiusAxisId, props.angleAxisId, radialBarSettings, cells))) !== null && _useAppSelector !== void 0 ? _useAppSelector : STABLE_EMPTY_ARRAY;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetRadialBarTooltipEntrySettings, {
+    dataKey: props.dataKey,
+    sectors: sectors,
+    stroke: props.stroke,
+    strokeWidth: props.strokeWidth,
+    name: props.name,
+    hide: props.hide,
+    fill: props.fill,
+    tooltipType: props.tooltipType,
+    id: props.id
+  }), /*#__PURE__*/React.createElement(RadialBarWithState, _extends({}, props, {
+    sectors: sectors
+  })));
+}
+export var defaultRadialBarProps = {
+  angleAxisId: 0,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  background: false,
+  cornerIsExternal: false,
+  cornerRadius: 0,
+  forceCornerRadius: false,
+  hide: false,
+  isAnimationActive: 'auto',
+  label: false,
+  legendType: 'rect',
+  minPointSize: 0,
+  radiusAxisId: 0,
+  zIndex: DefaultZIndexes.bar
+};
+export function computeRadialBarDataItems(_ref5) {
+  var {
+    displayedData,
+    stackedData,
+    dataStartIndex,
+    stackedDomain,
+    dataKey,
+    baseValue,
+    layout,
+    radiusAxis,
+    radiusAxisTicks,
+    bandSize,
+    pos,
+    angleAxis,
+    minPointSize,
+    cx,
+    cy,
+    angleAxisTicks,
+    cells,
+    startAngle: rootStartAngle,
+    endAngle: rootEndAngle
+  } = _ref5;
+  if (angleAxisTicks == null || radiusAxisTicks == null) {
+    return STABLE_EMPTY_ARRAY;
+  }
+  return (displayedData !== null && displayedData !== void 0 ? displayedData : []).map((entry, index) => {
+    var value, innerRadius, outerRadius, startAngle, endAngle, backgroundSector;
+    if (stackedData) {
+      // @ts-expect-error truncateByDomain expects only numerical domain, but it can received categorical domain too
+      value = truncateByDomain(stackedData[dataStartIndex + index], stackedDomain);
+    } else {
+      value = getValueByDataKey(entry, dataKey);
+      if (!Array.isArray(value)) {
+        value = [baseValue, value];
+      }
+    }
+    if (layout === 'radial') {
+      var _angleAxis$scale$map, _angleAxis$scale$map2;
+      startAngle = (_angleAxis$scale$map = angleAxis.scale.map(value[0])) !== null && _angleAxis$scale$map !== void 0 ? _angleAxis$scale$map : rootStartAngle;
+      endAngle = (_angleAxis$scale$map2 = angleAxis.scale.map(value[1])) !== null && _angleAxis$scale$map2 !== void 0 ? _angleAxis$scale$map2 : rootEndAngle;
+      innerRadius = getCateCoordinateOfBar({
+        axis: radiusAxis,
+        ticks: radiusAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      if (innerRadius != null && endAngle != null && startAngle != null) {
+        outerRadius = innerRadius + pos.size;
+        var deltaAngle = endAngle - startAngle;
+        if (Math.abs(minPointSize) > 0 && Math.abs(deltaAngle) < Math.abs(minPointSize)) {
+          var delta = mathSign(deltaAngle || minPointSize) * (Math.abs(minPointSize) - Math.abs(deltaAngle));
+          endAngle += delta;
+        }
+        backgroundSector = {
+          background: {
+            cx,
+            cy,
+            innerRadius,
+            outerRadius,
+            startAngle: rootStartAngle,
+            endAngle: rootEndAngle
+          }
+        };
+      }
+    } else {
+      innerRadius = radiusAxis.scale.map(value[0]);
+      outerRadius = radiusAxis.scale.map(value[1]);
+      startAngle = getCateCoordinateOfBar({
+        axis: angleAxis,
+        ticks: angleAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      if (innerRadius != null && outerRadius != null && startAngle != null) {
+        endAngle = startAngle + pos.size;
+        var deltaRadius = outerRadius - innerRadius;
+        if (Math.abs(minPointSize) > 0 && Math.abs(deltaRadius) < Math.abs(minPointSize)) {
+          var _delta = mathSign(deltaRadius || minPointSize) * (Math.abs(minPointSize) - Math.abs(deltaRadius));
+          outerRadius += _delta;
+        }
+      }
+    }
+    return _objectSpread(_objectSpread(_objectSpread({}, entry), backgroundSector), {}, {
+      payload: entry,
+      value: stackedData ? value : value[1],
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      startAngle,
+      // @ts-expect-error endAngle is used before assigned (?)
+      endAngle
+    }, cells && cells[index] && cells[index].props);
+  });
+}
+
+/**
+ * @consumes PolarChartContext
+ * @provides LabelListContext
+ * @provides CellReader
+ */
+export function RadialBar(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultRadialBarProps);
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: props.id,
+    type: "radialBar"
+  }, id => {
+    var _props$hide, _props$angleAxisId, _props$radiusAxisId;
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetPolarGraphicalItem, {
+      type: "radialBar",
+      id: id,
+      data: undefined // why does RadialBar not allow data defined on the item?
+      ,
+      dataKey: props.dataKey,
+      hide: (_props$hide = props.hide) !== null && _props$hide !== void 0 ? _props$hide : defaultRadialBarProps.hide,
+      angleAxisId: (_props$angleAxisId = props.angleAxisId) !== null && _props$angleAxisId !== void 0 ? _props$angleAxisId : defaultRadialBarProps.angleAxisId,
+      radiusAxisId: (_props$radiusAxisId = props.radiusAxisId) !== null && _props$radiusAxisId !== void 0 ? _props$radiusAxisId : defaultRadialBarProps.radiusAxisId,
+      stackId: getNormalizedStackId(props.stackId),
+      barSize: props.barSize,
+      minPointSize: props.minPointSize,
+      maxBarSize: props.maxBarSize
+    }), /*#__PURE__*/React.createElement(SetRadialBarPayloadLegend, props), /*#__PURE__*/React.createElement(RadialBarImpl, _extends({}, props, {
+      id: id
+    })));
+  });
+}
+RadialBar.displayName = 'RadialBar';
Index: node_modules/recharts/es6/polar/defaultPolarAngleAxisProps.js
===================================================================
--- node_modules/recharts/es6/polar/defaultPolarAngleAxisProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/polar/defaultPolarAngleAxisProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,24 @@
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+export var defaultPolarAngleAxisProps = {
+  allowDecimals: false,
+  allowDuplicatedCategory: true,
+  // if I set this to false then Tooltip synchronisation stops working in Radar, wtf
+  allowDataOverflow: false,
+  angle: 0,
+  angleAxisId: 0,
+  axisLine: true,
+  axisLineType: 'polygon',
+  cx: 0,
+  cy: 0,
+  hide: false,
+  includeHidden: false,
+  label: false,
+  orientation: 'outer',
+  reversed: false,
+  scale: 'auto',
+  tick: true,
+  tickLine: true,
+  tickSize: 8,
+  type: 'auto',
+  zIndex: DefaultZIndexes.axis
+};
Index: node_modules/recharts/es6/polar/defaultPolarRadiusAxisProps.js
===================================================================
--- node_modules/recharts/es6/polar/defaultPolarRadiusAxisProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/polar/defaultPolarRadiusAxisProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+export var defaultPolarRadiusAxisProps = {
+  allowDataOverflow: false,
+  allowDecimals: false,
+  allowDuplicatedCategory: true,
+  angle: 0,
+  axisLine: true,
+  includeHidden: false,
+  hide: false,
+  label: false,
+  orientation: 'right',
+  radiusAxisId: 0,
+  reversed: false,
+  scale: 'auto',
+  stroke: '#ccc',
+  tick: true,
+  tickCount: 5,
+  tickLine: true,
+  type: 'auto',
+  zIndex: DefaultZIndexes.axis
+};
Index: node_modules/recharts/es6/shape/Cross.js
===================================================================
--- node_modules/recharts/es6/shape/Cross.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/shape/Cross.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,46 @@
+var _excluded = ["x", "y", "top", "left", "width", "height", "className"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview Cross
+ */
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { isNumber } from '../util/DataUtils';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+var getPath = (x, y, width, height, top, left) => {
+  return "M".concat(x, ",").concat(top, "v").concat(height, "M").concat(left, ",").concat(y, "h").concat(width);
+};
+export var Cross = _ref => {
+  var {
+      x = 0,
+      y = 0,
+      top = 0,
+      left = 0,
+      width = 0,
+      height = 0,
+      className
+    } = _ref,
+    rest = _objectWithoutProperties(_ref, _excluded);
+  var props = _objectSpread({
+    x,
+    y,
+    top,
+    left,
+    width,
+    height
+  }, rest);
+  if (!isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || !isNumber(top) || !isNumber(left)) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement("path", _extends({}, svgPropertiesAndEvents(props), {
+    className: clsx('recharts-cross', className),
+    d: getPath(x, y, width, height, top, left)
+  }));
+};
Index: node_modules/recharts/es6/shape/Curve.js
===================================================================
--- node_modules/recharts/es6/shape/Curve.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/shape/Curve.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,143 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * @fileOverview Curve
+ */
+import * as React from 'react';
+import { line as shapeLine, area as shapeArea, curveBasisClosed, curveBasisOpen, curveBasis, curveBumpX, curveBumpY, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore } from 'victory-vendor/d3-shape';
+import { clsx } from 'clsx';
+import { adaptEventHandlers } from '../util/types';
+import { isNumber, upperFirst } from '../util/DataUtils';
+import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { useChartLayout } from '../context/chartLayoutContext';
+var CURVE_FACTORIES = {
+  curveBasisClosed,
+  curveBasisOpen,
+  curveBasis,
+  curveBumpX,
+  curveBumpY,
+  curveLinearClosed,
+  curveLinear,
+  curveMonotoneX,
+  curveMonotoneY,
+  curveNatural,
+  curveStep,
+  curveStepAfter,
+  curveStepBefore
+};
+
+/**
+ * @inline
+ */
+
+var defined = p => isWellBehavedNumber(p.x) && isWellBehavedNumber(p.y);
+var areaDefined = d => d.base != null && defined(d.base) && defined(d);
+var getX = p => p.x;
+var getY = p => p.y;
+var getCurveFactory = (type, layout) => {
+  if (typeof type === 'function') {
+    return type;
+  }
+  var name = "curve".concat(upperFirst(type));
+  if ((name === 'curveMonotone' || name === 'curveBump') && layout) {
+    var factory = CURVE_FACTORIES["".concat(name).concat(layout === 'vertical' ? 'Y' : 'X')];
+    if (factory) {
+      return factory;
+    }
+  }
+  return CURVE_FACTORIES[name] || curveLinear;
+};
+
+// Mouse event handlers receive the full Props, including the event handlers themselves.
+
+export var defaultCurveProps = {
+  connectNulls: false,
+  type: 'linear'
+};
+
+/**
+ * Calculate the path of curve. Returns null if points is an empty array.
+ * @return path or null
+ */
+export var getPath = _ref => {
+  var {
+    type = defaultCurveProps.type,
+    points = [],
+    baseLine,
+    layout,
+    connectNulls = defaultCurveProps.connectNulls
+  } = _ref;
+  var curveFactory = getCurveFactory(type, layout);
+  var formatPoints = connectNulls ? points.filter(defined) : points;
+
+  // When dealing with an area chart (where `baseLine` is an array),
+  // we need to pair points with their corresponding `baseLine` points first.
+  // This is to ensure that we filter points and their baseline counterparts together,
+  // preventing errors from mismatched array lengths and ensuring `defined` checks both.
+  if (Array.isArray(baseLine)) {
+    var _lineFunction;
+    var areaPoints = points.map((entry, index) => _objectSpread(_objectSpread({}, entry), {}, {
+      base: baseLine[index]
+    }));
+    if (layout === 'vertical') {
+      _lineFunction = shapeArea().y(getY).x1(getX).x0(d => d.base.x);
+    } else {
+      _lineFunction = shapeArea().x(getX).y1(getY).y0(d => d.base.y);
+    }
+    /*
+     * What happens here is that the `.defined()` call will make it so that this function can accept
+     * nullable points, and internally it will filter them out and skip when generating the path.
+     * So on the input it accepts NullableCoordinate, but it never calls getX/getY on null points because of the defined() filter.
+     *
+     * The d3 type definition has only one generic so it doesn't allow to describe this properly.
+     * However. d3 types are mutable, but we can pretend that they are not, and we can pretend
+     * that calling defined() returns a new function with a different generic type.
+     */
+    // @ts-expect-error the defined call changes the generic type internally but d3 types don't reflect that
+    var _nullableLineFunction = _lineFunction.defined(areaDefined).curve(curveFactory);
+    var finalPoints = connectNulls ? areaPoints.filter(areaDefined) : areaPoints;
+    return _nullableLineFunction(finalPoints);
+  }
+  var lineFunction;
+  if (layout === 'vertical' && isNumber(baseLine)) {
+    lineFunction = shapeArea().y(getY).x1(getX).x0(baseLine);
+  } else if (isNumber(baseLine)) {
+    lineFunction = shapeArea().x(getX).y1(getY).y0(baseLine);
+  } else {
+    lineFunction = shapeLine().x(getX).y(getY);
+  }
+
+  // @ts-expect-error the defined call changes the generic type internally but d3 types don't reflect that
+  var nullableLineFunction = lineFunction.defined(defined).curve(curveFactory);
+  return nullableLineFunction(formatPoints);
+};
+export var Curve = props => {
+  var {
+    className,
+    points,
+    path,
+    pathRef
+  } = props;
+  var layout = useChartLayout();
+  if ((!points || !points.length) && !path) {
+    return null;
+  }
+  var getPathInput = {
+    type: props.type,
+    points: props.points,
+    baseLine: props.baseLine,
+    layout: props.layout || layout,
+    connectNulls: props.connectNulls
+  };
+  var realPath = points && points.length ? getPath(getPathInput) : path;
+  return /*#__PURE__*/React.createElement("path", _extends({}, svgPropertiesNoEvents(props), adaptEventHandlers(props), {
+    className: clsx('recharts-curve', className),
+    d: realPath === null ? undefined : realPath,
+    ref: pathRef
+  }));
+};
Index: node_modules/recharts/es6/shape/Dot.js
===================================================================
--- node_modules/recharts/es6/shape/Dot.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/shape/Dot.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,34 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { adaptEventHandlers } from '../util/types';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { isNumber } from '../util/DataUtils';
+/**
+ * Renders a dot in the chart.
+ *
+ * This component accepts X and Y coordinates in pixels.
+ * If you need to position the rectangle based on your chart's data,
+ * consider using the {@link ReferenceDot} component instead.
+ *
+ * @param props
+ * @constructor
+ */
+export var Dot = props => {
+  var {
+    cx,
+    cy,
+    r,
+    className
+  } = props;
+  var layerClass = clsx('recharts-dot', className);
+  if (isNumber(cx) && isNumber(cy) && isNumber(r)) {
+    return /*#__PURE__*/React.createElement("circle", _extends({}, svgPropertiesNoEvents(props), adaptEventHandlers(props), {
+      className: layerClass,
+      cx: cx,
+      cy: cy,
+      r: r
+    }));
+  }
+  return null;
+};
Index: node_modules/recharts/es6/shape/Polygon.js
===================================================================
--- node_modules/recharts/es6/shape/Polygon.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/shape/Polygon.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,95 @@
+var _excluded = ["points", "className", "baseLinePoints", "connectNulls"];
+var _templateObject;
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
+/**
+ * @fileOverview Polygon
+ */
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { roundTemplateLiteral } from '../util/round';
+var isValidatePoint = point => {
+  return point != null && point.x === +point.x && point.y === +point.y;
+};
+var getParsedPoints = function getParsedPoints() {
+  var points = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+  var segmentPoints = [[]];
+  points.forEach(entry => {
+    var lastLink = segmentPoints[segmentPoints.length - 1];
+    if (isValidatePoint(entry)) {
+      if (lastLink) {
+        lastLink.push(entry);
+      }
+    } else if (lastLink && lastLink.length > 0) {
+      // add another path
+      segmentPoints.push([]);
+    }
+  });
+  var firstPoint = points[0];
+  var lastLink = segmentPoints[segmentPoints.length - 1];
+  if (isValidatePoint(firstPoint) && lastLink) {
+    lastLink.push(firstPoint);
+  }
+  var finalLink = segmentPoints[segmentPoints.length - 1];
+  if (finalLink && finalLink.length <= 0) {
+    segmentPoints = segmentPoints.slice(0, -1);
+  }
+  return segmentPoints;
+};
+var getSinglePolygonPath = (points, connectNulls) => {
+  var segmentPoints = getParsedPoints(points);
+  if (connectNulls) {
+    segmentPoints = [segmentPoints.reduce((res, segPoints) => {
+      return [...res, ...segPoints];
+    }, [])];
+  }
+  var polygonPath = segmentPoints.map(segPoints => {
+    return segPoints.reduce((path, point, index) => {
+      return roundTemplateLiteral(_templateObject || (_templateObject = _taggedTemplateLiteral(["", "", "", ",", ""])), path, index === 0 ? 'M' : 'L', point.x, point.y);
+    }, '');
+  }).join('');
+  return segmentPoints.length === 1 ? "".concat(polygonPath, "Z") : polygonPath;
+};
+var getRanglePath = (points, baseLinePoints, connectNulls) => {
+  var outerPath = getSinglePolygonPath(points, connectNulls);
+  return "".concat(outerPath.slice(-1) === 'Z' ? outerPath.slice(0, -1) : outerPath, "L").concat(getSinglePolygonPath(Array.from(baseLinePoints).reverse(), connectNulls).slice(1));
+};
+export var Polygon = props => {
+  var {
+      points,
+      className,
+      baseLinePoints,
+      connectNulls
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  if (!points || !points.length) {
+    return null;
+  }
+  var layerClass = clsx('recharts-polygon', className);
+  if (baseLinePoints && baseLinePoints.length) {
+    var hasStroke = others.stroke && others.stroke !== 'none';
+    var rangePath = getRanglePath(points, baseLinePoints, connectNulls);
+    return /*#__PURE__*/React.createElement("g", {
+      className: layerClass
+    }, /*#__PURE__*/React.createElement("path", _extends({}, svgPropertiesAndEvents(others), {
+      fill: rangePath.slice(-1) === 'Z' ? others.fill : 'none',
+      stroke: "none",
+      d: rangePath
+    })), hasStroke ? /*#__PURE__*/React.createElement("path", _extends({}, svgPropertiesAndEvents(others), {
+      fill: "none",
+      d: getSinglePolygonPath(points, connectNulls)
+    })) : null, hasStroke ? /*#__PURE__*/React.createElement("path", _extends({}, svgPropertiesAndEvents(others), {
+      fill: "none",
+      d: getSinglePolygonPath(baseLinePoints, connectNulls)
+    })) : null);
+  }
+  var singlePath = getSinglePolygonPath(points, connectNulls);
+  return /*#__PURE__*/React.createElement("path", _extends({}, svgPropertiesAndEvents(others), {
+    fill: singlePath.slice(-1) === 'Z' ? others.fill : 'none',
+    className: layerClass,
+    d: singlePath
+  }));
+};
Index: node_modules/recharts/es6/shape/Rectangle.js
===================================================================
--- node_modules/recharts/es6/shape/Rectangle.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/shape/Rectangle.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,212 @@
+var _excluded = ["radius"],
+  _excluded2 = ["radius"];
+var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject0;
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
+/**
+ * @fileOverview Rectangle
+ */
+import * as React from 'react';
+import { useEffect, useMemo, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+import { interpolate } from '../util/DataUtils';
+import { useAnimationId } from '../util/useAnimationId';
+import { getTransitionVal } from '../animation/util';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { round, roundTemplateLiteral } from '../util/round';
+
+/**
+ * @inline
+ */
+
+var getRectanglePath = (x, y, width, height, radius) => {
+  var roundedWidth = round(width);
+  var roundedHeight = round(height);
+  var maxRadius = Math.min(Math.abs(roundedWidth) / 2, Math.abs(roundedHeight) / 2);
+  var ySign = roundedHeight >= 0 ? 1 : -1;
+  var xSign = roundedWidth >= 0 ? 1 : -1;
+  var clockWise = roundedHeight >= 0 && roundedWidth >= 0 || roundedHeight < 0 && roundedWidth < 0 ? 1 : 0;
+  var path;
+  if (maxRadius > 0 && Array.isArray(radius)) {
+    var newRadius = [0, 0, 0, 0];
+    for (var i = 0, len = 4; i < len; i++) {
+      var _radius$i;
+      var r = (_radius$i = radius[i]) !== null && _radius$i !== void 0 ? _radius$i : 0;
+      newRadius[i] = r > maxRadius ? maxRadius : r;
+    }
+    path = roundTemplateLiteral(_templateObject || (_templateObject = _taggedTemplateLiteral(["M", ",", ""])), x, y + ySign * newRadius[0]);
+    if (newRadius[0] > 0) {
+      path += roundTemplateLiteral(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["A ", ",", ",0,0,", ",", ",", ""])), newRadius[0], newRadius[0], clockWise, x + xSign * newRadius[0], y);
+    }
+    path += roundTemplateLiteral(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["L ", ",", ""])), x + width - xSign * newRadius[1], y);
+    if (newRadius[1] > 0) {
+      path += roundTemplateLiteral(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["A ", ",", ",0,0,", ",\n        ", ",", ""])), newRadius[1], newRadius[1], clockWise, x + width, y + ySign * newRadius[1]);
+    }
+    path += roundTemplateLiteral(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["L ", ",", ""])), x + width, y + height - ySign * newRadius[2]);
+    if (newRadius[2] > 0) {
+      path += roundTemplateLiteral(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["A ", ",", ",0,0,", ",\n        ", ",", ""])), newRadius[2], newRadius[2], clockWise, x + width - xSign * newRadius[2], y + height);
+    }
+    path += roundTemplateLiteral(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["L ", ",", ""])), x + xSign * newRadius[3], y + height);
+    if (newRadius[3] > 0) {
+      path += roundTemplateLiteral(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["A ", ",", ",0,0,", ",\n        ", ",", ""])), newRadius[3], newRadius[3], clockWise, x, y + height - ySign * newRadius[3]);
+    }
+    path += 'Z';
+  } else if (maxRadius > 0 && radius === +radius && radius > 0) {
+    var _newRadius = Math.min(maxRadius, radius);
+    path = roundTemplateLiteral(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["M ", ",", "\n            A ", ",", ",0,0,", ",", ",", "\n            L ", ",", "\n            A ", ",", ",0,0,", ",", ",", "\n            L ", ",", "\n            A ", ",", ",0,0,", ",", ",", "\n            L ", ",", "\n            A ", ",", ",0,0,", ",", ",", " Z"])), x, y + ySign * _newRadius, _newRadius, _newRadius, clockWise, x + xSign * _newRadius, y, x + width - xSign * _newRadius, y, _newRadius, _newRadius, clockWise, x + width, y + ySign * _newRadius, x + width, y + height - ySign * _newRadius, _newRadius, _newRadius, clockWise, x + width - xSign * _newRadius, y + height, x + xSign * _newRadius, y + height, _newRadius, _newRadius, clockWise, x, y + height - ySign * _newRadius);
+  } else {
+    path = roundTemplateLiteral(_templateObject0 || (_templateObject0 = _taggedTemplateLiteral(["M ", ",", " h ", " v ", " h ", " Z"])), x, y, width, height, -width);
+  }
+  return path;
+};
+export var defaultRectangleProps = {
+  x: 0,
+  y: 0,
+  width: 0,
+  height: 0,
+  radius: 0,
+  isAnimationActive: false,
+  isUpdateAnimationActive: false,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease'
+};
+
+/**
+ * Renders a rectangle element. Unlike the {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/rect rect SVG element}, this component supports rounded corners
+ * and animation.
+ *
+ * This component accepts X and Y coordinates in pixels.
+ * If you need to position the rectangle based on your chart's data,
+ * consider using the {@link ReferenceArea} component instead.
+ *
+ * @param rectangleProps
+ * @constructor
+ */
+export var Rectangle = rectangleProps => {
+  var props = resolveDefaultProps(rectangleProps, defaultRectangleProps);
+  var pathRef = useRef(null);
+  var [totalLength, setTotalLength] = useState(-1);
+  useEffect(() => {
+    if (pathRef.current && pathRef.current.getTotalLength) {
+      try {
+        var pathTotalLength = pathRef.current.getTotalLength();
+        if (pathTotalLength) {
+          setTotalLength(pathTotalLength);
+        }
+      } catch (_unused) {
+        // calculate total length error
+      }
+    }
+  }, []);
+  var {
+    x,
+    y,
+    width,
+    height,
+    radius,
+    className
+  } = props;
+  var {
+    animationEasing,
+    animationDuration,
+    animationBegin,
+    isAnimationActive,
+    isUpdateAnimationActive
+  } = props;
+  var prevWidthRef = useRef(width);
+  var prevHeightRef = useRef(height);
+  var prevXRef = useRef(x);
+  var prevYRef = useRef(y);
+  var animationIdInput = useMemo(() => ({
+    x,
+    y,
+    width,
+    height,
+    radius
+  }), [x, y, width, height, radius]);
+  var animationId = useAnimationId(animationIdInput, 'rectangle-');
+  if (x !== +x || y !== +y || width !== +width || height !== +height || width === 0 || height === 0) {
+    return null;
+  }
+  var layerClass = clsx('recharts-rectangle', className);
+  if (!isUpdateAnimationActive) {
+    var _svgPropertiesAndEven = svgPropertiesAndEvents(props),
+      {
+        radius: _
+      } = _svgPropertiesAndEven,
+      otherPathProps = _objectWithoutProperties(_svgPropertiesAndEven, _excluded);
+    return /*#__PURE__*/React.createElement("path", _extends({}, otherPathProps, {
+      x: round(x),
+      y: round(y),
+      width: round(width),
+      height: round(height),
+      radius: typeof radius === 'number' ? radius : undefined,
+      className: layerClass,
+      d: getRectanglePath(x, y, width, height, radius)
+    }));
+  }
+  var prevWidth = prevWidthRef.current;
+  var prevHeight = prevHeightRef.current;
+  var prevX = prevXRef.current;
+  var prevY = prevYRef.current;
+  var from = "0px ".concat(totalLength === -1 ? 1 : totalLength, "px");
+  var to = "".concat(totalLength, "px 0px");
+  var transition = getTransitionVal(['strokeDasharray'], animationDuration, typeof animationEasing === 'string' ? animationEasing : defaultRectangleProps.animationEasing);
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    animationId: animationId,
+    key: animationId,
+    canBegin: totalLength > 0,
+    duration: animationDuration,
+    easing: animationEasing,
+    isActive: isUpdateAnimationActive,
+    begin: animationBegin
+  }, t => {
+    var currWidth = interpolate(prevWidth, width, t);
+    var currHeight = interpolate(prevHeight, height, t);
+    var currX = interpolate(prevX, x, t);
+    var currY = interpolate(prevY, y, t);
+    if (pathRef.current) {
+      prevWidthRef.current = currWidth;
+      prevHeightRef.current = currHeight;
+      prevXRef.current = currX;
+      prevYRef.current = currY;
+    }
+    var animationStyle;
+    if (!isAnimationActive) {
+      animationStyle = {
+        strokeDasharray: to
+      };
+    } else if (t > 0) {
+      animationStyle = {
+        transition,
+        strokeDasharray: to
+      };
+    } else {
+      animationStyle = {
+        strokeDasharray: from
+      };
+    }
+    var _svgPropertiesAndEven2 = svgPropertiesAndEvents(props),
+      {
+        radius: _
+      } = _svgPropertiesAndEven2,
+      otherPathProps = _objectWithoutProperties(_svgPropertiesAndEven2, _excluded2);
+    return /*#__PURE__*/React.createElement("path", _extends({}, otherPathProps, {
+      radius: typeof radius === 'number' ? radius : undefined,
+      className: layerClass,
+      d: getRectanglePath(currX, currY, currWidth, currHeight, radius),
+      ref: pathRef,
+      style: _objectSpread(_objectSpread({}, animationStyle), props.style)
+    }));
+  });
+};
Index: node_modules/recharts/es6/shape/Sector.js
===================================================================
--- node_modules/recharts/es6/shape/Sector.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/shape/Sector.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,225 @@
+var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { polarToCartesian, RADIAN } from '../util/PolarUtils';
+import { getPercentValue, mathSign } from '../util/DataUtils';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { roundTemplateLiteral } from '../util/round';
+var getDeltaAngle = (startAngle, endAngle) => {
+  var sign = mathSign(endAngle - startAngle);
+  var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 359.999);
+  return sign * deltaAngle;
+};
+var getTangentCircle = _ref => {
+  var {
+    cx,
+    cy,
+    radius,
+    angle,
+    sign,
+    isExternal,
+    cornerRadius,
+    cornerIsExternal
+  } = _ref;
+  var centerRadius = cornerRadius * (isExternal ? 1 : -1) + radius;
+  var theta = Math.asin(cornerRadius / centerRadius) / RADIAN;
+  var centerAngle = cornerIsExternal ? angle : angle + sign * theta;
+  var center = polarToCartesian(cx, cy, centerRadius, centerAngle);
+  // The coordinate of point which is tangent to the circle
+  var circleTangency = polarToCartesian(cx, cy, radius, centerAngle);
+  // The coordinate of point which is tangent to the radius line
+  var lineTangencyAngle = cornerIsExternal ? angle - sign * theta : angle;
+  var lineTangency = polarToCartesian(cx, cy, centerRadius * Math.cos(theta * RADIAN), lineTangencyAngle);
+  return {
+    center,
+    circleTangency,
+    lineTangency,
+    theta
+  };
+};
+var getSectorPath = _ref2 => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle
+  } = _ref2;
+  var angle = getDeltaAngle(startAngle, endAngle);
+
+  // When the angle of sector equals to 360, star point and end point coincide
+  var tempEndAngle = startAngle + angle;
+  var outerStartPoint = polarToCartesian(cx, cy, outerRadius, startAngle);
+  var outerEndPoint = polarToCartesian(cx, cy, outerRadius, tempEndAngle);
+  var path = roundTemplateLiteral(_templateObject || (_templateObject = _taggedTemplateLiteral(["M ", ",", "\n    A ", ",", ",0,\n    ", ",", ",\n    ", ",", "\n  "])), outerStartPoint.x, outerStartPoint.y, outerRadius, outerRadius, +(Math.abs(angle) > 180), +(startAngle > tempEndAngle), outerEndPoint.x, outerEndPoint.y);
+  if (innerRadius > 0) {
+    var innerStartPoint = polarToCartesian(cx, cy, innerRadius, startAngle);
+    var innerEndPoint = polarToCartesian(cx, cy, innerRadius, tempEndAngle);
+    path += roundTemplateLiteral(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["L ", ",", "\n            A ", ",", ",0,\n            ", ",", ",\n            ", ",", " Z"])), innerEndPoint.x, innerEndPoint.y, innerRadius, innerRadius, +(Math.abs(angle) > 180), +(startAngle <= tempEndAngle), innerStartPoint.x, innerStartPoint.y);
+  } else {
+    path += roundTemplateLiteral(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["L ", ",", " Z"])), cx, cy);
+  }
+  return path;
+};
+var getSectorWithCorner = _ref3 => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    cornerRadius,
+    forceCornerRadius,
+    cornerIsExternal,
+    startAngle,
+    endAngle
+  } = _ref3;
+  var sign = mathSign(endAngle - startAngle);
+  var {
+    circleTangency: soct,
+    lineTangency: solt,
+    theta: sot
+  } = getTangentCircle({
+    cx,
+    cy,
+    radius: outerRadius,
+    angle: startAngle,
+    sign,
+    cornerRadius,
+    cornerIsExternal
+  });
+  var {
+    circleTangency: eoct,
+    lineTangency: eolt,
+    theta: eot
+  } = getTangentCircle({
+    cx,
+    cy,
+    radius: outerRadius,
+    angle: endAngle,
+    sign: -sign,
+    cornerRadius,
+    cornerIsExternal
+  });
+  var outerArcAngle = cornerIsExternal ? Math.abs(startAngle - endAngle) : Math.abs(startAngle - endAngle) - sot - eot;
+  if (outerArcAngle < 0) {
+    if (forceCornerRadius) {
+      return roundTemplateLiteral(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["M ", ",", "\n        a", ",", ",0,0,1,", ",0\n        a", ",", ",0,0,1,", ",0\n      "])), solt.x, solt.y, cornerRadius, cornerRadius, cornerRadius * 2, cornerRadius, cornerRadius, -cornerRadius * 2);
+    }
+    return getSectorPath({
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      startAngle,
+      endAngle
+    });
+  }
+  var path = roundTemplateLiteral(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["M ", ",", "\n    A", ",", ",0,0,", ",", ",", "\n    A", ",", ",0,", ",", ",", ",", "\n    A", ",", ",0,0,", ",", ",", "\n  "])), solt.x, solt.y, cornerRadius, cornerRadius, +(sign < 0), soct.x, soct.y, outerRadius, outerRadius, +(outerArcAngle > 180), +(sign < 0), eoct.x, eoct.y, cornerRadius, cornerRadius, +(sign < 0), eolt.x, eolt.y);
+  if (innerRadius > 0) {
+    var {
+      circleTangency: sict,
+      lineTangency: silt,
+      theta: sit
+    } = getTangentCircle({
+      cx,
+      cy,
+      radius: innerRadius,
+      angle: startAngle,
+      sign,
+      isExternal: true,
+      cornerRadius,
+      cornerIsExternal
+    });
+    var {
+      circleTangency: eict,
+      lineTangency: eilt,
+      theta: eit
+    } = getTangentCircle({
+      cx,
+      cy,
+      radius: innerRadius,
+      angle: endAngle,
+      sign: -sign,
+      isExternal: true,
+      cornerRadius,
+      cornerIsExternal
+    });
+    var innerArcAngle = cornerIsExternal ? Math.abs(startAngle - endAngle) : Math.abs(startAngle - endAngle) - sit - eit;
+    if (innerArcAngle < 0 && cornerRadius === 0) {
+      return "".concat(path, "L").concat(cx, ",").concat(cy, "Z");
+    }
+    path += roundTemplateLiteral(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["L", ",", "\n      A", ",", ",0,0,", ",", ",", "\n      A", ",", ",0,", ",", ",", ",", "\n      A", ",", ",0,0,", ",", ",", "Z"])), eilt.x, eilt.y, cornerRadius, cornerRadius, +(sign < 0), eict.x, eict.y, innerRadius, innerRadius, +(innerArcAngle > 180), +(sign > 0), sict.x, sict.y, cornerRadius, cornerRadius, +(sign < 0), silt.x, silt.y);
+  } else {
+    path += roundTemplateLiteral(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["L", ",", "Z"])), cx, cy);
+  }
+  return path;
+};
+
+/**
+ * SVG cx, cy are `string | number | undefined`, but internally we use `number` so let's
+ * override the types here.
+ */
+
+export var defaultSectorProps = {
+  cx: 0,
+  cy: 0,
+  innerRadius: 0,
+  outerRadius: 0,
+  startAngle: 0,
+  endAngle: 0,
+  cornerRadius: 0,
+  forceCornerRadius: false,
+  cornerIsExternal: false
+};
+export var Sector = sectorProps => {
+  var props = resolveDefaultProps(sectorProps, defaultSectorProps);
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    cornerRadius,
+    forceCornerRadius,
+    cornerIsExternal,
+    startAngle,
+    endAngle,
+    className
+  } = props;
+  if (outerRadius < innerRadius || startAngle === endAngle) {
+    return null;
+  }
+  var layerClass = clsx('recharts-sector', className);
+  var deltaRadius = outerRadius - innerRadius;
+  var cr = getPercentValue(cornerRadius, deltaRadius, 0, true);
+  var path;
+  if (cr > 0 && Math.abs(startAngle - endAngle) < 360) {
+    path = getSectorWithCorner({
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      cornerRadius: Math.min(cr, deltaRadius / 2),
+      forceCornerRadius,
+      cornerIsExternal,
+      startAngle,
+      endAngle
+    });
+  } else {
+    path = getSectorPath({
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      startAngle,
+      endAngle
+    });
+  }
+  return /*#__PURE__*/React.createElement("path", _extends({}, svgPropertiesAndEvents(props), {
+    className: layerClass,
+    d: path
+  }));
+};
Index: node_modules/recharts/es6/shape/Symbols.js
===================================================================
--- node_modules/recharts/es6/shape/Symbols.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/shape/Symbols.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,112 @@
+var _excluded = ["type", "size", "sizeType"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { symbol as shapeSymbol, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye } from 'victory-vendor/d3-shape';
+import { clsx } from 'clsx';
+import { isNumber, upperFirst } from '../util/DataUtils';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+var symbolFactories = {
+  symbolCircle,
+  symbolCross,
+  symbolDiamond,
+  symbolSquare,
+  symbolStar,
+  symbolTriangle,
+  symbolWye
+};
+var RADIAN = Math.PI / 180;
+var getSymbolFactory = type => {
+  var name = "symbol".concat(upperFirst(type));
+  return symbolFactories[name] || symbolCircle;
+};
+var calculateAreaSize = (size, sizeType, type) => {
+  if (sizeType === 'area') {
+    return size;
+  }
+  switch (type) {
+    case 'cross':
+      return 5 * size * size / 9;
+    case 'diamond':
+      return 0.5 * size * size / Math.sqrt(3);
+    case 'square':
+      return size * size;
+    case 'star':
+      {
+        var angle = 18 * RADIAN;
+        return 1.25 * size * size * (Math.tan(angle) - Math.tan(angle * 2) * Math.tan(angle) ** 2);
+      }
+    case 'triangle':
+      return Math.sqrt(3) * size * size / 4;
+    case 'wye':
+      return (21 - 10 * Math.sqrt(3)) * size * size / 8;
+    default:
+      return Math.PI * size * size / 4;
+  }
+};
+var registerSymbol = (key, factory) => {
+  symbolFactories["symbol".concat(upperFirst(key))] = factory;
+};
+
+/**
+ * Renders a symbol from a set of predefined shapes.
+ */
+export var Symbols = _ref => {
+  var {
+      type = 'circle',
+      size = 64,
+      sizeType = 'area'
+    } = _ref,
+    rest = _objectWithoutProperties(_ref, _excluded);
+  var props = _objectSpread(_objectSpread({}, rest), {}, {
+    type,
+    size,
+    sizeType
+  });
+  var realType = 'circle';
+  if (typeof type === 'string') {
+    /*
+     * Our type guard is not as strong as it could be (i.e. non-existent),
+     * and so despite the typescript type saying that `type` is a `SymbolType`,
+     * we can get numbers or really anything, so let's have a runtime check here to fix the exception.
+     *
+     * https://github.com/recharts/recharts/issues/6197
+     */
+    realType = type;
+  }
+
+  /**
+   * Calculate the path of curve
+   * @return {String} path
+   */
+  var getPath = () => {
+    var symbolFactory = getSymbolFactory(realType);
+    var symbol = shapeSymbol().type(symbolFactory).size(calculateAreaSize(size, sizeType, realType));
+    var s = symbol();
+    if (s === null) {
+      return undefined;
+    }
+    return s;
+  };
+  var {
+    className,
+    cx,
+    cy
+  } = props;
+  var filteredProps = svgPropertiesAndEvents(props);
+  if (isNumber(cx) && isNumber(cy) && isNumber(size)) {
+    return /*#__PURE__*/React.createElement("path", _extends({}, filteredProps, {
+      className: clsx('recharts-symbols', className),
+      transform: "translate(".concat(cx, ", ").concat(cy, ")"),
+      d: getPath()
+    }));
+  }
+  return null;
+};
+Symbols.registerSymbol = registerSymbol;
Index: node_modules/recharts/es6/shape/Trapezoid.js
===================================================================
--- node_modules/recharts/es6/shape/Trapezoid.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/shape/Trapezoid.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,131 @@
+var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
+/**
+ * @fileOverview Rectangle
+ */
+import * as React from 'react';
+import { useEffect, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+import { useAnimationId } from '../util/useAnimationId';
+import { interpolate } from '../util/DataUtils';
+import { getTransitionVal } from '../animation/util';
+import { svgPropertiesAndEvents } from '../util/svgPropertiesAndEvents';
+import { roundTemplateLiteral } from '../util/round';
+var getTrapezoidPath = (x, y, upperWidth, lowerWidth, height) => {
+  var widthGap = upperWidth - lowerWidth;
+  var path;
+  path = roundTemplateLiteral(_templateObject || (_templateObject = _taggedTemplateLiteral(["M ", ",", ""])), x, y);
+  path += roundTemplateLiteral(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["L ", ",", ""])), x + upperWidth, y);
+  path += roundTemplateLiteral(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["L ", ",", ""])), x + upperWidth - widthGap / 2, y + height);
+  path += roundTemplateLiteral(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["L ", ",", ""])), x + upperWidth - widthGap / 2 - lowerWidth, y + height);
+  path += roundTemplateLiteral(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["L ", ",", " Z"])), x, y);
+  return path;
+};
+export var defaultTrapezoidProps = {
+  x: 0,
+  y: 0,
+  upperWidth: 0,
+  lowerWidth: 0,
+  height: 0,
+  isUpdateAnimationActive: false,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease'
+};
+export var Trapezoid = outsideProps => {
+  var trapezoidProps = resolveDefaultProps(outsideProps, defaultTrapezoidProps);
+  var {
+    x,
+    y,
+    upperWidth,
+    lowerWidth,
+    height,
+    className
+  } = trapezoidProps;
+  var {
+    animationEasing,
+    animationDuration,
+    animationBegin,
+    isUpdateAnimationActive
+  } = trapezoidProps;
+  var pathRef = useRef(null);
+  var [totalLength, setTotalLength] = useState(-1);
+  var prevUpperWidthRef = useRef(upperWidth);
+  var prevLowerWidthRef = useRef(lowerWidth);
+  var prevHeightRef = useRef(height);
+  var prevXRef = useRef(x);
+  var prevYRef = useRef(y);
+  var animationId = useAnimationId(outsideProps, 'trapezoid-');
+  useEffect(() => {
+    if (pathRef.current && pathRef.current.getTotalLength) {
+      try {
+        var pathTotalLength = pathRef.current.getTotalLength();
+        if (pathTotalLength) {
+          setTotalLength(pathTotalLength);
+        }
+      } catch (_unused) {
+        // calculate total length error
+      }
+    }
+  }, []);
+  if (x !== +x || y !== +y || upperWidth !== +upperWidth || lowerWidth !== +lowerWidth || height !== +height || upperWidth === 0 && lowerWidth === 0 || height === 0) {
+    return null;
+  }
+  var layerClass = clsx('recharts-trapezoid', className);
+  if (!isUpdateAnimationActive) {
+    return /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("path", _extends({}, svgPropertiesAndEvents(trapezoidProps), {
+      className: layerClass,
+      d: getTrapezoidPath(x, y, upperWidth, lowerWidth, height)
+    })));
+  }
+  var prevUpperWidth = prevUpperWidthRef.current;
+  var prevLowerWidth = prevLowerWidthRef.current;
+  var prevHeight = prevHeightRef.current;
+  var prevX = prevXRef.current;
+  var prevY = prevYRef.current;
+  var from = "0px ".concat(totalLength === -1 ? 1 : totalLength, "px");
+  var to = "".concat(totalLength, "px 0px");
+  var transition = getTransitionVal(['strokeDasharray'], animationDuration, animationEasing);
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    animationId: animationId,
+    key: animationId,
+    canBegin: totalLength > 0,
+    duration: animationDuration,
+    easing: animationEasing,
+    isActive: isUpdateAnimationActive,
+    begin: animationBegin
+  }, t => {
+    var currUpperWidth = interpolate(prevUpperWidth, upperWidth, t);
+    var currLowerWidth = interpolate(prevLowerWidth, lowerWidth, t);
+    var currHeight = interpolate(prevHeight, height, t);
+    var currX = interpolate(prevX, x, t);
+    var currY = interpolate(prevY, y, t);
+    if (pathRef.current) {
+      prevUpperWidthRef.current = currUpperWidth;
+      prevLowerWidthRef.current = currLowerWidth;
+      prevHeightRef.current = currHeight;
+      prevXRef.current = currX;
+      prevYRef.current = currY;
+    }
+    var animationStyle = t > 0 ? {
+      transition,
+      strokeDasharray: to
+    } : {
+      strokeDasharray: from
+    };
+    return /*#__PURE__*/React.createElement("path", _extends({}, svgPropertiesAndEvents(trapezoidProps), {
+      className: layerClass,
+      d: getTrapezoidPath(currX, currY, currUpperWidth, currLowerWidth, currHeight),
+      ref: pathRef,
+      style: _objectSpread(_objectSpread({}, animationStyle), trapezoidProps.style)
+    }));
+  });
+};
Index: node_modules/recharts/es6/state/RechartsReduxContext.js
===================================================================
--- node_modules/recharts/es6/state/RechartsReduxContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/RechartsReduxContext.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,17 @@
+import { createContext } from 'react';
+
+/*
+ * This is a copy of the React-Redux context type, but with our own store type.
+ * We could import directly from react-redux like this:
+ * import { ReactReduxContextValue } from 'react-redux/src/components/Context';
+ * but that makes typescript angry with some errors I am not sure how to resolve
+ * so copy it is.
+ */
+
+/**
+ * We need to use our own independent Redux context because we need to avoid interfering with other people's Redux stores
+ * in case they decide to install and use Recharts in another Redux app which is likely to happen.
+ *
+ * https://react-redux.js.org/using-react-redux/accessing-store#providing-custom-context
+ */
+export var RechartsReduxContext = /*#__PURE__*/createContext(null);
Index: node_modules/recharts/es6/state/RechartsStoreProvider.js
===================================================================
--- node_modules/recharts/es6/state/RechartsStoreProvider.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/RechartsStoreProvider.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,47 @@
+import * as React from 'react';
+import { useRef } from 'react';
+import { Provider } from 'react-redux';
+import { createRechartsStore } from './store';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { RechartsReduxContext } from './RechartsReduxContext';
+export function RechartsStoreProvider(_ref) {
+  var {
+    preloadedState,
+    children,
+    reduxStoreName
+  } = _ref;
+  var isPanorama = useIsPanorama();
+  /*
+   * Why the ref? Redux official documentation recommends to use store as a singleton,
+   * and reuse that everywhere: https://redux-toolkit.js.org/api/configureStore#basic-example
+   *
+   * Which is correct! Except that is considering deploying Redux in an app.
+   * Recharts as a library supports multiple charts on the same page.
+   * And each of these charts needs its own store independent of others!
+   *
+   * The alternative is to have everything in the store keyed by the chart id.
+   * Which would make working with everything a little bit more painful because we need the chart id everywhere.
+   */
+  var storeRef = useRef(null);
+
+  /*
+   * Panorama means that this chart is not its own chart, it's only a "preview"
+   * being rendered as a child of Brush.
+   * In such case, it should not have a store on its own - it should implicitly inherit
+   * whatever data is in the "parent" or "root" chart.
+   * Which here is represented by not having a Provider at all. All selectors will use the root store by default.
+   */
+  if (isPanorama) {
+    return children;
+  }
+  if (storeRef.current == null) {
+    storeRef.current = createRechartsStore(preloadedState, reduxStoreName);
+  }
+
+  // @ts-expect-error React-Redux types demand that the context internal value is not null, but we have that as default.
+  var nonNullContext = RechartsReduxContext;
+  return /*#__PURE__*/React.createElement(Provider, {
+    context: nonNullContext,
+    store: storeRef.current
+  }, children);
+}
Index: node_modules/recharts/es6/state/ReportChartProps.js
===================================================================
--- node_modules/recharts/es6/state/ReportChartProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/ReportChartProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,10 @@
+import { useEffect } from 'react';
+import { updateOptions } from './rootPropsSlice';
+import { useAppDispatch } from './hooks';
+export function ReportChartProps(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(updateOptions(props));
+  }, [dispatch, props]);
+  return null;
+}
Index: node_modules/recharts/es6/state/ReportMainChartProps.js
===================================================================
--- node_modules/recharts/es6/state/ReportMainChartProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/ReportMainChartProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,40 @@
+import { memo, useEffect } from 'react';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { setLayout, setMargin } from './layoutSlice';
+import { useAppDispatch } from './hooks';
+import { propsAreEqual } from '../util/propsAreEqual';
+
+/**
+ * "Main" props are props that are only accepted on the main chart,
+ * as opposed to the small panorama chart inside a Brush.
+ */
+
+function ReportMainChartPropsImpl(_ref) {
+  var {
+    layout,
+    margin
+  } = _ref;
+  var dispatch = useAppDispatch();
+
+  /*
+   * Skip dispatching properties in panorama chart for two reasons:
+   * 1. The root chart should be deciding on these properties, and
+   * 2. Brush reads these properties from redux store, and so they must remain stable
+   *      to avoid circular dependency and infinite re-rendering.
+   */
+  var isPanorama = useIsPanorama();
+  /*
+   * useEffect here is required to avoid the "Cannot update a component while rendering a different component" error.
+   * https://github.com/facebook/react/issues/18178
+   *
+   * Reported in https://github.com/recharts/recharts/issues/5514
+   */
+  useEffect(() => {
+    if (!isPanorama) {
+      dispatch(setLayout(layout));
+      dispatch(setMargin(margin));
+    }
+  }, [dispatch, isPanorama, layout, margin]);
+  return null;
+}
+export var ReportMainChartProps = /*#__PURE__*/memo(ReportMainChartPropsImpl, propsAreEqual);
Index: node_modules/recharts/es6/state/ReportPolarOptions.js
===================================================================
--- node_modules/recharts/es6/state/ReportPolarOptions.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/ReportPolarOptions.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,10 @@
+import { useEffect } from 'react';
+import { useAppDispatch } from './hooks';
+import { updatePolarOptions } from './polarOptionsSlice';
+export function ReportPolarOptions(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(updatePolarOptions(props));
+  }, [dispatch, props]);
+  return null;
+}
Index: node_modules/recharts/es6/state/SetGraphicalItem.js
===================================================================
--- node_modules/recharts/es6/state/SetGraphicalItem.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/SetGraphicalItem.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,51 @@
+import { memo, useLayoutEffect, useRef } from 'react';
+import { useAppDispatch } from './hooks';
+import { addCartesianGraphicalItem, addPolarGraphicalItem, removeCartesianGraphicalItem, removePolarGraphicalItem, replaceCartesianGraphicalItem } from './graphicalItemsSlice';
+var SetCartesianGraphicalItemImpl = props => {
+  var dispatch = useAppDispatch();
+  var prevPropsRef = useRef(null);
+  useLayoutEffect(() => {
+    if (prevPropsRef.current === null) {
+      dispatch(addCartesianGraphicalItem(props));
+    } else if (prevPropsRef.current !== props) {
+      dispatch(replaceCartesianGraphicalItem({
+        prev: prevPropsRef.current,
+        next: props
+      }));
+    }
+    prevPropsRef.current = props;
+  }, [dispatch, props]);
+  useLayoutEffect(() => {
+    return () => {
+      if (prevPropsRef.current) {
+        dispatch(removeCartesianGraphicalItem(prevPropsRef.current));
+        /*
+         * Here we have to reset the ref to null because in StrictMode, the effect will run twice,
+         * but it will keep the same ref value from the first render.
+         *
+         * In browser, React will clear the ref after the first effect cleanup,
+         * so that wouldn't be an issue.
+         *
+         * In StrictMode, however, the ref is kept,
+         * and in the hook above the code checks for `prevPropsRef.current === null`
+         * which would be false so it would not dispatch the `addCartesianGraphicalItem` action again.
+         *
+         * https://github.com/recharts/recharts/issues/6022
+         */
+        prevPropsRef.current = null;
+      }
+    };
+  }, [dispatch]);
+  return null;
+};
+export var SetCartesianGraphicalItem = /*#__PURE__*/memo(SetCartesianGraphicalItemImpl);
+export function SetPolarGraphicalItem(props) {
+  var dispatch = useAppDispatch();
+  useLayoutEffect(() => {
+    dispatch(addPolarGraphicalItem(props));
+    return () => {
+      dispatch(removePolarGraphicalItem(props));
+    };
+  }, [dispatch, props]);
+  return null;
+}
Index: node_modules/recharts/es6/state/SetLegendPayload.js
===================================================================
--- node_modules/recharts/es6/state/SetLegendPayload.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/SetLegendPayload.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,67 @@
+import { useLayoutEffect, useRef } from 'react';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { selectChartLayout } from '../context/chartLayoutContext';
+import { useAppDispatch, useAppSelector } from './hooks';
+import { addLegendPayload, replaceLegendPayload, removeLegendPayload } from './legendSlice';
+export function SetLegendPayload(_ref) {
+  var {
+    legendPayload
+  } = _ref;
+  var dispatch = useAppDispatch();
+  var isPanorama = useIsPanorama();
+  var prevPayloadRef = useRef(null);
+  useLayoutEffect(() => {
+    if (isPanorama) {
+      return;
+    }
+    if (prevPayloadRef.current === null) {
+      dispatch(addLegendPayload(legendPayload));
+    } else if (prevPayloadRef.current !== legendPayload) {
+      dispatch(replaceLegendPayload({
+        prev: prevPayloadRef.current,
+        next: legendPayload
+      }));
+    }
+    prevPayloadRef.current = legendPayload;
+  }, [dispatch, isPanorama, legendPayload]);
+  useLayoutEffect(() => {
+    return () => {
+      if (prevPayloadRef.current) {
+        dispatch(removeLegendPayload(prevPayloadRef.current));
+        prevPayloadRef.current = null;
+      }
+    };
+  }, [dispatch]);
+  return null;
+}
+export function SetPolarLegendPayload(_ref2) {
+  var {
+    legendPayload
+  } = _ref2;
+  var dispatch = useAppDispatch();
+  var layout = useAppSelector(selectChartLayout);
+  var prevPayloadRef = useRef(null);
+  useLayoutEffect(() => {
+    if (layout !== 'centric' && layout !== 'radial') {
+      return;
+    }
+    if (prevPayloadRef.current === null) {
+      dispatch(addLegendPayload(legendPayload));
+    } else if (prevPayloadRef.current !== legendPayload) {
+      dispatch(replaceLegendPayload({
+        prev: prevPayloadRef.current,
+        next: legendPayload
+      }));
+    }
+    prevPayloadRef.current = legendPayload;
+  }, [dispatch, layout, legendPayload]);
+  useLayoutEffect(() => {
+    return () => {
+      if (prevPayloadRef.current) {
+        dispatch(removeLegendPayload(prevPayloadRef.current));
+        prevPayloadRef.current = null;
+      }
+    };
+  }, [dispatch]);
+  return null;
+}
Index: node_modules/recharts/es6/state/SetTooltipEntrySettings.js
===================================================================
--- node_modules/recharts/es6/state/SetTooltipEntrySettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/SetTooltipEntrySettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,36 @@
+import { useLayoutEffect, useRef } from 'react';
+import { useAppDispatch } from './hooks';
+import { addTooltipEntrySettings, removeTooltipEntrySettings, replaceTooltipEntrySettings } from './tooltipSlice';
+import { useIsPanorama } from '../context/PanoramaContext';
+export function SetTooltipEntrySettings(_ref) {
+  var {
+    tooltipEntrySettings
+  } = _ref;
+  var dispatch = useAppDispatch();
+  var isPanorama = useIsPanorama();
+  var prevSettingsRef = useRef(null);
+  useLayoutEffect(() => {
+    if (isPanorama) {
+      // Panorama graphical items should never contribute to Tooltip payload.
+      return;
+    }
+    if (prevSettingsRef.current === null) {
+      dispatch(addTooltipEntrySettings(tooltipEntrySettings));
+    } else if (prevSettingsRef.current !== tooltipEntrySettings) {
+      dispatch(replaceTooltipEntrySettings({
+        prev: prevSettingsRef.current,
+        next: tooltipEntrySettings
+      }));
+    }
+    prevSettingsRef.current = tooltipEntrySettings;
+  }, [tooltipEntrySettings, dispatch, isPanorama]);
+  useLayoutEffect(() => {
+    return () => {
+      if (prevSettingsRef.current) {
+        dispatch(removeTooltipEntrySettings(prevSettingsRef.current));
+        prevSettingsRef.current = null;
+      }
+    };
+  }, [dispatch]);
+  return null;
+}
Index: node_modules/recharts/es6/state/brushSlice.js
===================================================================
--- node_modules/recharts/es6/state/brushSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/brushSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,35 @@
+import { createSlice } from '@reduxjs/toolkit';
+
+/**
+ * From all Brush properties, only height has a default value and will always be defined.
+ * Other properties are nullable and will be computed from offsets and margins if they are not set.
+ */
+
+var initialState = {
+  x: 0,
+  y: 0,
+  width: 0,
+  height: 0,
+  padding: {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0
+  }
+};
+export var brushSlice = createSlice({
+  name: 'brush',
+  initialState,
+  reducers: {
+    setBrushSettings(_state, action) {
+      if (action.payload == null) {
+        return initialState;
+      }
+      return action.payload;
+    }
+  }
+});
+export var {
+  setBrushSettings
+} = brushSlice.actions;
+export var brushReducer = brushSlice.reducer;
Index: node_modules/recharts/es6/state/cartesianAxisSlice.js
===================================================================
--- node_modules/recharts/es6/state/cartesianAxisSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/cartesianAxisSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,162 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSlice, prepareAutoBatched } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+
+/**
+ * @inline
+ */
+
+export var defaultAxisId = 0;
+
+/**
+ * Properties shared in X, Y, and Z axes.
+ * User defined axis settings, coming from props.
+ */
+
+/**
+ * These are the external props, visible for users as they set them using our public API.
+ * There is all sorts of internal computed things based on these, but they will come through selectors.
+ *
+ * Properties shared between X and Y axes
+ */
+
+/**
+ * Z axis is special because it's never displayed. It controls the size of Scatter dots,
+ * but it never displays ticks anywhere.
+ */
+
+var initialState = {
+  xAxis: {},
+  yAxis: {},
+  zAxis: {}
+};
+
+/**
+ * This is the slice where each individual Axis element pushes its own configuration.
+ * Prefer to use this one instead of axisSlice.
+ */
+var cartesianAxisSlice = createSlice({
+  name: 'cartesianAxis',
+  initialState,
+  reducers: {
+    addXAxis: {
+      reducer(state, action) {
+        state.xAxis[action.payload.id] = castDraft(action.payload);
+      },
+      prepare: prepareAutoBatched()
+    },
+    replaceXAxis: {
+      reducer(state, action) {
+        var {
+          prev,
+          next
+        } = action.payload;
+        if (state.xAxis[prev.id] !== undefined) {
+          if (prev.id !== next.id) {
+            delete state.xAxis[prev.id];
+          }
+          state.xAxis[next.id] = castDraft(next);
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    removeXAxis: {
+      reducer(state, action) {
+        delete state.xAxis[action.payload.id];
+      },
+      prepare: prepareAutoBatched()
+    },
+    addYAxis: {
+      reducer(state, action) {
+        state.yAxis[action.payload.id] = castDraft(action.payload);
+      },
+      prepare: prepareAutoBatched()
+    },
+    replaceYAxis: {
+      reducer(state, action) {
+        var {
+          prev,
+          next
+        } = action.payload;
+        if (state.yAxis[prev.id] !== undefined) {
+          if (prev.id !== next.id) {
+            delete state.yAxis[prev.id];
+          }
+          state.yAxis[next.id] = castDraft(next);
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    removeYAxis: {
+      reducer(state, action) {
+        delete state.yAxis[action.payload.id];
+      },
+      prepare: prepareAutoBatched()
+    },
+    addZAxis: {
+      reducer(state, action) {
+        state.zAxis[action.payload.id] = castDraft(action.payload);
+      },
+      prepare: prepareAutoBatched()
+    },
+    replaceZAxis: {
+      reducer(state, action) {
+        var {
+          prev,
+          next
+        } = action.payload;
+        if (state.zAxis[prev.id] !== undefined) {
+          if (prev.id !== next.id) {
+            delete state.zAxis[prev.id];
+          }
+          state.zAxis[next.id] = castDraft(next);
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    removeZAxis: {
+      reducer(state, action) {
+        delete state.zAxis[action.payload.id];
+      },
+      prepare: prepareAutoBatched()
+    },
+    updateYAxisWidth(state, action) {
+      var {
+        id,
+        width
+      } = action.payload;
+      var axis = state.yAxis[id];
+      if (axis) {
+        var _history$;
+        var history = axis.widthHistory || [];
+        // An oscillation is detected when the new width is the same as the width before the last one.
+        // This is a simple A -> B -> A pattern. If the next width is B, and the difference is less than 1 pixel, we ignore it.
+        if (history.length === 3 && history[0] === history[2] && width === history[1] && width !== axis.width && Math.abs(width - ((_history$ = history[0]) !== null && _history$ !== void 0 ? _history$ : 0)) <= 1) {
+          return;
+        }
+        var newHistory = [...history, width].slice(-3);
+        state.yAxis[id] = _objectSpread(_objectSpread({}, axis), {}, {
+          width,
+          widthHistory: newHistory
+        });
+      }
+    }
+  }
+});
+export var {
+  addXAxis,
+  replaceXAxis,
+  removeXAxis,
+  addYAxis,
+  replaceYAxis,
+  removeYAxis,
+  addZAxis,
+  replaceZAxis,
+  removeZAxis,
+  updateYAxisWidth
+} = cartesianAxisSlice.actions;
+export var cartesianAxisReducer = cartesianAxisSlice.reducer;
Index: node_modules/recharts/es6/state/chartDataSlice.js
===================================================================
--- node_modules/recharts/es6/state/chartDataSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/chartDataSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,66 @@
+import { createSlice } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+
+/**
+ * This is the data that's coming through main chart `data` prop
+ * Recharts is very flexible in what it accepts so the type is very flexible too.
+ * This will typically be an object, and various components will provide various `dataKey`
+ * that dictates how to pull data from that object.
+ *
+ * TL;DR: before dataKey
+ *
+ * @inline
+ */
+
+/**
+ * So this is the same unknown type as ChartData but this is after the dataKey has been applied.
+ * We still don't know what the type is - that depends on what exactly it was before the dataKey application,
+ * and the dataKey can return whatever anyway - but let's keep it separate as a form of documentation.
+ *
+ * TL;DR: ChartData after dataKey.
+ */
+
+export var initialChartDataState = {
+  chartData: undefined,
+  computedData: undefined,
+  dataStartIndex: 0,
+  dataEndIndex: 0
+};
+var chartDataSlice = createSlice({
+  name: 'chartData',
+  initialState: initialChartDataState,
+  reducers: {
+    setChartData(state, action) {
+      state.chartData = castDraft(action.payload);
+      if (action.payload == null) {
+        state.dataStartIndex = 0;
+        state.dataEndIndex = 0;
+        return;
+      }
+      if (action.payload.length > 0 && state.dataEndIndex !== action.payload.length - 1) {
+        state.dataEndIndex = action.payload.length - 1;
+      }
+    },
+    setComputedData(state, action) {
+      state.computedData = action.payload;
+    },
+    setDataStartEndIndexes(state, action) {
+      var {
+        startIndex,
+        endIndex
+      } = action.payload;
+      if (startIndex != null) {
+        state.dataStartIndex = startIndex;
+      }
+      if (endIndex != null) {
+        state.dataEndIndex = endIndex;
+      }
+    }
+  }
+});
+export var {
+  setChartData,
+  setDataStartEndIndexes,
+  setComputedData
+} = chartDataSlice.actions;
+export var chartDataReducer = chartDataSlice.reducer;
Index: node_modules/recharts/es6/state/errorBarSlice.js
===================================================================
--- node_modules/recharts/es6/state/errorBarSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/errorBarSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,50 @@
+import { createSlice } from '@reduxjs/toolkit';
+
+/**
+ * ErrorBars have lot more settings but all the others are scoped to the component itself.
+ * Only some of them required to be reported to the global store because XAxis and YAxis need to know
+ * if the error bar is contributing to extending the axis domain.
+ */
+
+var initialState = {};
+var errorBarSlice = createSlice({
+  name: 'errorBars',
+  initialState,
+  reducers: {
+    addErrorBar: (state, action) => {
+      var {
+        itemId,
+        errorBar
+      } = action.payload;
+      if (!state[itemId]) {
+        state[itemId] = [];
+      }
+      state[itemId].push(errorBar);
+    },
+    replaceErrorBar: (state, action) => {
+      var {
+        itemId,
+        prev,
+        next
+      } = action.payload;
+      if (state[itemId]) {
+        state[itemId] = state[itemId].map(e => e.dataKey === prev.dataKey && e.direction === prev.direction ? next : e);
+      }
+    },
+    removeErrorBar: (state, action) => {
+      var {
+        itemId,
+        errorBar
+      } = action.payload;
+      if (state[itemId]) {
+        state[itemId] = state[itemId].filter(e => e.dataKey !== errorBar.dataKey || e.direction !== errorBar.direction);
+      }
+    }
+  }
+});
+export var {
+  addErrorBar,
+  replaceErrorBar,
+  removeErrorBar
+} = errorBarSlice.actions;
+export var errorBarReducer = errorBarSlice.reducer;
Index: node_modules/recharts/es6/state/externalEventsMiddleware.js
===================================================================
--- node_modules/recharts/es6/state/externalEventsMiddleware.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/externalEventsMiddleware.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,56 @@
+import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
+import { selectActiveLabel, selectActiveTooltipCoordinate, selectActiveTooltipDataKey, selectActiveTooltipIndex, selectIsTooltipActive } from './selectors/tooltipSelectors';
+export var externalEventAction = createAction('externalEvent');
+export var externalEventsMiddleware = createListenerMiddleware();
+
+/*
+ * We need a Map keyed by event type because this middleware handles MULTIPLE different event types
+ * (click, mouseenter, mouseleave, mousedown, mouseup, contextmenu, dblclick, touchstart, touchmove, touchend)
+ * from the same DOM element. Different event types should NOT cancel each other's animation frames.
+ * For example, a click event and a mousemove event can happen in quick succession and both should be processed.
+ * This is different from mouseMoveMiddleware which only handles one event type and uses a single rafId.
+ */
+var rafIdMap = new Map();
+externalEventsMiddleware.startListening({
+  actionCreator: externalEventAction,
+  effect: (action, listenerApi) => {
+    var {
+      handler,
+      reactEvent
+    } = action.payload;
+    if (handler == null) {
+      return;
+    }
+    reactEvent.persist();
+    var eventType = reactEvent.type;
+
+    // Cancel any pending animation frame for this event type
+    var existingRafId = rafIdMap.get(eventType);
+    if (existingRafId !== undefined) {
+      cancelAnimationFrame(existingRafId);
+    }
+    var rafId = requestAnimationFrame(() => {
+      try {
+        /*
+         * Here it is important that we get the latest state inside the animation frame callback,
+         * not from the outer scope, because there may have been other actions dispatched
+         * between the time the event was fired and the animation frame callback is executed.
+         * One of those actions is the one that actually sets the active tooltip state!
+         */
+        var state = listenerApi.getState();
+        var nextState = {
+          activeCoordinate: selectActiveTooltipCoordinate(state),
+          activeDataKey: selectActiveTooltipDataKey(state),
+          activeIndex: selectActiveTooltipIndex(state),
+          activeLabel: selectActiveLabel(state),
+          activeTooltipIndex: selectActiveTooltipIndex(state),
+          isTooltipActive: selectIsTooltipActive(state)
+        };
+        handler(nextState, reactEvent);
+      } finally {
+        rafIdMap.delete(eventType);
+      }
+    });
+    rafIdMap.set(eventType, rafId);
+  }
+});
Index: node_modules/recharts/es6/state/graphicalItemsSlice.js
===================================================================
--- node_modules/recharts/es6/state/graphicalItemsSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/graphicalItemsSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,70 @@
+import { createSlice, current, prepareAutoBatched } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+
+/**
+ * Unique ID of the graphical item.
+ * This is used to identify the graphical item in the state and in the React tree.
+ * This is required for every graphical item - it's either provided by the user or generated automatically.
+ */
+
+var initialState = {
+  cartesianItems: [],
+  polarItems: []
+};
+var graphicalItemsSlice = createSlice({
+  name: 'graphicalItems',
+  initialState,
+  reducers: {
+    addCartesianGraphicalItem: {
+      reducer(state, action) {
+        state.cartesianItems.push(castDraft(action.payload));
+      },
+      prepare: prepareAutoBatched()
+    },
+    replaceCartesianGraphicalItem: {
+      reducer(state, action) {
+        var {
+          prev,
+          next
+        } = action.payload;
+        var index = current(state).cartesianItems.indexOf(castDraft(prev));
+        if (index > -1) {
+          state.cartesianItems[index] = castDraft(next);
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    removeCartesianGraphicalItem: {
+      reducer(state, action) {
+        var index = current(state).cartesianItems.indexOf(castDraft(action.payload));
+        if (index > -1) {
+          state.cartesianItems.splice(index, 1);
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    addPolarGraphicalItem: {
+      reducer(state, action) {
+        state.polarItems.push(castDraft(action.payload));
+      },
+      prepare: prepareAutoBatched()
+    },
+    removePolarGraphicalItem: {
+      reducer(state, action) {
+        var index = current(state).polarItems.indexOf(castDraft(action.payload));
+        if (index > -1) {
+          state.polarItems.splice(index, 1);
+        }
+      },
+      prepare: prepareAutoBatched()
+    }
+  }
+});
+export var {
+  addCartesianGraphicalItem,
+  replaceCartesianGraphicalItem,
+  removeCartesianGraphicalItem,
+  addPolarGraphicalItem,
+  removePolarGraphicalItem
+} = graphicalItemsSlice.actions;
+export var graphicalItemsReducer = graphicalItemsSlice.reducer;
Index: node_modules/recharts/es6/state/hooks.js
===================================================================
--- node_modules/recharts/es6/state/hooks.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/hooks.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,46 @@
+import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';
+import { useContext, useMemo } from 'react';
+import { RechartsReduxContext } from './RechartsReduxContext';
+var noopDispatch = a => a;
+export var useAppDispatch = () => {
+  var context = useContext(RechartsReduxContext);
+  if (context) {
+    return context.store.dispatch;
+  }
+  return noopDispatch;
+};
+var noop = () => {};
+var addNestedSubNoop = () => noop;
+var refEquality = (a, b) => a === b;
+
+/**
+ * This is a recharts variant of `useSelector` from 'react-redux' package.
+ *
+ * The difference is that react-redux version will throw an Error when used outside of Redux context.
+ *
+ * This, recharts version, will return undefined instead.
+ *
+ * This is because we want to allow using our components outside the Chart wrapper,
+ * and have people provide all props explicitly.
+ *
+ * If however they use the component inside a chart wrapper then those props become optional,
+ * and we read them from Redux state instead.
+ *
+ * @param selector for pulling things out of Redux store; will not be called if the store is not accessible
+ * @return whatever the selector returned; or undefined when outside of Redux store
+ */
+export function useAppSelector(selector) {
+  var context = useContext(RechartsReduxContext);
+  var outOfContextSelector = useMemo(() => {
+    if (!context) {
+      return noop;
+    }
+    return state => {
+      if (state == null) {
+        return undefined;
+      }
+      return selector(state);
+    };
+  }, [context, selector]);
+  return useSyncExternalStoreWithSelector(context ? context.subscription.addNestedSub : addNestedSubNoop, context ? context.store.getState : noop, context ? context.store.getState : noop, outOfContextSelector, refEquality);
+}
Index: node_modules/recharts/es6/state/keyboardEventsMiddleware.js
===================================================================
--- node_modules/recharts/es6/state/keyboardEventsMiddleware.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/keyboardEventsMiddleware.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,81 @@
+import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
+import { setKeyboardInteraction } from './tooltipSlice';
+import { selectTooltipAxisDomain, selectTooltipAxisTicks, selectTooltipDisplayedData } from './selectors/tooltipSelectors';
+import { selectCoordinateForDefaultIndex } from './selectors/selectors';
+import { selectChartDirection, selectTooltipAxisDataKey } from './selectors/axisSelectors';
+import { combineActiveTooltipIndex } from './selectors/combiners/combineActiveTooltipIndex';
+export var keyDownAction = createAction('keyDown');
+export var focusAction = createAction('focus');
+export var keyboardEventsMiddleware = createListenerMiddleware();
+keyboardEventsMiddleware.startListening({
+  actionCreator: keyDownAction,
+  effect: (action, listenerApi) => {
+    var state = listenerApi.getState();
+    var accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;
+    if (!accessibilityLayerIsActive) {
+      return;
+    }
+    var {
+      keyboardInteraction
+    } = state.tooltip;
+    var key = action.payload;
+    if (key !== 'ArrowRight' && key !== 'ArrowLeft' && key !== 'Enter') {
+      return;
+    }
+
+    // TODO this is lacking index for charts that do not support numeric indexes
+    var resolvedIndex = combineActiveTooltipIndex(keyboardInteraction, selectTooltipDisplayedData(state), selectTooltipAxisDataKey(state), selectTooltipAxisDomain(state));
+    var currentIndex = resolvedIndex == null ? -1 : Number(resolvedIndex);
+    if (!Number.isFinite(currentIndex) || currentIndex < 0) {
+      return;
+    }
+    var tooltipTicks = selectTooltipAxisTicks(state);
+    if (key === 'Enter') {
+      var _coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(keyboardInteraction.index));
+      listenerApi.dispatch(setKeyboardInteraction({
+        active: !keyboardInteraction.active,
+        activeIndex: keyboardInteraction.index,
+        activeCoordinate: _coordinate
+      }));
+      return;
+    }
+    var direction = selectChartDirection(state);
+    var directionMultiplier = direction === 'left-to-right' ? 1 : -1;
+    var movement = key === 'ArrowRight' ? 1 : -1;
+    var nextIndex = currentIndex + movement * directionMultiplier;
+    if (tooltipTicks == null || nextIndex >= tooltipTicks.length || nextIndex < 0) {
+      return;
+    }
+    var coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(nextIndex));
+    listenerApi.dispatch(setKeyboardInteraction({
+      active: true,
+      activeIndex: nextIndex.toString(),
+      activeCoordinate: coordinate
+    }));
+  }
+});
+keyboardEventsMiddleware.startListening({
+  actionCreator: focusAction,
+  effect: (_action, listenerApi) => {
+    var state = listenerApi.getState();
+    var accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;
+    if (!accessibilityLayerIsActive) {
+      return;
+    }
+    var {
+      keyboardInteraction
+    } = state.tooltip;
+    if (keyboardInteraction.active) {
+      return;
+    }
+    if (keyboardInteraction.index == null) {
+      var nextIndex = '0';
+      var coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(nextIndex));
+      listenerApi.dispatch(setKeyboardInteraction({
+        active: true,
+        activeIndex: nextIndex,
+        activeCoordinate: coordinate
+      }));
+    }
+  }
+});
Index: node_modules/recharts/es6/state/layoutSlice.js
===================================================================
--- node_modules/recharts/es6/state/layoutSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/layoutSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,43 @@
+import { createSlice } from '@reduxjs/toolkit';
+var initialState = {
+  layoutType: 'horizontal',
+  width: 0,
+  height: 0,
+  margin: {
+    top: 5,
+    right: 5,
+    bottom: 5,
+    left: 5
+  },
+  scale: 1
+};
+var chartLayoutSlice = createSlice({
+  name: 'chartLayout',
+  initialState,
+  reducers: {
+    setLayout(state, action) {
+      state.layoutType = action.payload;
+    },
+    setChartSize(state, action) {
+      state.width = action.payload.width;
+      state.height = action.payload.height;
+    },
+    setMargin(state, action) {
+      var _action$payload$top, _action$payload$right, _action$payload$botto, _action$payload$left;
+      state.margin.top = (_action$payload$top = action.payload.top) !== null && _action$payload$top !== void 0 ? _action$payload$top : 0;
+      state.margin.right = (_action$payload$right = action.payload.right) !== null && _action$payload$right !== void 0 ? _action$payload$right : 0;
+      state.margin.bottom = (_action$payload$botto = action.payload.bottom) !== null && _action$payload$botto !== void 0 ? _action$payload$botto : 0;
+      state.margin.left = (_action$payload$left = action.payload.left) !== null && _action$payload$left !== void 0 ? _action$payload$left : 0;
+    },
+    setScale(state, action) {
+      state.scale = action.payload;
+    }
+  }
+});
+export var {
+  setMargin,
+  setLayout,
+  setChartSize,
+  setScale
+} = chartLayoutSlice.actions;
+export var chartLayoutReducer = chartLayoutSlice.reducer;
Index: node_modules/recharts/es6/state/legendSlice.js
===================================================================
--- node_modules/recharts/es6/state/legendSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/legendSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,76 @@
+import { createSlice, current, prepareAutoBatched } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+
+/**
+ * The properties inside this state update independently of each other and quite often.
+ * When selecting, never select the whole state because you are going to get
+ * unnecessary re-renders. Select only the properties you need.
+ *
+ * This is why this state type is not exported - don't use it directly.
+ */
+
+var initialState = {
+  settings: {
+    layout: 'horizontal',
+    align: 'center',
+    verticalAlign: 'middle',
+    itemSorter: 'value'
+  },
+  size: {
+    width: 0,
+    height: 0
+  },
+  payload: []
+};
+var legendSlice = createSlice({
+  name: 'legend',
+  initialState,
+  reducers: {
+    setLegendSize(state, action) {
+      state.size.width = action.payload.width;
+      state.size.height = action.payload.height;
+    },
+    setLegendSettings(state, action) {
+      state.settings.align = action.payload.align;
+      state.settings.layout = action.payload.layout;
+      state.settings.verticalAlign = action.payload.verticalAlign;
+      state.settings.itemSorter = action.payload.itemSorter;
+    },
+    addLegendPayload: {
+      reducer(state, action) {
+        state.payload.push(castDraft(action.payload));
+      },
+      prepare: prepareAutoBatched()
+    },
+    replaceLegendPayload: {
+      reducer(state, action) {
+        var {
+          prev,
+          next
+        } = action.payload;
+        var index = current(state).payload.indexOf(castDraft(prev));
+        if (index > -1) {
+          state.payload[index] = castDraft(next);
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    removeLegendPayload: {
+      reducer(state, action) {
+        var index = current(state).payload.indexOf(castDraft(action.payload));
+        if (index > -1) {
+          state.payload.splice(index, 1);
+        }
+      },
+      prepare: prepareAutoBatched()
+    }
+  }
+});
+export var {
+  setLegendSize,
+  setLegendSettings,
+  addLegendPayload,
+  replaceLegendPayload,
+  removeLegendPayload
+} = legendSlice.actions;
+export var legendReducer = legendSlice.reducer;
Index: node_modules/recharts/es6/state/mouseEventsMiddleware.js
===================================================================
--- node_modules/recharts/es6/state/mouseEventsMiddleware.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/mouseEventsMiddleware.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,68 @@
+import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
+import { mouseLeaveChart, setMouseClickAxisIndex, setMouseOverAxisIndex } from './tooltipSlice';
+import { selectActivePropsFromChartPointer } from './selectors/selectActivePropsFromChartPointer';
+import { selectTooltipEventType } from './selectors/selectTooltipEventType';
+import { getChartPointer } from '../util/getChartPointer';
+export var mouseClickAction = createAction('mouseClick');
+export var mouseClickMiddleware = createListenerMiddleware();
+
+// TODO: there's a bug here when you click the chart the activeIndex resets to zero
+mouseClickMiddleware.startListening({
+  actionCreator: mouseClickAction,
+  effect: (action, listenerApi) => {
+    var mousePointer = action.payload;
+    var activeProps = selectActivePropsFromChartPointer(listenerApi.getState(), getChartPointer(mousePointer));
+    if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {
+      listenerApi.dispatch(setMouseClickAxisIndex({
+        activeIndex: activeProps.activeIndex,
+        activeDataKey: undefined,
+        activeCoordinate: activeProps.activeCoordinate
+      }));
+    }
+  }
+});
+export var mouseMoveAction = createAction('mouseMove');
+export var mouseMoveMiddleware = createListenerMiddleware();
+
+/*
+ * This single rafId is safe because:
+ * 1. Each chart has its own Redux store instance with its own middleware
+ * 2. mouseMoveAction only fires from one DOM element (the chart wrapper)
+ * 3. Rapid mousemove events from the same element SHOULD debounce - we only care about the latest position
+ * This is different from externalEventsMiddleware which handles multiple event types
+ * (click, mouseenter, mouseleave, etc.) that should NOT cancel each other.
+ */
+var rafId = null;
+mouseMoveMiddleware.startListening({
+  actionCreator: mouseMoveAction,
+  effect: (action, listenerApi) => {
+    var mousePointer = action.payload;
+
+    // Cancel any pending animation frame
+    if (rafId !== null) {
+      cancelAnimationFrame(rafId);
+    }
+    var chartPointer = getChartPointer(mousePointer);
+
+    // Schedule the dispatch for the next animation frame
+    rafId = requestAnimationFrame(() => {
+      var state = listenerApi.getState();
+      var tooltipEventType = selectTooltipEventType(state, state.tooltip.settings.shared);
+      // this functionality only applies to charts that have axes
+      if (tooltipEventType === 'axis') {
+        var activeProps = selectActivePropsFromChartPointer(state, chartPointer);
+        if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {
+          listenerApi.dispatch(setMouseOverAxisIndex({
+            activeIndex: activeProps.activeIndex,
+            activeDataKey: undefined,
+            activeCoordinate: activeProps.activeCoordinate
+          }));
+        } else {
+          // this is needed to clear tooltip state when the mouse moves out of the inRange (svg - offset) function, but not yet out of the svg
+          listenerApi.dispatch(mouseLeaveChart());
+        }
+      }
+      rafId = null;
+    });
+  }
+});
Index: node_modules/recharts/es6/state/optionsSlice.js
===================================================================
--- node_modules/recharts/es6/state/optionsSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/optionsSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,44 @@
+import { createSlice } from '@reduxjs/toolkit';
+import { isNan } from '../util/DataUtils';
+
+/**
+ * These chart options are decided internally, by Recharts,
+ * and will not change during the lifetime of the chart.
+ *
+ * Changing these options can be done by swapping the root element
+ * which will make a brand-new Redux store.
+ *
+ * If you want to store options that can be changed by the user,
+ * use UpdatableChartOptions in rootPropsSlice.ts.
+ */
+
+export var arrayTooltipSearcher = (data, strIndex) => {
+  if (!strIndex) return undefined;
+  if (!Array.isArray(data)) return undefined;
+  var numIndex = Number.parseInt(strIndex, 10);
+  if (isNan(numIndex)) {
+    return undefined;
+  }
+  return data[numIndex];
+};
+var initialState = {
+  chartName: '',
+  tooltipPayloadSearcher: () => undefined,
+  eventEmitter: undefined,
+  defaultTooltipEventType: 'axis'
+};
+var optionsSlice = createSlice({
+  name: 'options',
+  initialState,
+  reducers: {
+    createEventEmitter: state => {
+      if (state.eventEmitter == null) {
+        state.eventEmitter = Symbol('rechartsEventEmitter');
+      }
+    }
+  }
+});
+export var optionsReducer = optionsSlice.reducer;
+export var {
+  createEventEmitter
+} = optionsSlice.actions;
Index: node_modules/recharts/es6/state/polarAxisSlice.js
===================================================================
--- node_modules/recharts/es6/state/polarAxisSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/polarAxisSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,31 @@
+import { createSlice } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+var initialState = {
+  radiusAxis: {},
+  angleAxis: {}
+};
+var polarAxisSlice = createSlice({
+  name: 'polarAxis',
+  initialState,
+  reducers: {
+    addRadiusAxis(state, action) {
+      state.radiusAxis[action.payload.id] = castDraft(action.payload);
+    },
+    removeRadiusAxis(state, action) {
+      delete state.radiusAxis[action.payload.id];
+    },
+    addAngleAxis(state, action) {
+      state.angleAxis[action.payload.id] = castDraft(action.payload);
+    },
+    removeAngleAxis(state, action) {
+      delete state.angleAxis[action.payload.id];
+    }
+  }
+});
+export var {
+  addRadiusAxis,
+  removeRadiusAxis,
+  addAngleAxis,
+  removeAngleAxis
+} = polarAxisSlice.actions;
+export var polarAxisReducer = polarAxisSlice.reducer;
Index: node_modules/recharts/es6/state/polarOptionsSlice.js
===================================================================
--- node_modules/recharts/es6/state/polarOptionsSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/polarOptionsSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,16 @@
+import { createSlice } from '@reduxjs/toolkit';
+var initialState = null;
+var reducers = {
+  updatePolarOptions: (_state, action) => {
+    return action.payload;
+  }
+};
+var polarOptionsSlice = createSlice({
+  name: 'polarOptions',
+  initialState,
+  reducers
+});
+export var {
+  updatePolarOptions
+} = polarOptionsSlice.actions;
+export var polarOptionsReducer = polarOptionsSlice.reducer;
Index: node_modules/recharts/es6/state/reduxDevtoolsJsonStringifyReplacer.js
===================================================================
--- node_modules/recharts/es6/state/reduxDevtoolsJsonStringifyReplacer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/reduxDevtoolsJsonStringifyReplacer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,12 @@
+export function reduxDevtoolsJsonStringifyReplacer(key, value) {
+  if (value instanceof HTMLElement) {
+    return "HTMLElement <".concat(value.tagName, " class=\"").concat(value.className, "\">");
+  }
+  if (value === window) {
+    return 'global.window';
+  }
+  if (key === 'children' && typeof value === 'object' && value !== null) {
+    return '<<CHILDREN>>';
+  }
+  return value;
+}
Index: node_modules/recharts/es6/state/referenceElementsSlice.js
===================================================================
--- node_modules/recharts/es6/state/referenceElementsSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/referenceElementsSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,49 @@
+import { createSlice, current } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+var initialState = {
+  dots: [],
+  areas: [],
+  lines: []
+};
+export var referenceElementsSlice = createSlice({
+  name: 'referenceElements',
+  initialState,
+  reducers: {
+    addDot: (state, action) => {
+      state.dots.push(action.payload);
+    },
+    removeDot: (state, action) => {
+      var index = current(state).dots.findIndex(dot => dot === action.payload);
+      if (index !== -1) {
+        state.dots.splice(index, 1);
+      }
+    },
+    addArea: (state, action) => {
+      state.areas.push(action.payload);
+    },
+    removeArea: (state, action) => {
+      var index = current(state).areas.findIndex(area => area === action.payload);
+      if (index !== -1) {
+        state.areas.splice(index, 1);
+      }
+    },
+    addLine: (state, action) => {
+      state.lines.push(castDraft(action.payload));
+    },
+    removeLine: (state, action) => {
+      var index = current(state).lines.findIndex(line => line === action.payload);
+      if (index !== -1) {
+        state.lines.splice(index, 1);
+      }
+    }
+  }
+});
+export var {
+  addDot,
+  removeDot,
+  addArea,
+  removeArea,
+  addLine,
+  removeLine
+} = referenceElementsSlice.actions;
+export var referenceElementsReducer = referenceElementsSlice.reducer;
Index: node_modules/recharts/es6/state/rootPropsSlice.js
===================================================================
--- node_modules/recharts/es6/state/rootPropsSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/rootPropsSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,44 @@
+import { createSlice } from '@reduxjs/toolkit';
+
+/**
+ * These are chart options that users can choose - which means they can also
+ * choose to change them which should trigger a re-render.
+ */
+
+export var initialState = {
+  accessibilityLayer: true,
+  barCategoryGap: '10%',
+  barGap: 4,
+  barSize: undefined,
+  className: undefined,
+  maxBarSize: undefined,
+  stackOffset: 'none',
+  syncId: undefined,
+  syncMethod: 'index',
+  baseValue: undefined,
+  reverseStackOrder: false
+};
+var rootPropsSlice = createSlice({
+  name: 'rootProps',
+  initialState,
+  reducers: {
+    updateOptions: (state, action) => {
+      var _action$payload$barGa;
+      state.accessibilityLayer = action.payload.accessibilityLayer;
+      state.barCategoryGap = action.payload.barCategoryGap;
+      state.barGap = (_action$payload$barGa = action.payload.barGap) !== null && _action$payload$barGa !== void 0 ? _action$payload$barGa : initialState.barGap;
+      state.barSize = action.payload.barSize;
+      state.maxBarSize = action.payload.maxBarSize;
+      state.stackOffset = action.payload.stackOffset;
+      state.syncId = action.payload.syncId;
+      state.syncMethod = action.payload.syncMethod;
+      state.className = action.payload.className;
+      state.baseValue = action.payload.baseValue;
+      state.reverseStackOrder = action.payload.reverseStackOrder;
+    }
+  }
+});
+export var rootPropsReducer = rootPropsSlice.reducer;
+export var {
+  updateOptions
+} = rootPropsSlice.actions;
Index: node_modules/recharts/es6/state/selectors/areaSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/areaSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/areaSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,98 @@
+import { createSelector } from 'reselect';
+import { computeArea } from '../../cartesian/Area';
+import { selectAxisWithScale, selectStackGroups, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems } from './axisSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectChartDataWithIndexesIfNotInPanoramaPosition3 } from './dataSelectors';
+import { getBandSizeOfAxis, isCategoricalAxis } from '../../util/ChartUtils';
+import { getStackSeriesIdentifier } from '../../util/stacks/getStackSeriesIdentifier';
+import { selectChartBaseValue } from './rootPropsSelectors';
+import { selectXAxisIdFromGraphicalItemId, selectYAxisIdFromGraphicalItemId } from './graphicalItemSelectors';
+var selectXAxisWithScale = (state, graphicalItemId, isPanorama) => selectAxisWithScale(state, 'xAxis', selectXAxisIdFromGraphicalItemId(state, graphicalItemId), isPanorama);
+var selectXAxisTicks = (state, graphicalItemId, isPanorama) => selectTicksOfGraphicalItem(state, 'xAxis', selectXAxisIdFromGraphicalItemId(state, graphicalItemId), isPanorama);
+var selectYAxisWithScale = (state, graphicalItemId, isPanorama) => selectAxisWithScale(state, 'yAxis', selectYAxisIdFromGraphicalItemId(state, graphicalItemId), isPanorama);
+var selectYAxisTicks = (state, graphicalItemId, isPanorama) => selectTicksOfGraphicalItem(state, 'yAxis', selectYAxisIdFromGraphicalItemId(state, graphicalItemId), isPanorama);
+var selectBandSize = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {
+  if (isCategoricalAxis(layout, 'xAxis')) {
+    return getBandSizeOfAxis(xAxis, xAxisTicks, false);
+  }
+  return getBandSizeOfAxis(yAxis, yAxisTicks, false);
+});
+var pickAreaId = (_state, id) => id;
+
+/*
+ * There is a race condition problem because we read some data from props and some from the state.
+ * The state is updated through a dispatch and is one render behind,
+ * and so we have this weird one tick render where the displayedData in one selector have the old dataKey
+ * but the new dataKey in another selector.
+ *
+ * A proper fix is to either move everything into the state, or read the dataKey always from props
+ * - but this is a smaller change.
+ */
+var selectSynchronisedAreaSettings = createSelector([selectUnfilteredCartesianItems, pickAreaId], (graphicalItems, id) => graphicalItems.filter(item => item.type === 'area').find(item => item.id === id));
+var selectNumericalAxisType = state => {
+  var layout = selectChartLayout(state);
+  var isXAxisCategorical = isCategoricalAxis(layout, 'xAxis');
+  return isXAxisCategorical ? 'yAxis' : 'xAxis';
+};
+var selectNumericalAxisIdFromGraphicalItemId = (state, graphicalItemId) => {
+  var axisType = selectNumericalAxisType(state);
+  if (axisType === 'yAxis') {
+    return selectYAxisIdFromGraphicalItemId(state, graphicalItemId);
+  }
+  return selectXAxisIdFromGraphicalItemId(state, graphicalItemId);
+};
+var selectNumericalAxisStackGroups = (state, graphicalItemId, isPanorama) => selectStackGroups(state, selectNumericalAxisType(state), selectNumericalAxisIdFromGraphicalItemId(state, graphicalItemId), isPanorama);
+export var selectGraphicalItemStackedData = createSelector([selectSynchronisedAreaSettings, selectNumericalAxisStackGroups], (areaSettings, stackGroups) => {
+  var _stackGroups$stackId;
+  if (areaSettings == null || stackGroups == null) {
+    return undefined;
+  }
+  var {
+    stackId
+  } = areaSettings;
+  var stackSeriesIdentifier = getStackSeriesIdentifier(areaSettings);
+  if (stackId == null || stackSeriesIdentifier == null) {
+    return undefined;
+  }
+  var groups = (_stackGroups$stackId = stackGroups[stackId]) === null || _stackGroups$stackId === void 0 ? void 0 : _stackGroups$stackId.stackedData;
+  var found = groups === null || groups === void 0 ? void 0 : groups.find(v => v.key === stackSeriesIdentifier);
+  if (found == null) {
+    return undefined;
+  }
+  return found.map(item => [item[0], item[1]]);
+});
+export var selectArea = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectGraphicalItemStackedData, selectChartDataWithIndexesIfNotInPanoramaPosition3, selectBandSize, selectSynchronisedAreaSettings, selectChartBaseValue], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks, stackedData, _ref, bandSize, areaSettings, chartBaseValue) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (areaSettings == null || layout !== 'horizontal' && layout !== 'vertical' || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || xAxisTicks.length === 0 || yAxisTicks.length === 0 || bandSize == null) {
+    return undefined;
+  }
+  var {
+    data
+  } = areaSettings;
+  var displayedData;
+  if (data && data.length > 0) {
+    displayedData = data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+  return computeArea({
+    layout,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    dataStartIndex,
+    areaSettings,
+    stackedData,
+    displayedData,
+    chartBaseValue,
+    bandSize
+  });
+});
Index: node_modules/recharts/es6/state/selectors/arrayEqualityCheck.js
===================================================================
--- node_modules/recharts/es6/state/selectors/arrayEqualityCheck.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/arrayEqualityCheck.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,30 @@
+/**
+ * Checks if two arrays are equal, treating empty arrays as equal regardless of reference.
+ * If both arrays are non-empty, it checks for reference equality.
+ * @param a
+ * @param b
+ */
+export function emptyArraysAreEqualCheck(a, b) {
+  if (Array.isArray(a) && Array.isArray(b) && a.length === 0 && b.length === 0) {
+    // empty arrays are always equal, regardless of reference
+    return true;
+  }
+  return a === b;
+}
+
+/**
+ * Checks if two arrays have the same contents in the same order.
+ * @param a
+ * @param b
+ */
+export function arrayContentsAreEqualCheck(a, b) {
+  if (a.length === b.length) {
+    for (var i = 0; i < a.length; i++) {
+      if (a[i] !== b[i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+  return false;
+}
Index: node_modules/recharts/es6/state/selectors/axisSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/axisSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/axisSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1334 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import range from 'es-toolkit/compat/range';
+import * as d3Scales from 'victory-vendor/d3-scale';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { getDomainOfStackGroups, getStackedData, getValueByDataKey, isCategoricalAxis } from '../../util/ChartUtils';
+import { selectChartDataWithIndexes, selectChartDataWithIndexesIfNotInPanoramaPosition4 } from './dataSelectors';
+import { isWellFormedNumberDomain, numericalDomainSpecifiedWithoutRequiringData, parseNumericalUserDomain } from '../../util/isDomainSpecifiedByUser';
+import { getPercentValue, hasDuplicate, isNan, isNotNil, isNumOrStr, mathSign, upperFirst } from '../../util/DataUtils';
+import { isWellBehavedNumber } from '../../util/isWellBehavedNumber';
+import { getNiceTickValues, getTickValuesFixedDomain } from '../../util/scale';
+import { selectChartHeight, selectChartWidth } from './containerSelectors';
+import { selectAllXAxes, selectAllYAxes } from './selectAllAxes';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { selectBrushDimensions, selectBrushSettings } from './brushSelectors';
+import { selectBarCategoryGap, selectChartName, selectReverseStackOrder, selectStackOffsetType } from './rootPropsSelectors';
+import { selectAngleAxis, selectAngleAxisRange, selectRadiusAxis, selectRadiusAxisRange } from './polarAxisSelectors';
+import { pickAxisType } from './pickAxisType';
+import { pickAxisId } from './pickAxisId';
+import { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';
+import { DEFAULT_Y_AXIS_WIDTH } from '../../util/Constants';
+import { getStackSeriesIdentifier } from '../../util/stacks/getStackSeriesIdentifier';
+import { combineDisplayedStackedData } from './combiners/combineDisplayedStackedData';
+import { isStacked } from '../types/StackedGraphicalItem';
+import { numberDomainEqualityCheck } from './numberDomainEqualityCheck';
+import { emptyArraysAreEqualCheck } from './arrayEqualityCheck';
+import { selectTooltipAxisType } from './selectTooltipAxisType';
+import { selectTooltipAxisId } from './selectTooltipAxisId';
+import { rechartsScaleFactory } from '../../util/scale/RechartsScale';
+import { combineCheckedDomain } from './combiners/combineCheckedDomain';
+export var defaultNumericDomain = [0, 'auto'];
+/**
+ * If an axis is not explicitly defined as an element,
+ * we still need to render something in the chart and we need
+ * some object to hold the domain and default settings.
+ */
+export var implicitXAxis = {
+  allowDataOverflow: false,
+  allowDecimals: true,
+  allowDuplicatedCategory: true,
+  angle: 0,
+  dataKey: undefined,
+  domain: undefined,
+  height: 30,
+  hide: true,
+  id: 0,
+  includeHidden: false,
+  interval: 'preserveEnd',
+  minTickGap: 5,
+  mirror: false,
+  name: undefined,
+  orientation: 'bottom',
+  padding: {
+    left: 0,
+    right: 0
+  },
+  reversed: false,
+  scale: 'auto',
+  tick: true,
+  tickCount: 5,
+  tickFormatter: undefined,
+  ticks: undefined,
+  type: 'category',
+  unit: undefined
+};
+export var selectXAxisSettingsNoDefaults = (state, axisId) => {
+  return state.cartesianAxis.xAxis[axisId];
+};
+export var selectXAxisSettings = (state, axisId) => {
+  var axis = selectXAxisSettingsNoDefaults(state, axisId);
+  if (axis == null) {
+    return implicitXAxis;
+  }
+  return axis;
+};
+
+/**
+ * If an axis is not explicitly defined as an element,
+ * we still need to render something in the chart and we need
+ * some object to hold the domain and default settings.
+ */
+export var implicitYAxis = {
+  allowDataOverflow: false,
+  allowDecimals: true,
+  allowDuplicatedCategory: true,
+  angle: 0,
+  dataKey: undefined,
+  domain: defaultNumericDomain,
+  hide: true,
+  id: 0,
+  includeHidden: false,
+  interval: 'preserveEnd',
+  minTickGap: 5,
+  mirror: false,
+  name: undefined,
+  orientation: 'left',
+  padding: {
+    top: 0,
+    bottom: 0
+  },
+  reversed: false,
+  scale: 'auto',
+  tick: true,
+  tickCount: 5,
+  tickFormatter: undefined,
+  ticks: undefined,
+  type: 'number',
+  unit: undefined,
+  width: DEFAULT_Y_AXIS_WIDTH
+};
+export var selectYAxisSettingsNoDefaults = (state, axisId) => {
+  return state.cartesianAxis.yAxis[axisId];
+};
+export var selectYAxisSettings = (state, axisId) => {
+  var axis = selectYAxisSettingsNoDefaults(state, axisId);
+  if (axis == null) {
+    return implicitYAxis;
+  }
+  return axis;
+};
+export var implicitZAxis = {
+  domain: [0, 'auto'],
+  includeHidden: false,
+  reversed: false,
+  allowDataOverflow: false,
+  allowDuplicatedCategory: false,
+  dataKey: undefined,
+  id: 0,
+  name: '',
+  range: [64, 64],
+  scale: 'auto',
+  type: 'number',
+  unit: ''
+};
+export var selectZAxisSettings = (state, axisId) => {
+  var axis = state.cartesianAxis.zAxis[axisId];
+  if (axis == null) {
+    return implicitZAxis;
+  }
+  return axis;
+};
+export var selectBaseAxis = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSettings(state, axisId);
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSettings(state, axisId);
+      }
+    case 'zAxis':
+      {
+        return selectZAxisSettings(state, axisId);
+      }
+    case 'angleAxis':
+      {
+        return selectAngleAxis(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return selectRadiusAxis(state, axisId);
+      }
+    default:
+      throw new Error("Unexpected axis type: ".concat(axisType));
+  }
+};
+var selectCartesianAxisSettings = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSettings(state, axisId);
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSettings(state, axisId);
+      }
+    default:
+      throw new Error("Unexpected axis type: ".concat(axisType));
+  }
+};
+
+/**
+ * Selects either an X or Y axis. Doesn't work with Z axis - for that, instead use selectBaseAxis.
+ * @param state Root state
+ * @param axisType xAxis | yAxis
+ * @param axisId xAxisId | yAxisId
+ * @returns axis settings object
+ */
+export var selectRenderableAxisSettings = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSettings(state, axisId);
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSettings(state, axisId);
+      }
+    case 'angleAxis':
+      {
+        return selectAngleAxis(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return selectRadiusAxis(state, axisId);
+      }
+    default:
+      throw new Error("Unexpected axis type: ".concat(axisType));
+  }
+};
+
+/**
+ * @param state RechartsRootState
+ * @return boolean true if there is at least one Bar or RadialBar
+ */
+export var selectHasBar = state => state.graphicalItems.cartesianItems.some(item => item.type === 'bar') || state.graphicalItems.polarItems.some(item => item.type === 'radialBar');
+
+/**
+ * Filters CartesianGraphicalItemSettings by the relevant axis ID
+ * @param axisType 'xAxis' | 'yAxis' | 'zAxis' | 'radiusAxis' | 'angleAxis'
+ * @param axisId from props, defaults to 0
+ *
+ * @returns Predicate function that return true for CartesianGraphicalItemSettings that are relevant to the specified axis
+ */
+export function itemAxisPredicate(axisType, axisId) {
+  return item => {
+    switch (axisType) {
+      case 'xAxis':
+        // This is sensitive to the data type, as 0 !== '0'. I wonder if we should be more flexible. How does 2.x branch behave? TODO write test for that
+        return 'xAxisId' in item && item.xAxisId === axisId;
+      case 'yAxis':
+        return 'yAxisId' in item && item.yAxisId === axisId;
+      case 'zAxis':
+        return 'zAxisId' in item && item.zAxisId === axisId;
+      case 'angleAxis':
+        return 'angleAxisId' in item && item.angleAxisId === axisId;
+      case 'radiusAxis':
+        return 'radiusAxisId' in item && item.radiusAxisId === axisId;
+      default:
+        return false;
+    }
+  };
+}
+
+// TODO appears there is a bug where this selector is called from polar context, find and fix it.
+export var selectUnfilteredCartesianItems = state => state.graphicalItems.cartesianItems;
+var selectAxisPredicate = createSelector([pickAxisType, pickAxisId], itemAxisPredicate);
+export var combineGraphicalItemsSettings = (graphicalItems, axisSettings, axisPredicate) => graphicalItems.filter(axisPredicate).filter(item => {
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.includeHidden) === true) {
+    return true;
+  }
+  return !item.hide;
+});
+export var selectCartesianItemsSettings = createSelector([selectUnfilteredCartesianItems, selectBaseAxis, selectAxisPredicate], combineGraphicalItemsSettings, {
+  memoizeOptions: {
+    resultEqualityCheck: emptyArraysAreEqualCheck
+  }
+});
+export var selectStackedCartesianItemsSettings = createSelector([selectCartesianItemsSettings], cartesianItems => {
+  return cartesianItems.filter(item => item.type === 'area' || item.type === 'bar').filter(isStacked);
+});
+export var filterGraphicalNotStackedItems = cartesianItems => cartesianItems.filter(item => !('stackId' in item) || item.stackId === undefined);
+var selectCartesianItemsSettingsExceptStacked = createSelector([selectCartesianItemsSettings], filterGraphicalNotStackedItems);
+export var combineGraphicalItemsData = cartesianItems => cartesianItems.map(item => item.data).filter(Boolean).flat(1);
+
+/**
+ * This is a "cheap" selector - it returns the data but doesn't iterate them, so it is not sensitive on the array length.
+ * Also does not apply dataKey yet.
+ * @param state RechartsRootState
+ * @returns data defined on the chart graphical items, such as Line or Scatter or Pie, and filtered with appropriate dataKey
+ */
+export var selectCartesianGraphicalItemsData = createSelector([selectCartesianItemsSettings], combineGraphicalItemsData, {
+  memoizeOptions: {
+    resultEqualityCheck: emptyArraysAreEqualCheck
+  }
+});
+export var combineDisplayedData = (graphicalItemsData, _ref) => {
+  var {
+    chartData = [],
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (graphicalItemsData.length > 0) {
+    /*
+     * There is no slicing when data is defined on graphical items. Why?
+     * Because Brush ignores data defined on graphical items,
+     * and does not render.
+     * So Brush will never show up in a Scatter chart for example.
+     * This is something we will need to fix.
+     *
+     * Now, when the root chart data is not defined, the dataEndIndex is 0,
+     * which means the itemsData will be sliced to an empty array anyway.
+     * But that's an implementation detail, and we can fix that too.
+     *
+     * Also, in absence of Axis dataKey, we use the dataKey from each item, respectively.
+     * This is the usual pattern for numerical axis, that is the one where bars go up:
+     * users don't specify any dataKey by default and expect the axis to "just match the data".
+     */
+    return graphicalItemsData;
+  }
+  return chartData.slice(dataStartIndex, dataEndIndex + 1);
+};
+
+/**
+ * This selector will return all data there is in the chart: graphical items, chart root, all together.
+ * Useful for figuring out an axis domain (because that needs to know of everything),
+ * not useful for rendering individual graphical elements (because they need to know which data is theirs and which is not).
+ *
+ * This function will discard the original indexes, so it is also not useful for anything that depends on ordering.
+ */
+export var selectDisplayedData = createSelector([selectCartesianGraphicalItemsData, selectChartDataWithIndexesIfNotInPanoramaPosition4], combineDisplayedData);
+export var combineAppliedValues = (data, axisSettings, items) => {
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {
+    return data.map(item => ({
+      value: getValueByDataKey(item, axisSettings.dataKey)
+    }));
+  }
+  if (items.length > 0) {
+    return items.map(item => item.dataKey).flatMap(dataKey => data.map(entry => ({
+      value: getValueByDataKey(entry, dataKey)
+    })));
+  }
+  return data.map(entry => ({
+    value: entry
+  }));
+};
+
+/**
+ * This selector will return all values with the appropriate dataKey applied on them.
+ * Which dataKey is appropriate depends on where it is defined.
+ *
+ * This is an expensive selector - it will iterate all data and compute their value using the provided dataKey.
+ */
+export var selectAllAppliedValues = createSelector([selectDisplayedData, selectBaseAxis, selectCartesianItemsSettings], combineAppliedValues);
+export function isErrorBarRelevantForAxisType(axisType, errorBar) {
+  switch (axisType) {
+    case 'xAxis':
+      return errorBar.direction === 'x';
+    case 'yAxis':
+      return errorBar.direction === 'y';
+    default:
+      return false;
+  }
+}
+function makeNumber(val) {
+  if (isNumOrStr(val) || val instanceof Date) {
+    var n = Number(val);
+    if (isWellBehavedNumber(n)) {
+      return n;
+    }
+  }
+  return undefined;
+}
+function makeDomain(val) {
+  if (Array.isArray(val)) {
+    var attempt = [makeNumber(val[0]), makeNumber(val[1])];
+    if (isWellFormedNumberDomain(attempt)) {
+      return attempt;
+    }
+    return undefined;
+  }
+  var n = makeNumber(val);
+  if (n == null) {
+    return undefined;
+  }
+  return [n, n];
+}
+function onlyAllowNumbers(data) {
+  return data.map(makeNumber).filter(isNotNil);
+}
+
+/**
+ * @param entry One item in the 'data' array. Could be anything really - this is defined externally. This is the raw, before dataKey application
+ * @param appliedValue This is the result of applying the 'main' dataKey on the `entry`.
+ * @param relevantErrorBars Error bars that are relevant for the current axis and layout and all that.
+ * @return either undefined or an array of ErrorValue
+ */
+export function getErrorDomainByDataKey(entry, appliedValue, relevantErrorBars) {
+  if (!relevantErrorBars || typeof appliedValue !== 'number' || isNan(appliedValue)) {
+    return [];
+  }
+  if (!relevantErrorBars.length) {
+    return [];
+  }
+  return onlyAllowNumbers(relevantErrorBars.flatMap(eb => {
+    var errorValue = getValueByDataKey(entry, eb.dataKey);
+    var lowBound, highBound;
+    if (Array.isArray(errorValue)) {
+      [lowBound, highBound] = errorValue;
+    } else {
+      lowBound = highBound = errorValue;
+    }
+    if (!isWellBehavedNumber(lowBound) || !isWellBehavedNumber(highBound)) {
+      return undefined;
+    }
+    return [appliedValue - lowBound, appliedValue + highBound];
+  }));
+}
+export var selectTooltipAxis = state => {
+  var axisType = selectTooltipAxisType(state);
+  var axisId = selectTooltipAxisId(state);
+  return selectRenderableAxisSettings(state, axisType, axisId);
+};
+export var selectTooltipAxisDataKey = createSelector([selectTooltipAxis], axis => axis === null || axis === void 0 ? void 0 : axis.dataKey);
+export var selectDisplayedStackedData = createSelector([selectStackedCartesianItemsSettings, selectChartDataWithIndexesIfNotInPanoramaPosition4, selectTooltipAxis], combineDisplayedStackedData);
+export var combineStackGroups = (displayedData, items, stackOffsetType, reverseStackOrder) => {
+  var initialItemsGroups = {};
+  var itemsGroup = items.reduce((acc, item) => {
+    if (item.stackId == null) {
+      return acc;
+    }
+    var stack = acc[item.stackId];
+    if (stack == null) {
+      stack = [];
+    }
+    stack.push(item);
+    acc[item.stackId] = stack;
+    return acc;
+  }, initialItemsGroups);
+  return Object.fromEntries(Object.entries(itemsGroup).map(_ref2 => {
+    var [stackId, graphicalItems] = _ref2;
+    var orderedGraphicalItems = reverseStackOrder ? [...graphicalItems].reverse() : graphicalItems;
+    var dataKeys = orderedGraphicalItems.map(getStackSeriesIdentifier);
+    return [stackId, {
+      // @ts-expect-error getStackedData requires that the input is array of objects, Recharts does not test for that
+      stackedData: getStackedData(displayedData, dataKeys, stackOffsetType),
+      graphicalItems: orderedGraphicalItems
+    }];
+  }));
+};
+
+/**
+ * Stack groups are groups of graphical items that stack on each other.
+ * Stack is a function of axis type (X, Y), axis ID, and stack ID.
+ * Graphical items that do not have a stack ID are not going to be present in stack groups.
+ */
+export var selectStackGroups = createSelector([selectDisplayedStackedData, selectStackedCartesianItemsSettings, selectStackOffsetType, selectReverseStackOrder], combineStackGroups);
+export var combineDomainOfStackGroups = (stackGroups, _ref3, axisType, domainFromUserPreference) => {
+  var {
+    dataStartIndex,
+    dataEndIndex
+  } = _ref3;
+  if (domainFromUserPreference != null) {
+    // User has specified a domain, so we respect that and we can skip computing anything else
+    return undefined;
+  }
+  if (axisType === 'zAxis') {
+    // ZAxis ignores stacks
+    return undefined;
+  }
+  var domainOfStackGroups = getDomainOfStackGroups(stackGroups, dataStartIndex, dataEndIndex);
+  if (domainOfStackGroups != null && domainOfStackGroups[0] === 0 && domainOfStackGroups[1] === 0) {
+    return undefined;
+  }
+  return domainOfStackGroups;
+};
+var selectAllowsDataOverflow = createSelector([selectBaseAxis], axisSettings => axisSettings.allowDataOverflow);
+export var getDomainDefinition = axisSettings => {
+  var _axisSettings$domain;
+  if (axisSettings == null || !('domain' in axisSettings)) {
+    return defaultNumericDomain;
+  }
+  if (axisSettings.domain != null) {
+    return axisSettings.domain;
+  }
+  if ('ticks' in axisSettings && axisSettings.ticks != null) {
+    if (axisSettings.type === 'number') {
+      var allValues = onlyAllowNumbers(axisSettings.ticks);
+      return [Math.min(...allValues), Math.max(...allValues)];
+    }
+    if (axisSettings.type === 'category') {
+      return axisSettings.ticks.map(String);
+    }
+  }
+  return (_axisSettings$domain = axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.domain) !== null && _axisSettings$domain !== void 0 ? _axisSettings$domain : defaultNumericDomain;
+};
+export var selectDomainDefinition = createSelector([selectBaseAxis], getDomainDefinition);
+
+/**
+ * Under certain circumstances, we can determine the domain without looking at the data at all.
+ * This is the case when the domain is explicitly specified as numbers, or when it is specified
+ * as 'auto' or 'dataMin'/'dataMax' and data overflow is not allowed.
+ *
+ * In that case, this function will return the domain, otherwise it returns undefined.
+ *
+ * This is an optimization to avoid unnecessary data processing.
+ * @param state
+ * @param axisType
+ * @param axisId
+ * @param isPanorama
+ */
+export var selectDomainFromUserPreference = createSelector([selectDomainDefinition, selectAllowsDataOverflow], numericalDomainSpecifiedWithoutRequiringData);
+export var selectDomainOfStackGroups = createSelector([selectStackGroups, selectChartDataWithIndexes, pickAxisType, selectDomainFromUserPreference], combineDomainOfStackGroups, {
+  memoizeOptions: {
+    resultEqualityCheck: numberDomainEqualityCheck
+  }
+});
+export var selectAllErrorBarSettings = state => state.errorBars;
+var combineRelevantErrorBarSettings = (cartesianItemsSettings, allErrorBarSettings, axisType) => {
+  return cartesianItemsSettings.flatMap(item => {
+    return allErrorBarSettings[item.id];
+  }).filter(Boolean).filter(e => {
+    return isErrorBarRelevantForAxisType(axisType, e);
+  });
+};
+export var mergeDomains = function mergeDomains() {
+  for (var _len = arguments.length, domains = new Array(_len), _key = 0; _key < _len; _key++) {
+    domains[_key] = arguments[_key];
+  }
+  var allDomains = domains.filter(Boolean);
+  if (allDomains.length === 0) {
+    return undefined;
+  }
+  var allValues = allDomains.flat();
+  var min = Math.min(...allValues);
+  var max = Math.max(...allValues);
+  return [min, max];
+};
+export var combineDomainOfAllAppliedNumericalValuesIncludingErrorValues = (data, axisSettings, items, errorBars, axisType) => {
+  var lowerEnd, upperEnd;
+  if (items.length > 0) {
+    data.forEach(entry => {
+      items.forEach(item => {
+        var _errorBars$item$id, _axisSettings$dataKey;
+        var relevantErrorBars = (_errorBars$item$id = errorBars[item.id]) === null || _errorBars$item$id === void 0 ? void 0 : _errorBars$item$id.filter(errorBar => isErrorBarRelevantForAxisType(axisType, errorBar));
+        var valueByDataKey = getValueByDataKey(entry, (_axisSettings$dataKey = axisSettings.dataKey) !== null && _axisSettings$dataKey !== void 0 ? _axisSettings$dataKey : item.dataKey);
+        var errorDomain = getErrorDomainByDataKey(entry, valueByDataKey, relevantErrorBars);
+        if (errorDomain.length >= 2) {
+          var localLower = Math.min(...errorDomain);
+          var localUpper = Math.max(...errorDomain);
+          if (lowerEnd == null || localLower < lowerEnd) {
+            lowerEnd = localLower;
+          }
+          if (upperEnd == null || localUpper > upperEnd) {
+            upperEnd = localUpper;
+          }
+        }
+        var dataValueDomain = makeDomain(valueByDataKey);
+        if (dataValueDomain != null) {
+          lowerEnd = lowerEnd == null ? dataValueDomain[0] : Math.min(lowerEnd, dataValueDomain[0]);
+          upperEnd = upperEnd == null ? dataValueDomain[1] : Math.max(upperEnd, dataValueDomain[1]);
+        }
+      });
+    });
+  }
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {
+    data.forEach(item => {
+      var dataValueDomain = makeDomain(getValueByDataKey(item, axisSettings.dataKey));
+      if (dataValueDomain != null) {
+        lowerEnd = lowerEnd == null ? dataValueDomain[0] : Math.min(lowerEnd, dataValueDomain[0]);
+        upperEnd = upperEnd == null ? dataValueDomain[1] : Math.max(upperEnd, dataValueDomain[1]);
+      }
+    });
+  }
+  if (isWellBehavedNumber(lowerEnd) && isWellBehavedNumber(upperEnd)) {
+    return [lowerEnd, upperEnd];
+  }
+  return undefined;
+};
+var selectDomainOfAllAppliedNumericalValuesIncludingErrorValues = createSelector([selectDisplayedData, selectBaseAxis, selectCartesianItemsSettingsExceptStacked, selectAllErrorBarSettings, pickAxisType], combineDomainOfAllAppliedNumericalValuesIncludingErrorValues, {
+  memoizeOptions: {
+    resultEqualityCheck: numberDomainEqualityCheck
+  }
+});
+function onlyAllowNumbersAndStringsAndDates(item) {
+  var {
+    value
+  } = item;
+  if (isNumOrStr(value) || value instanceof Date) {
+    return value;
+  }
+  return undefined;
+}
+var computeDomainOfTypeCategory = (allDataSquished, axisSettings, isCategorical) => {
+  var categoricalDomain = allDataSquished.map(onlyAllowNumbersAndStringsAndDates).filter(v => v != null);
+  if (isCategorical && (axisSettings.dataKey == null || axisSettings.allowDuplicatedCategory && hasDuplicate(categoricalDomain))) {
+    /*
+     * 1. In an absence of dataKey, Recharts will use array indexes as its categorical domain
+     * 2. When category axis has duplicated text, serial numbers are used to generate scale
+     */
+    return range(0, allDataSquished.length);
+  }
+  if (axisSettings.allowDuplicatedCategory) {
+    return categoricalDomain;
+  }
+  return Array.from(new Set(categoricalDomain));
+};
+export var selectReferenceDots = state => state.referenceElements.dots;
+export var filterReferenceElements = (elements, axisType, axisId) => {
+  return elements.filter(el => el.ifOverflow === 'extendDomain').filter(el => {
+    if (axisType === 'xAxis') {
+      return el.xAxisId === axisId;
+    }
+    return el.yAxisId === axisId;
+  });
+};
+export var selectReferenceDotsByAxis = createSelector([selectReferenceDots, pickAxisType, pickAxisId], filterReferenceElements);
+export var selectReferenceAreas = state => state.referenceElements.areas;
+export var selectReferenceAreasByAxis = createSelector([selectReferenceAreas, pickAxisType, pickAxisId], filterReferenceElements);
+export var selectReferenceLines = state => state.referenceElements.lines;
+export var selectReferenceLinesByAxis = createSelector([selectReferenceLines, pickAxisType, pickAxisId], filterReferenceElements);
+export var combineDotsDomain = (dots, axisType) => {
+  if (dots == null) {
+    return undefined;
+  }
+  var allCoords = onlyAllowNumbers(dots.map(dot => axisType === 'xAxis' ? dot.x : dot.y));
+  if (allCoords.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...allCoords), Math.max(...allCoords)];
+};
+var selectReferenceDotsDomain = createSelector(selectReferenceDotsByAxis, pickAxisType, combineDotsDomain);
+export var combineAreasDomain = (areas, axisType) => {
+  if (areas == null) {
+    return undefined;
+  }
+  var allCoords = onlyAllowNumbers(areas.flatMap(area => [axisType === 'xAxis' ? area.x1 : area.y1, axisType === 'xAxis' ? area.x2 : area.y2]));
+  if (allCoords.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...allCoords), Math.max(...allCoords)];
+};
+var selectReferenceAreasDomain = createSelector([selectReferenceAreasByAxis, pickAxisType], combineAreasDomain);
+function extractXCoordinates(line) {
+  var _line$segment;
+  if (line.x != null) {
+    return onlyAllowNumbers([line.x]);
+  }
+  var segmentCoordinates = (_line$segment = line.segment) === null || _line$segment === void 0 ? void 0 : _line$segment.map(s => s.x);
+  if (segmentCoordinates == null || segmentCoordinates.length === 0) {
+    return [];
+  }
+  return onlyAllowNumbers(segmentCoordinates);
+}
+function extractYCoordinates(line) {
+  var _line$segment2;
+  if (line.y != null) {
+    return onlyAllowNumbers([line.y]);
+  }
+  var segmentCoordinates = (_line$segment2 = line.segment) === null || _line$segment2 === void 0 ? void 0 : _line$segment2.map(s => s.y);
+  if (segmentCoordinates == null || segmentCoordinates.length === 0) {
+    return [];
+  }
+  return onlyAllowNumbers(segmentCoordinates);
+}
+export var combineLinesDomain = (lines, axisType) => {
+  if (lines == null) {
+    return undefined;
+  }
+  var allCoords = lines.flatMap(line => axisType === 'xAxis' ? extractXCoordinates(line) : extractYCoordinates(line));
+  if (allCoords.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...allCoords), Math.max(...allCoords)];
+};
+var selectReferenceLinesDomain = createSelector([selectReferenceLinesByAxis, pickAxisType], combineLinesDomain);
+var selectReferenceElementsDomain = createSelector(selectReferenceDotsDomain, selectReferenceLinesDomain, selectReferenceAreasDomain, (dotsDomain, linesDomain, areasDomain) => {
+  return mergeDomains(dotsDomain, areasDomain, linesDomain);
+});
+export var combineNumericalDomain = (axisSettings, domainDefinition, domainFromUserPreference, domainOfStackGroups, dataAndErrorBarsDomain, referenceElementsDomain, layout, axisType) => {
+  if (domainFromUserPreference != null) {
+    // We're done! No need to compute anything else.
+    return domainFromUserPreference;
+  }
+  var shouldIncludeDomainOfStackGroups = layout === 'vertical' && axisType === 'xAxis' || layout === 'horizontal' && axisType === 'yAxis';
+  var mergedDomains = shouldIncludeDomainOfStackGroups ? mergeDomains(domainOfStackGroups, referenceElementsDomain, dataAndErrorBarsDomain) : mergeDomains(referenceElementsDomain, dataAndErrorBarsDomain);
+  return parseNumericalUserDomain(domainDefinition, mergedDomains, axisSettings.allowDataOverflow);
+};
+export var selectNumericalDomain = createSelector([selectBaseAxis, selectDomainDefinition, selectDomainFromUserPreference, selectDomainOfStackGroups, selectDomainOfAllAppliedNumericalValuesIncludingErrorValues, selectReferenceElementsDomain, selectChartLayout, pickAxisType], combineNumericalDomain, {
+  memoizeOptions: {
+    resultEqualityCheck: numberDomainEqualityCheck
+  }
+});
+
+/**
+ * Expand by design maps everything between 0 and 1,
+ * there is nothing to compute.
+ * See https://d3js.org/d3-shape/stack#stack-offsets
+ */
+var expandDomain = [0, 1];
+export var combineAxisDomain = (axisSettings, layout, displayedData, allAppliedValues, stackOffsetType, axisType, numericalDomain) => {
+  if ((axisSettings == null || displayedData == null || displayedData.length === 0) && numericalDomain === undefined) {
+    return undefined;
+  }
+  var {
+    dataKey,
+    type
+  } = axisSettings;
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  if (isCategorical && dataKey == null) {
+    var _displayedData$length;
+    return range(0, (_displayedData$length = displayedData === null || displayedData === void 0 ? void 0 : displayedData.length) !== null && _displayedData$length !== void 0 ? _displayedData$length : 0);
+  }
+  if (type === 'category') {
+    return computeDomainOfTypeCategory(allAppliedValues, axisSettings, isCategorical);
+  }
+  if (stackOffsetType === 'expand') {
+    return expandDomain;
+  }
+  return numericalDomain;
+};
+export var selectAxisDomain = createSelector([selectBaseAxis, selectChartLayout, selectDisplayedData, selectAllAppliedValues, selectStackOffsetType, pickAxisType, selectNumericalDomain], combineAxisDomain);
+function isSupportedScaleName(name) {
+  return name in d3Scales;
+}
+export var combineRealScaleType = (axisConfig, hasBar, chartType) => {
+  if (axisConfig == null) {
+    return undefined;
+  }
+  var {
+    scale,
+    type
+  } = axisConfig;
+  if (scale === 'auto') {
+    if (type === 'category' && chartType && (chartType.indexOf('LineChart') >= 0 || chartType.indexOf('AreaChart') >= 0 || chartType.indexOf('ComposedChart') >= 0 && !hasBar)) {
+      return 'point';
+    }
+    if (type === 'category') {
+      return 'band';
+    }
+    return 'linear';
+  }
+  if (typeof scale === 'string') {
+    var name = "scale".concat(upperFirst(scale));
+    return isSupportedScaleName(name) ? name : 'point';
+  }
+  return undefined;
+};
+export var selectRealScaleType = createSelector([selectBaseAxis, selectHasBar, selectChartName], combineRealScaleType);
+export function combineScaleFunction(axis, realScaleType, axisDomain, axisRange) {
+  if (axisDomain == null || axisRange == null) {
+    return undefined;
+  }
+  if (typeof axis.scale === 'function') {
+    return rechartsScaleFactory(axis.scale, axisDomain, axisRange);
+  }
+  return rechartsScaleFactory(realScaleType, axisDomain, axisRange);
+}
+export var combineNiceTicks = (axisDomain, axisSettings, realScaleType) => {
+  var domainDefinition = getDomainDefinition(axisSettings);
+  if (realScaleType !== 'auto' && realScaleType !== 'linear') {
+    return undefined;
+  }
+  if (axisSettings != null && axisSettings.tickCount && Array.isArray(domainDefinition) && (domainDefinition[0] === 'auto' || domainDefinition[1] === 'auto') && isWellFormedNumberDomain(axisDomain)) {
+    return getNiceTickValues(axisDomain, axisSettings.tickCount, axisSettings.allowDecimals);
+  }
+  if (axisSettings != null && axisSettings.tickCount && axisSettings.type === 'number' && isWellFormedNumberDomain(axisDomain)) {
+    return getTickValuesFixedDomain(axisDomain, axisSettings.tickCount, axisSettings.allowDecimals);
+  }
+  return undefined;
+};
+export var selectNiceTicks = createSelector([selectAxisDomain, selectRenderableAxisSettings, selectRealScaleType], combineNiceTicks);
+export var combineAxisDomainWithNiceTicks = (axisSettings, domain, niceTicks, axisType) => {
+  if (
+  /*
+   * Angle axis for some reason uses nice ticks when rendering axis tick labels,
+   * but doesn't use nice ticks for extending domain like all the other axes do.
+   * Not really sure why? Is there a good reason,
+   * or is it just because someone added support for nice ticks to the other axes and forgot this one?
+   */
+  axisType !== 'angleAxis' && (axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.type) === 'number' && isWellFormedNumberDomain(domain) && Array.isArray(niceTicks) && niceTicks.length > 0) {
+    var _niceTicks$, _niceTicks;
+    var minFromDomain = domain[0];
+    var minFromTicks = (_niceTicks$ = niceTicks[0]) !== null && _niceTicks$ !== void 0 ? _niceTicks$ : 0;
+    var maxFromDomain = domain[1];
+    var maxFromTicks = (_niceTicks = niceTicks[niceTicks.length - 1]) !== null && _niceTicks !== void 0 ? _niceTicks : 0;
+    return [Math.min(minFromDomain, minFromTicks), Math.max(maxFromDomain, maxFromTicks)];
+  }
+  return domain;
+};
+export var selectAxisDomainIncludingNiceTicks = createSelector([selectBaseAxis, selectAxisDomain, selectNiceTicks, pickAxisType], combineAxisDomainWithNiceTicks);
+
+/**
+ * Returns the smallest gap, between two numbers in the data, as a ratio of the whole range (max - min).
+ * Ignores domain provided by user and only considers domain from data.
+ *
+ * The result is a number between 0 and 1.
+ */
+export var selectSmallestDistanceBetweenValues = createSelector(selectAllAppliedValues, selectBaseAxis, (allDataSquished, axisSettings) => {
+  if (!axisSettings || axisSettings.type !== 'number') {
+    return undefined;
+  }
+  var smallestDistanceBetweenValues = Infinity;
+  var sortedValues = Array.from(onlyAllowNumbers(allDataSquished.map(d => d.value))).sort((a, b) => a - b);
+  var first = sortedValues[0];
+  var last = sortedValues[sortedValues.length - 1];
+  if (first == null || last == null) {
+    return Infinity;
+  }
+  var diff = last - first;
+  if (diff === 0) {
+    return Infinity;
+  }
+  // Only do n - 1 distance calculations because there's only n - 1 distances between n values.
+  for (var i = 0; i < sortedValues.length - 1; i++) {
+    var curr = sortedValues[i];
+    var next = sortedValues[i + 1];
+    if (curr == null || next == null) {
+      continue;
+    }
+    var distance = next - curr;
+    smallestDistanceBetweenValues = Math.min(smallestDistanceBetweenValues, distance);
+  }
+  return smallestDistanceBetweenValues / diff;
+});
+var selectCalculatedPadding = createSelector(selectSmallestDistanceBetweenValues, selectChartLayout, selectBarCategoryGap, selectChartOffsetInternal, (_1, _2, _3, _4, padding) => padding, (smallestDistanceInPercent, layout, barCategoryGap, offset, padding) => {
+  if (!isWellBehavedNumber(smallestDistanceInPercent)) {
+    return 0;
+  }
+  var rangeWidth = layout === 'vertical' ? offset.height : offset.width;
+  if (padding === 'gap') {
+    return smallestDistanceInPercent * rangeWidth / 2;
+  }
+  if (padding === 'no-gap') {
+    var gap = getPercentValue(barCategoryGap, smallestDistanceInPercent * rangeWidth);
+    var halfBand = smallestDistanceInPercent * rangeWidth / 2;
+    return halfBand - gap - (halfBand - gap) / rangeWidth * gap;
+  }
+  return 0;
+});
+export var selectCalculatedXAxisPadding = (state, axisId, isPanorama) => {
+  var xAxisSettings = selectXAxisSettings(state, axisId);
+  if (xAxisSettings == null || typeof xAxisSettings.padding !== 'string') {
+    return 0;
+  }
+  return selectCalculatedPadding(state, 'xAxis', axisId, isPanorama, xAxisSettings.padding);
+};
+export var selectCalculatedYAxisPadding = (state, axisId, isPanorama) => {
+  var yAxisSettings = selectYAxisSettings(state, axisId);
+  if (yAxisSettings == null || typeof yAxisSettings.padding !== 'string') {
+    return 0;
+  }
+  return selectCalculatedPadding(state, 'yAxis', axisId, isPanorama, yAxisSettings.padding);
+};
+var selectXAxisPadding = createSelector(selectXAxisSettings, selectCalculatedXAxisPadding, (xAxisSettings, calculated) => {
+  var _padding$left, _padding$right;
+  if (xAxisSettings == null) {
+    return {
+      left: 0,
+      right: 0
+    };
+  }
+  var {
+    padding
+  } = xAxisSettings;
+  if (typeof padding === 'string') {
+    return {
+      left: calculated,
+      right: calculated
+    };
+  }
+  return {
+    left: ((_padding$left = padding.left) !== null && _padding$left !== void 0 ? _padding$left : 0) + calculated,
+    right: ((_padding$right = padding.right) !== null && _padding$right !== void 0 ? _padding$right : 0) + calculated
+  };
+});
+var selectYAxisPadding = createSelector(selectYAxisSettings, selectCalculatedYAxisPadding, (yAxisSettings, calculated) => {
+  var _padding$top, _padding$bottom;
+  if (yAxisSettings == null) {
+    return {
+      top: 0,
+      bottom: 0
+    };
+  }
+  var {
+    padding
+  } = yAxisSettings;
+  if (typeof padding === 'string') {
+    return {
+      top: calculated,
+      bottom: calculated
+    };
+  }
+  return {
+    top: ((_padding$top = padding.top) !== null && _padding$top !== void 0 ? _padding$top : 0) + calculated,
+    bottom: ((_padding$bottom = padding.bottom) !== null && _padding$bottom !== void 0 ? _padding$bottom : 0) + calculated
+  };
+});
+export var combineXAxisRange = createSelector([selectChartOffsetInternal, selectXAxisPadding, selectBrushDimensions, selectBrushSettings, (_state, _axisId, isPanorama) => isPanorama], (offset, padding, brushDimensions, _ref4, isPanorama) => {
+  var {
+    padding: brushPadding
+  } = _ref4;
+  if (isPanorama) {
+    return [brushPadding.left, brushDimensions.width - brushPadding.right];
+  }
+  return [offset.left + padding.left, offset.left + offset.width - padding.right];
+});
+export var combineYAxisRange = createSelector([selectChartOffsetInternal, selectChartLayout, selectYAxisPadding, selectBrushDimensions, selectBrushSettings, (_state, _axisId, isPanorama) => isPanorama], (offset, layout, padding, brushDimensions, _ref5, isPanorama) => {
+  var {
+    padding: brushPadding
+  } = _ref5;
+  if (isPanorama) {
+    return [brushDimensions.height - brushPadding.bottom, brushPadding.top];
+  }
+  if (layout === 'horizontal') {
+    return [offset.top + offset.height - padding.bottom, offset.top + padding.top];
+  }
+  return [offset.top + padding.top, offset.top + offset.height - padding.bottom];
+});
+export var selectAxisRange = (state, axisType, axisId, isPanorama) => {
+  var _selectZAxisSettings;
+  switch (axisType) {
+    case 'xAxis':
+      return combineXAxisRange(state, axisId, isPanorama);
+    case 'yAxis':
+      return combineYAxisRange(state, axisId, isPanorama);
+    case 'zAxis':
+      return (_selectZAxisSettings = selectZAxisSettings(state, axisId)) === null || _selectZAxisSettings === void 0 ? void 0 : _selectZAxisSettings.range;
+    case 'angleAxis':
+      return selectAngleAxisRange(state);
+    case 'radiusAxis':
+      return selectRadiusAxisRange(state, axisId);
+    default:
+      return undefined;
+  }
+};
+export var selectAxisRangeWithReverse = createSelector([selectBaseAxis, selectAxisRange], combineAxisRangeWithReverse);
+var selectCheckedAxisDomain = createSelector([selectRealScaleType, selectAxisDomainIncludingNiceTicks], combineCheckedDomain);
+export var selectAxisScale = createSelector([selectBaseAxis, selectRealScaleType, selectCheckedAxisDomain, selectAxisRangeWithReverse], combineScaleFunction);
+export var selectErrorBarsSettings = createSelector([selectCartesianItemsSettings, selectAllErrorBarSettings, pickAxisType], combineRelevantErrorBarSettings);
+function compareIds(a, b) {
+  if (a.id < b.id) {
+    return -1;
+  }
+  if (a.id > b.id) {
+    return 1;
+  }
+  return 0;
+}
+var pickAxisOrientation = (_state, orientation) => orientation;
+var pickMirror = (_state, _orientation, mirror) => mirror;
+var selectAllXAxesWithOffsetType = createSelector(selectAllXAxes, pickAxisOrientation, pickMirror, (allAxes, orientation, mirror) => allAxes.filter(axis => axis.orientation === orientation).filter(axis => axis.mirror === mirror).sort(compareIds));
+var selectAllYAxesWithOffsetType = createSelector(selectAllYAxes, pickAxisOrientation, pickMirror, (allAxes, orientation, mirror) => allAxes.filter(axis => axis.orientation === orientation).filter(axis => axis.mirror === mirror).sort(compareIds));
+var getXAxisSize = (offset, axisSettings) => {
+  return {
+    width: offset.width,
+    height: axisSettings.height
+  };
+};
+var getYAxisSize = (offset, axisSettings) => {
+  var width = typeof axisSettings.width === 'number' ? axisSettings.width : DEFAULT_Y_AXIS_WIDTH;
+  return {
+    width,
+    height: offset.height
+  };
+};
+export var selectXAxisSize = createSelector(selectChartOffsetInternal, selectXAxisSettings, getXAxisSize);
+var combineXAxisPositionStartingPoint = (offset, orientation, chartHeight) => {
+  switch (orientation) {
+    case 'top':
+      return offset.top;
+    case 'bottom':
+      return chartHeight - offset.bottom;
+    default:
+      return 0;
+  }
+};
+var combineYAxisPositionStartingPoint = (offset, orientation, chartWidth) => {
+  switch (orientation) {
+    case 'left':
+      return offset.left;
+    case 'right':
+      return chartWidth - offset.right;
+    default:
+      return 0;
+  }
+};
+export var selectAllXAxesOffsetSteps = createSelector(selectChartHeight, selectChartOffsetInternal, selectAllXAxesWithOffsetType, pickAxisOrientation, pickMirror, (chartHeight, offset, allAxesWithSameOffsetType, orientation, mirror) => {
+  var steps = {};
+  var position;
+  allAxesWithSameOffsetType.forEach(axis => {
+    var axisSize = getXAxisSize(offset, axis);
+    if (position == null) {
+      position = combineXAxisPositionStartingPoint(offset, orientation, chartHeight);
+    }
+    var needSpace = orientation === 'top' && !mirror || orientation === 'bottom' && mirror;
+    steps[axis.id] = position - Number(needSpace) * axisSize.height;
+    position += (needSpace ? -1 : 1) * axisSize.height;
+  });
+  return steps;
+});
+export var selectAllYAxesOffsetSteps = createSelector(selectChartWidth, selectChartOffsetInternal, selectAllYAxesWithOffsetType, pickAxisOrientation, pickMirror, (chartWidth, offset, allAxesWithSameOffsetType, orientation, mirror) => {
+  var steps = {};
+  var position;
+  allAxesWithSameOffsetType.forEach(axis => {
+    var axisSize = getYAxisSize(offset, axis);
+    if (position == null) {
+      position = combineYAxisPositionStartingPoint(offset, orientation, chartWidth);
+    }
+    var needSpace = orientation === 'left' && !mirror || orientation === 'right' && mirror;
+    steps[axis.id] = position - Number(needSpace) * axisSize.width;
+    position += (needSpace ? -1 : 1) * axisSize.width;
+  });
+  return steps;
+});
+var selectXAxisOffsetSteps = (state, axisId) => {
+  var axisSettings = selectXAxisSettings(state, axisId);
+  if (axisSettings == null) {
+    return undefined;
+  }
+  return selectAllXAxesOffsetSteps(state, axisSettings.orientation, axisSettings.mirror);
+};
+export var selectXAxisPosition = createSelector([selectChartOffsetInternal, selectXAxisSettings, selectXAxisOffsetSteps, (_, axisId) => axisId], (offset, axisSettings, allSteps, axisId) => {
+  if (axisSettings == null) {
+    return undefined;
+  }
+  var stepOfThisAxis = allSteps === null || allSteps === void 0 ? void 0 : allSteps[axisId];
+  if (stepOfThisAxis == null) {
+    return {
+      x: offset.left,
+      y: 0
+    };
+  }
+  return {
+    x: offset.left,
+    y: stepOfThisAxis
+  };
+});
+var selectYAxisOffsetSteps = (state, axisId) => {
+  var axisSettings = selectYAxisSettings(state, axisId);
+  if (axisSettings == null) {
+    return undefined;
+  }
+  return selectAllYAxesOffsetSteps(state, axisSettings.orientation, axisSettings.mirror);
+};
+export var selectYAxisPosition = createSelector([selectChartOffsetInternal, selectYAxisSettings, selectYAxisOffsetSteps, (_, axisId) => axisId], (offset, axisSettings, allSteps, axisId) => {
+  if (axisSettings == null) {
+    return undefined;
+  }
+  var stepOfThisAxis = allSteps === null || allSteps === void 0 ? void 0 : allSteps[axisId];
+  if (stepOfThisAxis == null) {
+    return {
+      x: 0,
+      y: offset.top
+    };
+  }
+  return {
+    x: stepOfThisAxis,
+    y: offset.top
+  };
+});
+export var selectYAxisSize = createSelector(selectChartOffsetInternal, selectYAxisSettings, (offset, axisSettings) => {
+  var width = typeof axisSettings.width === 'number' ? axisSettings.width : DEFAULT_Y_AXIS_WIDTH;
+  return {
+    width,
+    height: offset.height
+  };
+});
+export var selectCartesianAxisSize = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSize(state, axisId).width;
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSize(state, axisId).height;
+      }
+    default:
+      {
+        return undefined;
+      }
+  }
+};
+export var combineDuplicateDomain = (chartLayout, appliedValues, axis, axisType) => {
+  if (axis == null) {
+    return undefined;
+  }
+  var {
+    allowDuplicatedCategory,
+    type,
+    dataKey
+  } = axis;
+  var isCategorical = isCategoricalAxis(chartLayout, axisType);
+  var allData = appliedValues.map(av => av.value);
+  if (dataKey && isCategorical && type === 'category' && allowDuplicatedCategory && hasDuplicate(allData)) {
+    return allData;
+  }
+  return undefined;
+};
+export var selectDuplicateDomain = createSelector([selectChartLayout, selectAllAppliedValues, selectBaseAxis, pickAxisType], combineDuplicateDomain);
+export var combineCategoricalDomain = (layout, appliedValues, axis, axisType) => {
+  if (axis == null || axis.dataKey == null) {
+    return undefined;
+  }
+  var {
+    type,
+    scale
+  } = axis;
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  if (isCategorical && (type === 'number' || scale !== 'auto')) {
+    return appliedValues.map(d => d.value);
+  }
+  return undefined;
+};
+export var selectCategoricalDomain = createSelector([selectChartLayout, selectAllAppliedValues, selectRenderableAxisSettings, pickAxisType], combineCategoricalDomain);
+export var selectAxisPropsNeededForCartesianGridTicksGenerator = createSelector([selectChartLayout, selectCartesianAxisSettings, selectRealScaleType, selectAxisScale, selectDuplicateDomain, selectCategoricalDomain, selectAxisRange, selectNiceTicks, pickAxisType], (layout, axis, realScaleType, scale, duplicateDomain, categoricalDomain, axisRange, niceTicks, axisType) => {
+  if (axis == null) {
+    return undefined;
+  }
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  return {
+    angle: axis.angle,
+    interval: axis.interval,
+    minTickGap: axis.minTickGap,
+    orientation: axis.orientation,
+    tick: axis.tick,
+    tickCount: axis.tickCount,
+    tickFormatter: axis.tickFormatter,
+    ticks: axis.ticks,
+    type: axis.type,
+    unit: axis.unit,
+    axisType,
+    categoricalDomain,
+    duplicateDomain,
+    isCategorical,
+    niceTicks,
+    range: axisRange,
+    realScaleType,
+    scale
+  };
+});
+
+/**
+ * Of on four almost identical implementations of tick generation.
+ * The four horsemen of tick generation are:
+ * - {@link selectTooltipAxisTicks}
+ * - {@link combineAxisTicks}
+ * - {@link getTicksOfAxis}.
+ * - {@link combineGraphicalItemTicks}
+ */
+export var combineAxisTicks = (layout, axis, realScaleType, scale, niceTicks, axisRange, duplicateDomain, categoricalDomain, axisType) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  var {
+    type,
+    ticks,
+    tickCount
+  } = axis;
+  var offsetForBand =
+  // @ts-expect-error This is testing for `scaleBand` but for band axis the type is reported as `band` so this looks like a dead code with a workaround elsewhere?
+  realScaleType === 'scaleBand' && typeof scale.bandwidth === 'function' ? scale.bandwidth() / 2 : 2;
+  var offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;
+  offset = axisType === 'angleAxis' && axisRange != null && axisRange.length >= 2 ? mathSign(axisRange[0] - axisRange[1]) * 2 * offset : offset;
+
+  // The ticks set by user should only affect the ticks adjacent to axis line
+  var ticksOrNiceTicks = ticks || niceTicks;
+  if (ticksOrNiceTicks) {
+    return ticksOrNiceTicks.map((entry, index) => {
+      var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;
+      var scaled = scale.map(scaleContent);
+      if (!isWellBehavedNumber(scaled)) {
+        return null;
+      }
+      return {
+        index,
+        coordinate: scaled + offset,
+        value: entry,
+        offset
+      };
+    }).filter(isNotNil);
+  }
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => {
+      var scaled = scale.map(entry);
+      if (!isWellBehavedNumber(scaled)) {
+        return null;
+      }
+      return {
+        coordinate: scaled + offset,
+        value: entry,
+        index,
+        offset
+      };
+    }).filter(isNotNil);
+  }
+  if (scale.ticks) {
+    return scale.ticks(tickCount).map((entry, index) => {
+      var scaled = scale.map(entry);
+      if (!isWellBehavedNumber(scaled)) {
+        return null;
+      }
+      return {
+        coordinate: scaled + offset,
+        value: entry,
+        index,
+        offset
+      };
+    }).filter(isNotNil);
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => {
+    var scaled = scale.map(entry);
+    if (!isWellBehavedNumber(scaled)) {
+      return null;
+    }
+    return {
+      coordinate: scaled + offset,
+      // @ts-expect-error can't use Date as index
+      value: duplicateDomain ? duplicateDomain[entry] : entry,
+      index,
+      offset
+    };
+  }).filter(isNotNil);
+};
+export var selectTicksOfAxis = createSelector([selectChartLayout, selectRenderableAxisSettings, selectRealScaleType, selectAxisScale, selectNiceTicks, selectAxisRange, selectDuplicateDomain, selectCategoricalDomain, pickAxisType], combineAxisTicks);
+
+/**
+ * Of on four almost identical implementations of tick generation.
+ * The four horsemen of tick generation are:
+ * - {@link selectTooltipAxisTicks}
+ * - {@link combineAxisTicks}
+ * - {@link getTicksOfAxis}.
+ * - {@link combineGraphicalItemTicks}
+ */
+export var combineGraphicalItemTicks = (layout, axis, scale, axisRange, duplicateDomain, categoricalDomain, axisType) => {
+  if (axis == null || scale == null || axisRange == null || axisRange[0] === axisRange[1]) {
+    return undefined;
+  }
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  var {
+    tickCount
+  } = axis;
+  var offset = 0;
+  offset = axisType === 'angleAxis' && (axisRange === null || axisRange === void 0 ? void 0 : axisRange.length) >= 2 ? mathSign(axisRange[0] - axisRange[1]) * 2 * offset : offset;
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => {
+      var scaled = scale.map(entry);
+      if (!isWellBehavedNumber(scaled)) {
+        return null;
+      }
+      return {
+        coordinate: scaled + offset,
+        value: entry,
+        index,
+        offset
+      };
+    }).filter(isNotNil);
+  }
+  if (scale.ticks) {
+    return scale.ticks(tickCount).map((entry, index) => {
+      var scaled = scale.map(entry);
+      if (!isWellBehavedNumber(scaled)) {
+        return null;
+      }
+      return {
+        coordinate: scaled + offset,
+        value: entry,
+        index,
+        offset
+      };
+    }).filter(isNotNil);
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => {
+    var scaled = scale.map(entry);
+    if (!isWellBehavedNumber(scaled)) {
+      return null;
+    }
+    return {
+      coordinate: scaled + offset,
+      // @ts-expect-error can't use unknown as index
+      value: duplicateDomain ? duplicateDomain[entry] : entry,
+      index,
+      offset
+    };
+  }).filter(isNotNil);
+};
+export var selectTicksOfGraphicalItem = createSelector([selectChartLayout, selectRenderableAxisSettings, selectAxisScale, selectAxisRange, selectDuplicateDomain, selectCategoricalDomain, pickAxisType], combineGraphicalItemTicks);
+
+/**
+ * This is the internal representation of an axis along with its scale function.
+ * Here we have already computed the scale function for the axis,
+ * and replaced the union type of scale (string | function) with just the function type.
+ */
+
+export var selectAxisWithScale = createSelector(selectBaseAxis, selectAxisScale, (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+var selectZAxisScale = createSelector([selectBaseAxis, selectRealScaleType, selectAxisDomain, selectAxisRangeWithReverse], combineScaleFunction);
+export var selectZAxisWithScale = createSelector((state, _axisType, axisId) => selectZAxisSettings(state, axisId), selectZAxisScale, (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+
+/**
+ * We are also going to need to implement polar chart directions if we want to support keyboard controls for those.
+ */
+
+export var selectChartDirection = createSelector([selectChartLayout, selectAllXAxes, selectAllYAxes], (layout, allXAxes, allYAxes) => {
+  switch (layout) {
+    case 'horizontal':
+      {
+        return allXAxes.some(axis => axis.reversed) ? 'right-to-left' : 'left-to-right';
+      }
+    case 'vertical':
+      {
+        return allYAxes.some(axis => axis.reversed) ? 'bottom-to-top' : 'top-to-bottom';
+      }
+    // TODO: make this better. For now, right arrow triggers "forward", left arrow "back"
+    // however, the tooltip moves an unintuitive direction because of how the indices are rendered
+    case 'centric':
+    case 'radial':
+      {
+        return 'left-to-right';
+      }
+    default:
+      {
+        return undefined;
+      }
+  }
+});
Index: node_modules/recharts/es6/state/selectors/barSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/barSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/barSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,163 @@
+import { createSelector } from 'reselect';
+import { selectAxisWithScale, selectCartesianAxisSize, selectStackGroups, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems } from './axisSelectors';
+import { isNullish } from '../../util/DataUtils';
+import { getBandSizeOfAxis } from '../../util/ChartUtils';
+import { computeBarRectangles } from '../../cartesian/Bar';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectChartDataWithIndexesIfNotInPanoramaPosition3 } from './dataSelectors';
+import { selectAxisViewBox, selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { selectBarCategoryGap, selectBarGap, selectRootBarSize, selectRootMaxBarSize } from './rootPropsSelectors';
+import { combineBarSizeList } from './combiners/combineBarSizeList';
+import { combineAllBarPositions } from './combiners/combineAllBarPositions';
+import { combineStackedData } from './combiners/combineStackedData';
+import { selectXAxisIdFromGraphicalItemId, selectYAxisIdFromGraphicalItemId } from './graphicalItemSelectors';
+import { combineBarPosition } from './combiners/combineBarPosition';
+var pickIsPanorama = (_state, _id, isPanorama) => isPanorama;
+var pickBarId = (_state, id) => id;
+var selectSynchronisedBarSettings = createSelector([selectUnfilteredCartesianItems, pickBarId], (graphicalItems, id) => graphicalItems.filter(item => item.type === 'bar').find(item => item.id === id));
+export var selectMaxBarSize = createSelector([selectSynchronisedBarSettings], barSettings => barSettings === null || barSettings === void 0 ? void 0 : barSettings.maxBarSize);
+var pickCells = (_state, _id, _isPanorama, cells) => cells;
+export var selectAllVisibleBars = createSelector([selectChartLayout, selectUnfilteredCartesianItems, selectXAxisIdFromGraphicalItemId, selectYAxisIdFromGraphicalItemId, pickIsPanorama], (layout, allItems, xAxisId, yAxisId, isPanorama) => allItems.filter(i => {
+  if (layout === 'horizontal') {
+    return i.xAxisId === xAxisId;
+  }
+  return i.yAxisId === yAxisId;
+}).filter(i => i.isPanorama === isPanorama).filter(i => i.hide === false).filter(i => i.type === 'bar'));
+var selectBarStackGroups = (state, id, isPanorama) => {
+  var layout = selectChartLayout(state);
+  var xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
+  var yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
+  if (xAxisId == null || yAxisId == null) {
+    return undefined;
+  }
+  if (layout === 'horizontal') {
+    return selectStackGroups(state, 'yAxis', yAxisId, isPanorama);
+  }
+  return selectStackGroups(state, 'xAxis', xAxisId, isPanorama);
+};
+export var selectBarCartesianAxisSize = (state, id) => {
+  var layout = selectChartLayout(state);
+  var xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
+  var yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
+  if (xAxisId == null || yAxisId == null) {
+    return undefined;
+  }
+  if (layout === 'horizontal') {
+    return selectCartesianAxisSize(state, 'xAxis', xAxisId);
+  }
+  return selectCartesianAxisSize(state, 'yAxis', yAxisId);
+};
+export var selectBarSizeList = createSelector([selectAllVisibleBars, selectRootBarSize, selectBarCartesianAxisSize], combineBarSizeList);
+export var selectBarBandSize = (state, id, isPanorama) => {
+  var _ref, _getBandSizeOfAxis;
+  var barSettings = selectSynchronisedBarSettings(state, id);
+  if (barSettings == null) {
+    return 0;
+  }
+  var xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
+  var yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
+  if (xAxisId == null || yAxisId == null) {
+    return 0;
+  }
+  var layout = selectChartLayout(state);
+  var globalMaxBarSize = selectRootMaxBarSize(state);
+  var {
+    maxBarSize: childMaxBarSize
+  } = barSettings;
+  var maxBarSize = isNullish(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;
+  var axis, ticks;
+  if (layout === 'horizontal') {
+    axis = selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+    ticks = selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+  } else {
+    axis = selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+    ticks = selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+  }
+  return (_ref = (_getBandSizeOfAxis = getBandSizeOfAxis(axis, ticks, true)) !== null && _getBandSizeOfAxis !== void 0 ? _getBandSizeOfAxis : maxBarSize) !== null && _ref !== void 0 ? _ref : 0;
+};
+export var selectAxisBandSize = (state, id, isPanorama) => {
+  var layout = selectChartLayout(state);
+  var xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
+  var yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
+  if (xAxisId == null || yAxisId == null) {
+    return undefined;
+  }
+  var axis, ticks;
+  if (layout === 'horizontal') {
+    axis = selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+    ticks = selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+  } else {
+    axis = selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+    ticks = selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+  }
+  return getBandSizeOfAxis(axis, ticks);
+};
+export var selectAllBarPositions = createSelector([selectBarSizeList, selectRootMaxBarSize, selectBarGap, selectBarCategoryGap, selectBarBandSize, selectAxisBandSize, selectMaxBarSize], combineAllBarPositions);
+var selectXAxisWithScale = (state, id, isPanorama) => {
+  var xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
+  if (xAxisId == null) {
+    return undefined;
+  }
+  return selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+};
+var selectYAxisWithScale = (state, id, isPanorama) => {
+  var yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
+  if (yAxisId == null) {
+    return undefined;
+  }
+  return selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+};
+var selectXAxisTicks = (state, id, isPanorama) => {
+  var xAxisId = selectXAxisIdFromGraphicalItemId(state, id);
+  if (xAxisId == null) {
+    return undefined;
+  }
+  return selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+};
+var selectYAxisTicks = (state, id, isPanorama) => {
+  var yAxisId = selectYAxisIdFromGraphicalItemId(state, id);
+  if (yAxisId == null) {
+    return undefined;
+  }
+  return selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+};
+export var selectBarPosition = createSelector([selectAllBarPositions, selectSynchronisedBarSettings], combineBarPosition);
+export var selectStackedDataOfItem = createSelector([selectBarStackGroups, selectSynchronisedBarSettings], combineStackedData);
+export var selectBarRectangles = createSelector([selectChartOffsetInternal, selectAxisViewBox, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectBarPosition, selectChartLayout, selectChartDataWithIndexesIfNotInPanoramaPosition3, selectAxisBandSize, selectStackedDataOfItem, selectSynchronisedBarSettings, pickCells], (offset, axisViewBox, xAxis, yAxis, xAxisTicks, yAxisTicks, pos, layout, _ref2, bandSize, stackedData, barSettings, cells) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref2;
+  if (barSettings == null || pos == null || axisViewBox == null || layout !== 'horizontal' && layout !== 'vertical' || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || bandSize == null) {
+    return undefined;
+  }
+  var {
+    data
+  } = barSettings;
+  var displayedData;
+  if (data != null && data.length > 0) {
+    displayedData = data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+  return computeBarRectangles({
+    layout,
+    barSettings,
+    pos,
+    parentViewBox: axisViewBox,
+    bandSize,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    stackedData,
+    displayedData,
+    offset,
+    cells,
+    dataStartIndex
+  });
+});
Index: node_modules/recharts/es6/state/selectors/barStackSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/barStackSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/barStackSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,50 @@
+import { createSelector } from 'reselect';
+import { selectUnfilteredCartesianItems } from './axisSelectors';
+import { selectBarRectangles } from './barSelectors';
+var pickStackId = (state, stackId) => stackId;
+var pickIsPanorama = (state, stackId, isPanorama) => isPanorama;
+export var selectAllBarsInStack = createSelector([pickStackId, selectUnfilteredCartesianItems, pickIsPanorama], (stackId, allItems, isPanorama) => {
+  return allItems.filter(i => i.type === 'bar').filter(i => i.stackId === stackId).filter(i => i.isPanorama === isPanorama).filter(i => !i.hide);
+});
+var selectAllBarIdsInStack = createSelector([selectAllBarsInStack], allBars => {
+  return allBars.map(bar => bar.id);
+});
+/**
+ * Takes two rectangles and returns a new rectangle that encompasses both.
+ * It takes the minimum x and y, and the maximum width and height.
+ * It handles overlapping rectangles, and rectangles with a gap between them.
+ * @param rect1
+ * @param rect2
+ */
+export var expandRectangle = (rect1, rect2) => {
+  if (!rect1) {
+    return rect2;
+  }
+  if (!rect2) {
+    return rect1;
+  }
+  var x = Math.min(rect1.x, rect1.x + rect1.width, rect2.x, rect2.x + rect2.width);
+  var y = Math.min(rect1.y, rect1.y + rect1.height, rect2.y, rect2.y + rect2.height);
+  var maxX = Math.max(rect1.x, rect1.x + rect1.width, rect2.x, rect2.x + rect2.width);
+  var maxY = Math.max(rect1.y, rect1.y + rect1.height, rect2.y, rect2.y + rect2.height);
+  var width = maxX - x;
+  var height = maxY - y;
+  return {
+    x,
+    y,
+    width,
+    height
+  };
+};
+var combineStackRects = (state, stackId, isPanorama) => {
+  var allBarIds = selectAllBarIdsInStack(state, stackId, isPanorama);
+  var stackRects = [];
+  allBarIds.forEach(barId => {
+    var rectangles = selectBarRectangles(state, barId, isPanorama, undefined);
+    rectangles === null || rectangles === void 0 || rectangles.forEach((rect, index) => {
+      stackRects[index] = expandRectangle(stackRects[index], rect);
+    });
+  });
+  return stackRects;
+};
+export var selectStackRects = createSelector([state => state, pickStackId, pickIsPanorama], combineStackRects);
Index: node_modules/recharts/es6/state/selectors/brushSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/brushSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/brushSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,11 @@
+import { createSelector } from 'reselect';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { selectMargin } from './containerSelectors';
+import { isNumber } from '../../util/DataUtils';
+export var selectBrushSettings = state => state.brush;
+export var selectBrushDimensions = createSelector([selectBrushSettings, selectChartOffsetInternal, selectMargin], (brushSettings, offset, margin) => ({
+  height: brushSettings.height,
+  x: isNumber(brushSettings.x) ? brushSettings.x : offset.left,
+  y: isNumber(brushSettings.y) ? brushSettings.y : offset.top + offset.height + offset.brushBottom - ((margin === null || margin === void 0 ? void 0 : margin.bottom) || 0),
+  width: isNumber(brushSettings.width) ? brushSettings.width : offset.width
+}));
Index: node_modules/recharts/es6/state/selectors/combiners/combineActiveLabel.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineActiveLabel.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineActiveLabel.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,9 @@
+import { isNan } from '../../../util/DataUtils';
+export var combineActiveLabel = (tooltipTicks, activeIndex) => {
+  var _tooltipTicks$n;
+  var n = Number(activeIndex);
+  if (isNan(n) || activeIndex == null) {
+    return undefined;
+  }
+  return n >= 0 ? tooltipTicks === null || tooltipTicks === void 0 || (_tooltipTicks$n = tooltipTicks[n]) === null || _tooltipTicks$n === void 0 ? void 0 : _tooltipTicks$n.value : undefined;
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineActiveTooltipIndex.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineActiveTooltipIndex.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineActiveTooltipIndex.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,70 @@
+import { isWellBehavedNumber } from '../../../util/isWellBehavedNumber';
+import { getValueByDataKey } from '../../../util/ChartUtils';
+import { isWellFormedNumberDomain } from '../../../util/isDomainSpecifiedByUser';
+function toFiniteNumber(value) {
+  if (typeof value === 'number') {
+    return Number.isFinite(value) ? value : undefined;
+  }
+  if (value instanceof Date) {
+    var numericValue = value.valueOf();
+    return Number.isFinite(numericValue) ? numericValue : undefined;
+  }
+  var parsed = Number(value);
+  return Number.isFinite(parsed) ? parsed : undefined;
+}
+function isValueWithinNumberDomain(value, domain) {
+  var numericValue = toFiniteNumber(value);
+  var lowerBound = domain[0];
+  var upperBound = domain[1];
+  if (numericValue === undefined) {
+    return false;
+  }
+  var min = Math.min(lowerBound, upperBound);
+  var max = Math.max(lowerBound, upperBound);
+  return numericValue >= min && numericValue <= max;
+}
+function isValueWithinDomain(entry, axisDataKey, domain) {
+  if (domain == null || axisDataKey == null) {
+    return true;
+  }
+  var value = getValueByDataKey(entry, axisDataKey);
+  if (value == null) {
+    return true;
+  }
+  if (!isWellFormedNumberDomain(domain)) {
+    return true;
+  }
+  return isValueWithinNumberDomain(value, domain);
+}
+export var combineActiveTooltipIndex = (tooltipInteraction, chartData, axisDataKey, domain) => {
+  var desiredIndex = tooltipInteraction === null || tooltipInteraction === void 0 ? void 0 : tooltipInteraction.index;
+  if (desiredIndex == null) {
+    return null;
+  }
+  var indexAsNumber = Number(desiredIndex);
+  if (!isWellBehavedNumber(indexAsNumber)) {
+    // this is for charts like Sankey and Treemap that do not support numerical indexes. We need a proper solution for this before we can start supporting keyboard events on these charts.
+    return desiredIndex;
+  }
+
+  /*
+   * Zero is a trivial limit for single-dimensional charts like Line and Area,
+   * but this also needs a support for multidimensional charts like Sankey and Treemap! TODO
+   */
+  var lowerLimit = 0;
+  var upperLimit = +Infinity;
+  if (chartData.length > 0) {
+    upperLimit = chartData.length - 1;
+  }
+
+  // now let's clamp the desiredIndex between the limits
+  var clampedIndex = Math.max(lowerLimit, Math.min(indexAsNumber, upperLimit));
+  var entry = chartData[clampedIndex];
+  if (entry == null) {
+    return String(clampedIndex);
+  }
+  if (!isValueWithinDomain(entry, axisDataKey, domain)) {
+    return null;
+  }
+  return String(clampedIndex);
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineAllBarPositions.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineAllBarPositions.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineAllBarPositions.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,85 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { getPercentValue, isNullish } from '../../../util/DataUtils';
+import { isWellBehavedNumber } from '../../../util/isWellBehavedNumber';
+function getBarPositions(barGap, barCategoryGap, bandSize, sizeList, maxBarSize) {
+  var _sizeList$;
+  var len = sizeList.length;
+  if (len < 1) {
+    return undefined;
+  }
+  var realBarGap = getPercentValue(barGap, bandSize, 0, true);
+  var result;
+  var initialValue = [];
+
+  // whether is barSize set by user
+  // Okay but why does it check only for the first element? What if the first element is set but others are not?
+  if (isWellBehavedNumber((_sizeList$ = sizeList[0]) === null || _sizeList$ === void 0 ? void 0 : _sizeList$.barSize)) {
+    var useFull = false;
+    var fullBarSize = bandSize / len;
+    var sum = sizeList.reduce((res, entry) => res + (entry.barSize || 0), 0);
+    sum += (len - 1) * realBarGap;
+    if (sum >= bandSize) {
+      sum -= (len - 1) * realBarGap;
+      realBarGap = 0;
+    }
+    if (sum >= bandSize && fullBarSize > 0) {
+      useFull = true;
+      fullBarSize *= 0.9;
+      sum = len * fullBarSize;
+    }
+    var offset = (bandSize - sum) / 2 >> 0;
+    var prev = {
+      offset: offset - realBarGap,
+      size: 0
+    };
+    result = sizeList.reduce((res, entry) => {
+      var _entry$barSize;
+      var newPosition = {
+        stackId: entry.stackId,
+        dataKeys: entry.dataKeys,
+        position: {
+          offset: prev.offset + prev.size + realBarGap,
+          size: useFull ? fullBarSize : (_entry$barSize = entry.barSize) !== null && _entry$barSize !== void 0 ? _entry$barSize : 0
+        }
+      };
+      var newRes = [...res, newPosition];
+      prev = newPosition.position;
+      return newRes;
+    }, initialValue);
+  } else {
+    var _offset = getPercentValue(barCategoryGap, bandSize, 0, true);
+    if (bandSize - 2 * _offset - (len - 1) * realBarGap <= 0) {
+      realBarGap = 0;
+    }
+    var originalSize = (bandSize - 2 * _offset - (len - 1) * realBarGap) / len;
+    if (originalSize > 1) {
+      originalSize >>= 0;
+    }
+    var size = isWellBehavedNumber(maxBarSize) ? Math.min(originalSize, maxBarSize) : originalSize;
+    result = sizeList.reduce((res, entry, i) => [...res, {
+      stackId: entry.stackId,
+      dataKeys: entry.dataKeys,
+      position: {
+        offset: _offset + (originalSize + realBarGap) * i + (originalSize - size) / 2,
+        size
+      }
+    }], initialValue);
+  }
+  return result;
+}
+export var combineAllBarPositions = (sizeList, globalMaxBarSize, barGap, barCategoryGap, barBandSize, bandSize, childMaxBarSize) => {
+  var maxBarSize = isNullish(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;
+  var allBarPositions = getBarPositions(barGap, barCategoryGap, barBandSize !== bandSize ? barBandSize : bandSize, sizeList, maxBarSize);
+  if (barBandSize !== bandSize && allBarPositions != null) {
+    allBarPositions = allBarPositions.map(pos => _objectSpread(_objectSpread({}, pos), {}, {
+      position: _objectSpread(_objectSpread({}, pos.position), {}, {
+        offset: pos.position.offset - barBandSize / 2
+      })
+    }));
+  }
+  return allBarPositions;
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineAxisRangeWithReverse.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineAxisRangeWithReverse.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineAxisRangeWithReverse.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,9 @@
+export var combineAxisRangeWithReverse = (axisSettings, axisRange) => {
+  if (!axisSettings || !axisRange) {
+    return undefined;
+  }
+  if (axisSettings !== null && axisSettings !== void 0 && axisSettings.reversed) {
+    return [axisRange[1], axisRange[0]];
+  }
+  return axisRange;
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineBarPosition.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineBarPosition.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineBarPosition.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,10 @@
+export var combineBarPosition = (allBarPositions, barSettings) => {
+  if (allBarPositions == null || barSettings == null) {
+    return undefined;
+  }
+  var position = allBarPositions.find(p => p.stackId === barSettings.stackId && barSettings.dataKey != null && p.dataKeys.includes(barSettings.dataKey));
+  if (position == null) {
+    return undefined;
+  }
+  return position.position;
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineBarSizeList.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineBarSizeList.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineBarSizeList.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,44 @@
+import { isStacked } from '../../types/StackedGraphicalItem';
+import { getPercentValue, isNullish } from '../../../util/DataUtils';
+var getBarSize = (globalSize, totalSize, selfSize) => {
+  var barSize = selfSize !== null && selfSize !== void 0 ? selfSize : globalSize;
+  if (isNullish(barSize)) {
+    return undefined;
+  }
+  return getPercentValue(barSize, totalSize, 0);
+};
+export var combineBarSizeList = (allBars, globalSize, totalSize) => {
+  var initialValue = {};
+  var stackedBars = allBars.filter(isStacked);
+  var unstackedBars = allBars.filter(b => b.stackId == null);
+  var groupByStack = stackedBars.reduce((acc, bar) => {
+    var s = acc[bar.stackId];
+    if (s == null) {
+      s = [];
+    }
+    s.push(bar);
+    acc[bar.stackId] = s;
+    return acc;
+  }, initialValue);
+  var stackedSizeList = Object.entries(groupByStack).map(_ref => {
+    var _bars$;
+    var [stackId, bars] = _ref;
+    var dataKeys = bars.map(b => b.dataKey);
+    var barSize = getBarSize(globalSize, totalSize, (_bars$ = bars[0]) === null || _bars$ === void 0 ? void 0 : _bars$.barSize);
+    return {
+      stackId,
+      dataKeys,
+      barSize
+    };
+  });
+  var unstackedSizeList = unstackedBars.map(b => {
+    var dataKeys = [b.dataKey].filter(dk => dk != null);
+    var barSize = getBarSize(globalSize, totalSize, b.barSize);
+    return {
+      stackId: undefined,
+      dataKeys,
+      barSize
+    };
+  });
+  return [...stackedSizeList, ...unstackedSizeList];
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineCheckedDomain.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineCheckedDomain.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineCheckedDomain.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,43 @@
+import { isWellFormedNumberDomain } from '../../../util/isDomainSpecifiedByUser';
+import { isWellBehavedNumber } from '../../../util/isWellBehavedNumber';
+
+/**
+ * This function validates and transforms the axis domain so that it is safe to use in the provided scale.
+ */
+export var combineCheckedDomain = (realScaleType, axisDomain) => {
+  if (axisDomain == null) {
+    return undefined;
+  }
+  switch (realScaleType) {
+    case 'linear':
+      {
+        /*
+         * linear scale only reads the first two numbers in the domain, and ignores everything else.
+         * So if it happens that someone somehow gave us a bigger domain,
+         * let's pick the min and max from it.
+         */
+        if (!isWellFormedNumberDomain(axisDomain)) {
+          var min, max;
+          for (var i = 0; i < axisDomain.length; i++) {
+            var value = axisDomain[i];
+            if (!isWellBehavedNumber(value)) {
+              continue;
+            }
+            if (min === undefined || value < min) {
+              min = value;
+            }
+            if (max === undefined || value > max) {
+              max = value;
+            }
+          }
+          if (min !== undefined && max !== undefined) {
+            return [min, max];
+          }
+          return undefined;
+        }
+        return axisDomain;
+      }
+    default:
+      return axisDomain;
+  }
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineCoordinateForDefaultIndex.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineCoordinateForDefaultIndex.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineCoordinateForDefaultIndex.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,36 @@
+export var combineCoordinateForDefaultIndex = (width, height, layout, offset, tooltipTicks, defaultIndex, tooltipConfigurations) => {
+  if (defaultIndex == null) {
+    return undefined;
+  }
+  /*
+   * With defaultIndex alone, we don't have enough information to decide _which_ of the multiple tooltips to display.
+   * Maybe one day we could add new prop `activeGraphicalItemId` to the chart to help with that.
+   * Until then, we choose the first one.
+   */
+  var firstConfiguration = tooltipConfigurations[0];
+  var maybePosition = firstConfiguration === null || firstConfiguration === void 0 ? void 0 : firstConfiguration.getPosition(defaultIndex);
+  if (maybePosition != null) {
+    return maybePosition;
+  }
+  var tick = tooltipTicks === null || tooltipTicks === void 0 ? void 0 : tooltipTicks[Number(defaultIndex)];
+  if (!tick) {
+    return undefined;
+  }
+  switch (layout) {
+    case 'horizontal':
+      {
+        return {
+          x: tick.coordinate,
+          y: (offset.top + height) / 2
+        };
+      }
+    default:
+      {
+        // This logic is not super sound - it conflates vertical, radial, centric layouts into just one. TODO improve!
+        return {
+          x: (offset.left + width) / 2,
+          y: tick.coordinate
+        };
+      }
+  }
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineDisplayedStackedData.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineDisplayedStackedData.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineDisplayedStackedData.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,51 @@
+import { getStackSeriesIdentifier } from '../../../util/stacks/getStackSeriesIdentifier';
+import { getValueByDataKey } from '../../../util/ChartUtils';
+
+/**
+ * In a stacked chart, each graphical item has its own data. That data could be either:
+ * - defined on the chart root, in which case the item gets a unique dataKey
+ * - or defined on the item itself, in which case multiple items can share the same dataKey
+ *
+ * That means we cannot use the dataKey as a unique identifier for the item.
+ *
+ * This type represents a single data point in a stacked chart, where each key is a series identifier
+ * and the value is the numeric value for that series using the numerical axis dataKey.
+ */
+
+export function combineDisplayedStackedData(stackedGraphicalItems, _ref, tooltipAxisSettings) {
+  var {
+    chartData = []
+  } = _ref;
+  var {
+    allowDuplicatedCategory,
+    dataKey: tooltipDataKey
+  } = tooltipAxisSettings;
+
+  // A map of tooltip data keys to the stacked data points
+  var knownItemsByDataKey = new Map();
+  stackedGraphicalItems.forEach(item => {
+    var _item$data;
+    // If there is no data on the individual item then we use the root chart data
+    var resolvedData = (_item$data = item.data) !== null && _item$data !== void 0 ? _item$data : chartData;
+    if (resolvedData == null || resolvedData.length === 0) {
+      // if that doesn't work then we skip this item
+      return;
+    }
+    var stackIdentifier = getStackSeriesIdentifier(item);
+    resolvedData.forEach((entry, index) => {
+      var tooltipValue = tooltipDataKey == null || allowDuplicatedCategory ? index : String(getValueByDataKey(entry, tooltipDataKey, null));
+      var numericValue = getValueByDataKey(entry, item.dataKey, 0);
+      var curr;
+      if (knownItemsByDataKey.has(tooltipValue)) {
+        curr = knownItemsByDataKey.get(tooltipValue);
+      } else {
+        curr = {};
+      }
+      Object.assign(curr, {
+        [stackIdentifier]: numericValue
+      });
+      knownItemsByDataKey.set(tooltipValue, curr);
+    });
+  });
+  return Array.from(knownItemsByDataKey.values());
+}
Index: node_modules/recharts/es6/state/selectors/combiners/combineStackedData.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineStackedData.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineStackedData.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,24 @@
+import { getStackSeriesIdentifier } from '../../../util/stacks/getStackSeriesIdentifier';
+export var combineStackedData = (stackGroups, barSettings) => {
+  var stackSeriesIdentifier = getStackSeriesIdentifier(barSettings);
+  if (!stackGroups || stackSeriesIdentifier == null || barSettings == null) {
+    return undefined;
+  }
+  var {
+    stackId
+  } = barSettings;
+  if (stackId == null) {
+    return undefined;
+  }
+  var stackGroup = stackGroups[stackId];
+  if (!stackGroup) {
+    return undefined;
+  }
+  var {
+    stackedData
+  } = stackGroup;
+  if (!stackedData) {
+    return undefined;
+  }
+  return stackedData.find(sd => sd.key === stackSeriesIdentifier);
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineTooltipInteractionState.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineTooltipInteractionState.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineTooltipInteractionState.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,58 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { noInteraction } from '../../tooltipSlice';
+function chooseAppropriateMouseInteraction(tooltipState, tooltipEventType, trigger) {
+  if (tooltipEventType === 'axis') {
+    if (trigger === 'click') {
+      return tooltipState.axisInteraction.click;
+    }
+    return tooltipState.axisInteraction.hover;
+  }
+  if (trigger === 'click') {
+    return tooltipState.itemInteraction.click;
+  }
+  return tooltipState.itemInteraction.hover;
+}
+function hasBeenActivePreviously(tooltipInteractionState) {
+  return tooltipInteractionState.index != null;
+}
+export var combineTooltipInteractionState = (tooltipState, tooltipEventType, trigger, defaultIndex) => {
+  if (tooltipEventType == null) {
+    return noInteraction;
+  }
+  var appropriateMouseInteraction = chooseAppropriateMouseInteraction(tooltipState, tooltipEventType, trigger);
+  if (appropriateMouseInteraction == null) {
+    return noInteraction;
+  }
+  if (appropriateMouseInteraction.active) {
+    return appropriateMouseInteraction;
+  }
+  if (tooltipState.keyboardInteraction.active) {
+    return tooltipState.keyboardInteraction;
+  }
+  if (tooltipState.syncInteraction.active && tooltipState.syncInteraction.index != null) {
+    return tooltipState.syncInteraction;
+  }
+  var activeFromProps = tooltipState.settings.active === true;
+  if (hasBeenActivePreviously(appropriateMouseInteraction)) {
+    if (activeFromProps) {
+      return _objectSpread(_objectSpread({}, appropriateMouseInteraction), {}, {
+        active: true
+      });
+    }
+  } else if (defaultIndex != null) {
+    return {
+      active: true,
+      coordinate: undefined,
+      dataKey: undefined,
+      index: defaultIndex,
+      graphicalItemId: undefined
+    };
+  }
+  return _objectSpread(_objectSpread({}, noInteraction), {}, {
+    coordinate: appropriateMouseInteraction.coordinate
+  });
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayload.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayload.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayload.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,115 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { findEntryInArray } from '../../../util/DataUtils';
+import { getTooltipEntry, getValueByDataKey } from '../../../util/ChartUtils';
+import { getSliced } from '../../../util/getSliced';
+function selectFinalData(dataDefinedOnItem, dataDefinedOnChart) {
+  /*
+   * If a payload has data specified directly from the graphical item, prefer that.
+   * Otherwise, fill in data from the chart level, using the same index.
+   */
+  if (dataDefinedOnItem != null) {
+    return dataDefinedOnItem;
+  }
+  return dataDefinedOnChart;
+}
+export var combineTooltipPayload = (tooltipPayloadConfigurations, activeIndex, chartDataState, tooltipAxisDataKey, activeLabel, tooltipPayloadSearcher, tooltipEventType) => {
+  if (activeIndex == null || tooltipPayloadSearcher == null) {
+    return undefined;
+  }
+  var {
+    chartData,
+    computedData,
+    dataStartIndex,
+    dataEndIndex
+  } = chartDataState;
+  var init = [];
+  return tooltipPayloadConfigurations.reduce((agg, _ref) => {
+    var _settings$dataKey;
+    var {
+      dataDefinedOnItem,
+      settings
+    } = _ref;
+    var finalData = selectFinalData(dataDefinedOnItem, chartData);
+    var sliced = Array.isArray(finalData) ? getSliced(finalData, dataStartIndex, dataEndIndex) : finalData;
+    var finalDataKey = (_settings$dataKey = settings === null || settings === void 0 ? void 0 : settings.dataKey) !== null && _settings$dataKey !== void 0 ? _settings$dataKey : tooltipAxisDataKey;
+    // BaseAxisProps does not support nameKey but it could!
+    var finalNameKey = settings === null || settings === void 0 ? void 0 : settings.nameKey; // ?? tooltipAxis?.nameKey;
+    var tooltipPayload;
+    if (tooltipAxisDataKey && Array.isArray(sliced) &&
+    /*
+     * findEntryInArray won't work for Scatter because Scatter provides an array of arrays
+     * as tooltip payloads and findEntryInArray is not prepared to handle that.
+     * Sad but also ScatterChart only allows 'item' tooltipEventType
+     * and also this is only a problem if there are multiple Scatters and each has its own data array
+     * so let's fix that some other time.
+     */
+    !Array.isArray(sliced[0]) &&
+    /*
+     * If the tooltipEventType is 'axis', we should search for the dataKey in the sliced data
+     * because thanks to allowDuplicatedCategory=false, the order of elements in the array
+     * no longer matches the order of elements in the original data
+     * and so we need to search by the active dataKey + label rather than by index.
+     *
+     * The same happens if multiple graphical items are present in the chart
+     * and each of them has its own data array. Those arrays get concatenated
+     * and again the tooltip index no longer matches the original data.
+     *
+     * On the other hand the tooltipEventType 'item' should always search by index
+     * because we get the index from interacting over the individual elements
+     * which is always accurate, irrespective of the allowDuplicatedCategory setting.
+     */
+    tooltipEventType === 'axis') {
+      tooltipPayload = findEntryInArray(sliced, tooltipAxisDataKey, activeLabel);
+    } else {
+      /*
+       * This is a problem because it assumes that the index is pointing to the displayed data
+       * which it isn't because the index is pointing to the tooltip ticks array.
+       * The above approach (with findEntryInArray) is the correct one, but it only works
+       * if the axis dataKey is defined explicitly, and if the data is an array of objects.
+       */
+      tooltipPayload = tooltipPayloadSearcher(sliced, activeIndex, computedData, finalNameKey);
+    }
+    if (Array.isArray(tooltipPayload)) {
+      tooltipPayload.forEach(item => {
+        var newSettings = _objectSpread(_objectSpread({}, settings), {}, {
+          // @ts-expect-error we're assuming that item has name and unit properties
+          name: item.name,
+          // @ts-expect-error we're assuming that item has name and unit properties
+          unit: item.unit,
+          // color and fill are erased to keep 100% the identical behaviour to recharts 2.x - but there's nothing stopping us from returning them here. It's technically a breaking change.
+          color: undefined,
+          // color and fill are erased to keep 100% the identical behaviour to recharts 2.x - but there's nothing stopping us from returning them here. It's technically a breaking change.
+          fill: undefined
+        });
+        agg.push(getTooltipEntry({
+          tooltipEntrySettings: newSettings,
+          // @ts-expect-error we're assuming that item has name and unit properties
+          dataKey: item.dataKey,
+          // @ts-expect-error we're assuming that item has name and unit properties
+          payload: item.payload,
+          // @ts-expect-error getValueByDataKey does not validate the output type
+          value: getValueByDataKey(item.payload, item.dataKey),
+          // @ts-expect-error we're assuming that item has name and unit properties
+          name: item.name
+        }));
+      });
+    } else {
+      var _getValueByDataKey;
+      // I am not quite sure why these two branches (Array vs Array of Arrays) have to behave differently - I imagine we should unify these. 3.x breaking change?
+      agg.push(getTooltipEntry({
+        tooltipEntrySettings: settings,
+        dataKey: finalDataKey,
+        payload: tooltipPayload,
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        value: getValueByDataKey(tooltipPayload, finalDataKey),
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        name: (_getValueByDataKey = getValueByDataKey(tooltipPayload, finalNameKey)) !== null && _getValueByDataKey !== void 0 ? _getValueByDataKey : settings === null || settings === void 0 ? void 0 : settings.name
+      }));
+    }
+    return agg;
+  }, init);
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayloadConfigurations.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayloadConfigurations.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayloadConfigurations.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,36 @@
+export var combineTooltipPayloadConfigurations = (tooltipState, tooltipEventType, trigger, defaultIndex) => {
+  // if tooltip reacts to axis interaction, then we display all items at the same time.
+  if (tooltipEventType === 'axis') {
+    return tooltipState.tooltipItemPayloads;
+  }
+  /*
+   * By now we already know that tooltipEventType is 'item', so we can only search in itemInteractions.
+   * item means that only the hovered or clicked item will be present in the tooltip.
+   */
+  if (tooltipState.tooltipItemPayloads.length === 0) {
+    // No point filtering if the payload is empty
+    return [];
+  }
+  var filterByGraphicalItemId;
+  if (trigger === 'hover') {
+    filterByGraphicalItemId = tooltipState.itemInteraction.hover.graphicalItemId;
+  } else {
+    filterByGraphicalItemId = tooltipState.itemInteraction.click.graphicalItemId;
+  }
+  if (filterByGraphicalItemId == null && defaultIndex != null) {
+    /*
+     * So when we use `defaultIndex` - we don't have a dataKey to filter by because user did not hover over anything yet.
+     * In that case let's display the first item in the tooltip; after all, this is `item` interaction case,
+     * so we should display only one item at a time instead of all.
+     */
+    var firstItemPayload = tooltipState.tooltipItemPayloads[0];
+    if (firstItemPayload != null) {
+      return [firstItemPayload];
+    }
+    return [];
+  }
+  return tooltipState.tooltipItemPayloads.filter(tpc => {
+    var _tpc$settings;
+    return ((_tpc$settings = tpc.settings) === null || _tpc$settings === void 0 ? void 0 : _tpc$settings.graphicalItemId) === filterByGraphicalItemId;
+  });
+};
Index: node_modules/recharts/es6/state/selectors/containerSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/containerSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/containerSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,4 @@
+export var selectChartWidth = state => state.layout.width;
+export var selectChartHeight = state => state.layout.height;
+export var selectContainerScale = state => state.layout.scale;
+export var selectMargin = state => state.layout.margin;
Index: node_modules/recharts/es6/state/selectors/dataSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/dataSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/dataSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,41 @@
+import { createSelector } from 'reselect';
+/**
+ * This selector always returns the data with the indexes set by a Brush.
+ * Trouble is, that might or might not be what you want.
+ *
+ * In charts with Brush, you will sometimes want to select the full range of data, and sometimes the one decided by the Brush
+ * - even if the Brush is active, the panorama inside the Brush should show the full range of data.
+ *
+ * So instead of this selector, consider using either selectChartDataAndAlwaysIgnoreIndexes or selectChartDataWithIndexesIfNotInPanorama
+ *
+ * @param state RechartsRootState
+ * @returns data defined on the chart root element, such as BarChart or ScatterChart
+ */
+export var selectChartDataWithIndexes = state => state.chartData;
+
+/**
+ * This selector will always return the full range of data, ignoring the indexes set by a Brush.
+ * Useful for when you want to render the full range of data, even if a Brush is active.
+ * For example: in the Brush panorama, in Legend, in Tooltip.
+ */
+export var selectChartDataAndAlwaysIgnoreIndexes = createSelector([selectChartDataWithIndexes], dataState => {
+  var dataEndIndex = dataState.chartData != null ? dataState.chartData.length - 1 : 0;
+  return {
+    chartData: dataState.chartData,
+    computedData: dataState.computedData,
+    dataEndIndex,
+    dataStartIndex: 0
+  };
+});
+export var selectChartDataWithIndexesIfNotInPanoramaPosition4 = (state, _unused1, _unused2, isPanorama) => {
+  if (isPanorama) {
+    return selectChartDataAndAlwaysIgnoreIndexes(state);
+  }
+  return selectChartDataWithIndexes(state);
+};
+export var selectChartDataWithIndexesIfNotInPanoramaPosition3 = (state, _unused1, isPanorama) => {
+  if (isPanorama) {
+    return selectChartDataAndAlwaysIgnoreIndexes(state);
+  }
+  return selectChartDataWithIndexes(state);
+};
Index: node_modules/recharts/es6/state/selectors/funnelSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/funnelSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/funnelSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,53 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { computeFunnelTrapezoids } from '../../cartesian/Funnel';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';
+var pickFunnelSettings = (_state, funnelSettings) => funnelSettings;
+export var selectFunnelTrapezoids = createSelector([selectChartOffsetInternal, pickFunnelSettings, selectChartDataAndAlwaysIgnoreIndexes], (offset, _ref, _ref2) => {
+  var {
+    data,
+    dataKey,
+    nameKey,
+    tooltipType,
+    lastShapeType,
+    reversed,
+    customWidth,
+    cells,
+    presentationProps,
+    id: graphicalItemId
+  } = _ref;
+  var {
+    chartData
+  } = _ref2;
+  var displayedData;
+  if (data != null && data.length > 0) {
+    displayedData = data;
+  } else if (chartData != null && chartData.length > 0) {
+    displayedData = chartData;
+  }
+  if (displayedData && displayedData.length) {
+    displayedData = displayedData.map((entry, index) => _objectSpread(_objectSpread(_objectSpread({
+      payload: entry
+    }, presentationProps), entry), cells && cells[index] && cells[index].props));
+  } else if (cells && cells.length) {
+    displayedData = cells.map(cell => _objectSpread(_objectSpread({}, presentationProps), cell.props));
+  } else {
+    return [];
+  }
+  return computeFunnelTrapezoids({
+    dataKey,
+    nameKey,
+    displayedData,
+    tooltipType,
+    lastShapeType,
+    reversed,
+    offset,
+    customWidth,
+    graphicalItemId
+  });
+});
Index: node_modules/recharts/es6/state/selectors/graphicalItemSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/graphicalItemSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/graphicalItemSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,9 @@
+import { defaultAxisId } from '../cartesianAxisSlice';
+export function selectXAxisIdFromGraphicalItemId(state, id) {
+  var _state$graphicalItems, _state$graphicalItems2;
+  return (_state$graphicalItems = (_state$graphicalItems2 = state.graphicalItems.cartesianItems.find(item => item.id === id)) === null || _state$graphicalItems2 === void 0 ? void 0 : _state$graphicalItems2.xAxisId) !== null && _state$graphicalItems !== void 0 ? _state$graphicalItems : defaultAxisId;
+}
+export function selectYAxisIdFromGraphicalItemId(state, id) {
+  var _state$graphicalItems3, _state$graphicalItems4;
+  return (_state$graphicalItems3 = (_state$graphicalItems4 = state.graphicalItems.cartesianItems.find(item => item.id === id)) === null || _state$graphicalItems4 === void 0 ? void 0 : _state$graphicalItems4.yAxisId) !== null && _state$graphicalItems3 !== void 0 ? _state$graphicalItems3 : defaultAxisId;
+}
Index: node_modules/recharts/es6/state/selectors/legendSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/legendSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/legendSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,12 @@
+import { createSelector } from 'reselect';
+import sortBy from 'es-toolkit/compat/sortBy';
+export var selectLegendSettings = state => state.legend.settings;
+export var selectLegendSize = state => state.legend.size;
+var selectAllLegendPayload2DArray = state => state.legend.payload;
+export var selectLegendPayload = createSelector([selectAllLegendPayload2DArray, selectLegendSettings], (payloads, _ref) => {
+  var {
+    itemSorter
+  } = _ref;
+  var flat = payloads.flat(1);
+  return itemSorter ? sortBy(flat, itemSorter) : flat;
+});
Index: node_modules/recharts/es6/state/selectors/lineSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/lineSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/lineSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,63 @@
+import { createSelector } from 'reselect';
+import { computeLinePoints } from '../../cartesian/Line';
+import { selectChartDataWithIndexesIfNotInPanoramaPosition4 } from './dataSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectAxisWithScale, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems } from './axisSelectors';
+import { getBandSizeOfAxis, isCategoricalAxis } from '../../util/ChartUtils';
+var selectXAxisWithScale = (state, xAxisId, _yAxisId, isPanorama) => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+var selectXAxisTicks = (state, xAxisId, _yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisWithScale = (state, _xAxisId, yAxisId, isPanorama) => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+var selectYAxisTicks = (state, _xAxisId, yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+var selectBandSize = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {
+  if (isCategoricalAxis(layout, 'xAxis')) {
+    return getBandSizeOfAxis(xAxis, xAxisTicks, false);
+  }
+  return getBandSizeOfAxis(yAxis, yAxisTicks, false);
+});
+var pickLineId = (_state, _xAxisId, _yAxisId, _isPanorama, id) => id;
+function isLineSettings(item) {
+  return item.type === 'line';
+}
+
+/*
+ * There is a race condition problem because we read some data from props and some from the state.
+ * The state is updated through a dispatch and is one render behind,
+ * and so we have this weird one tick render where the displayedData in one selector have the old dataKey
+ * but the new dataKey in another selector.
+ *
+ * So here instead of reading the dataKey from the props, we always read it from the state.
+ */
+var selectSynchronisedLineSettings = createSelector([selectUnfilteredCartesianItems, pickLineId], (graphicalItems, id) => graphicalItems.filter(isLineSettings).find(x => x.id === id));
+export var selectLinePoints = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectSynchronisedLineSettings, selectBandSize, selectChartDataWithIndexesIfNotInPanoramaPosition4], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks, lineSettings, bandSize, _ref) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (lineSettings == null || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || xAxisTicks.length === 0 || yAxisTicks.length === 0 || bandSize == null || layout !== 'horizontal' && layout !== 'vertical') {
+    return undefined;
+  }
+  var {
+    dataKey,
+    data
+  } = lineSettings;
+  var displayedData;
+  if (data != null && data.length > 0) {
+    displayedData = data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+  return computeLinePoints({
+    layout,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    dataKey,
+    bandSize,
+    displayedData
+  });
+});
Index: node_modules/recharts/es6/state/selectors/numberDomainEqualityCheck.js
===================================================================
--- node_modules/recharts/es6/state/selectors/numberDomainEqualityCheck.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/numberDomainEqualityCheck.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,9 @@
+export var numberDomainEqualityCheck = (a, b) => {
+  if (a === b) {
+    return true;
+  }
+  if (a == null || b == null) {
+    return false;
+  }
+  return a[0] === b[0] && a[1] === b[1];
+};
Index: node_modules/recharts/es6/state/selectors/pickAxisId.js
===================================================================
--- node_modules/recharts/es6/state/selectors/pickAxisId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/pickAxisId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export var pickAxisId = (_state, _axisType, axisId) => axisId;
Index: node_modules/recharts/es6/state/selectors/pickAxisType.js
===================================================================
--- node_modules/recharts/es6/state/selectors/pickAxisType.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/pickAxisType.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export var pickAxisType = (_state, axisType) => axisType;
Index: node_modules/recharts/es6/state/selectors/pieSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/pieSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/pieSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,78 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { computePieSectors } from '../../polar/Pie';
+import { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { getTooltipNameProp, getValueByDataKey } from '../../util/ChartUtils';
+import { selectUnfilteredPolarItems } from './polarSelectors';
+var pickId = (_state, id) => id;
+var selectSynchronisedPieSettings = createSelector([selectUnfilteredPolarItems, pickId], (graphicalItems, id) => graphicalItems.filter(item => item.type === 'pie').find(item => item.id === id));
+
+// Keep stable reference to an empty array to prevent re-renders
+var emptyArray = [];
+var pickCells = (_state, _id, cells) => {
+  if ((cells === null || cells === void 0 ? void 0 : cells.length) === 0) {
+    return emptyArray;
+  }
+  return cells;
+};
+export var selectDisplayedData = createSelector([selectChartDataAndAlwaysIgnoreIndexes, selectSynchronisedPieSettings, pickCells], (_ref, pieSettings, cells) => {
+  var {
+    chartData
+  } = _ref;
+  if (pieSettings == null) {
+    return undefined;
+  }
+  var displayedData;
+  if ((pieSettings === null || pieSettings === void 0 ? void 0 : pieSettings.data) != null && pieSettings.data.length > 0) {
+    displayedData = pieSettings.data;
+  } else {
+    displayedData = chartData;
+  }
+  if ((!displayedData || !displayedData.length) && cells != null) {
+    displayedData = cells.map(cell => _objectSpread(_objectSpread({}, pieSettings.presentationProps), cell.props));
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+  return displayedData;
+});
+export var selectPieLegend = createSelector([selectDisplayedData, selectSynchronisedPieSettings, pickCells], (displayedData, pieSettings, cells) => {
+  if (displayedData == null || pieSettings == null) {
+    return undefined;
+  }
+  return displayedData.map((entry, i) => {
+    var _cells$i;
+    var name = getValueByDataKey(entry, pieSettings.nameKey, pieSettings.name);
+    var color;
+    if (cells !== null && cells !== void 0 && (_cells$i = cells[i]) !== null && _cells$i !== void 0 && (_cells$i = _cells$i.props) !== null && _cells$i !== void 0 && _cells$i.fill) {
+      color = cells[i].props.fill;
+    } else if (typeof entry === 'object' && entry != null && 'fill' in entry) {
+      color = entry.fill;
+    } else {
+      color = pieSettings.fill;
+    }
+    return {
+      value: getTooltipNameProp(name, pieSettings.dataKey),
+      color,
+      // @ts-expect-error we need a better typing for our data inputs
+      payload: entry,
+      type: pieSettings.legendType
+    };
+  });
+});
+export var selectPieSectors = createSelector([selectDisplayedData, selectSynchronisedPieSettings, pickCells, selectChartOffsetInternal], (displayedData, pieSettings, cells, offset) => {
+  if (pieSettings == null || displayedData == null) {
+    return undefined;
+  }
+  return computePieSectors({
+    offset,
+    pieSettings,
+    displayedData,
+    cells
+  });
+});
Index: node_modules/recharts/es6/state/selectors/polarAxisSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/polarAxisSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/polarAxisSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,132 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { selectChartHeight, selectChartWidth } from './containerSelectors';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { getMaxRadius } from '../../util/PolarUtils';
+import { getPercentValue } from '../../util/DataUtils';
+import { defaultPolarAngleAxisProps } from '../../polar/defaultPolarAngleAxisProps';
+import { defaultPolarRadiusAxisProps } from '../../polar/defaultPolarRadiusAxisProps';
+import { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';
+import { selectChartLayout, selectPolarChartLayout } from '../../context/chartLayoutContext';
+import { getAxisTypeBasedOnLayout } from '../../util/getAxisTypeBasedOnLayout';
+export var implicitAngleAxis = {
+  allowDataOverflow: defaultPolarAngleAxisProps.allowDataOverflow,
+  allowDecimals: defaultPolarAngleAxisProps.allowDecimals,
+  allowDuplicatedCategory: false,
+  // defaultPolarAngleAxisProps.allowDuplicatedCategory has it set to true but the actual axis rendering ignores the prop because reasons,
+  dataKey: undefined,
+  domain: undefined,
+  id: defaultPolarAngleAxisProps.angleAxisId,
+  includeHidden: false,
+  name: undefined,
+  reversed: defaultPolarAngleAxisProps.reversed,
+  scale: defaultPolarAngleAxisProps.scale,
+  tick: defaultPolarAngleAxisProps.tick,
+  tickCount: undefined,
+  ticks: undefined,
+  type: defaultPolarAngleAxisProps.type,
+  unit: undefined
+};
+export var implicitRadiusAxis = {
+  allowDataOverflow: defaultPolarRadiusAxisProps.allowDataOverflow,
+  allowDecimals: defaultPolarRadiusAxisProps.allowDecimals,
+  allowDuplicatedCategory: defaultPolarRadiusAxisProps.allowDuplicatedCategory,
+  dataKey: undefined,
+  domain: undefined,
+  id: defaultPolarRadiusAxisProps.radiusAxisId,
+  includeHidden: defaultPolarRadiusAxisProps.includeHidden,
+  name: undefined,
+  reversed: defaultPolarRadiusAxisProps.reversed,
+  scale: defaultPolarRadiusAxisProps.scale,
+  tick: defaultPolarRadiusAxisProps.tick,
+  tickCount: defaultPolarRadiusAxisProps.tickCount,
+  ticks: undefined,
+  type: defaultPolarRadiusAxisProps.type,
+  unit: undefined
+};
+var selectAngleAxisNoDefaults = (state, angleAxisId) => {
+  if (angleAxisId == null) {
+    return undefined;
+  }
+  return state.polarAxis.angleAxis[angleAxisId];
+};
+export var selectAngleAxis = createSelector([selectAngleAxisNoDefaults, selectPolarChartLayout], (angleAxisSettings, layout) => {
+  var _getAxisTypeBasedOnLa;
+  if (angleAxisSettings != null) {
+    return angleAxisSettings;
+  }
+  var evaluatedType = (_getAxisTypeBasedOnLa = getAxisTypeBasedOnLayout(layout, 'angleAxis', implicitAngleAxis.type)) !== null && _getAxisTypeBasedOnLa !== void 0 ? _getAxisTypeBasedOnLa : 'category';
+  return _objectSpread(_objectSpread({}, implicitAngleAxis), {}, {
+    type: evaluatedType
+  });
+});
+var selectRadiusAxisNoDefaults = (state, radiusAxisId) => {
+  return state.polarAxis.radiusAxis[radiusAxisId];
+};
+export var selectRadiusAxis = createSelector([selectRadiusAxisNoDefaults, selectPolarChartLayout], (radiusAxisSettings, layout) => {
+  var _getAxisTypeBasedOnLa2;
+  if (radiusAxisSettings != null) {
+    return radiusAxisSettings;
+  }
+  var evaluatedType = (_getAxisTypeBasedOnLa2 = getAxisTypeBasedOnLayout(layout, 'radiusAxis', implicitRadiusAxis.type)) !== null && _getAxisTypeBasedOnLa2 !== void 0 ? _getAxisTypeBasedOnLa2 : 'category';
+  return _objectSpread(_objectSpread({}, implicitRadiusAxis), {}, {
+    type: evaluatedType
+  });
+});
+export var selectPolarOptions = state => state.polarOptions;
+export var selectMaxRadius = createSelector([selectChartWidth, selectChartHeight, selectChartOffsetInternal], getMaxRadius);
+var selectInnerRadius = createSelector([selectPolarOptions, selectMaxRadius], (polarChartOptions, maxRadius) => {
+  if (polarChartOptions == null) {
+    return undefined;
+  }
+  return getPercentValue(polarChartOptions.innerRadius, maxRadius, 0);
+});
+export var selectOuterRadius = createSelector([selectPolarOptions, selectMaxRadius], (polarChartOptions, maxRadius) => {
+  if (polarChartOptions == null) {
+    return undefined;
+  }
+  return getPercentValue(polarChartOptions.outerRadius, maxRadius, maxRadius * 0.8);
+});
+var combineAngleAxisRange = polarOptions => {
+  if (polarOptions == null) {
+    return [0, 0];
+  }
+  var {
+    startAngle,
+    endAngle
+  } = polarOptions;
+  return [startAngle, endAngle];
+};
+export var selectAngleAxisRange = createSelector([selectPolarOptions], combineAngleAxisRange);
+export var selectAngleAxisRangeWithReversed = createSelector([selectAngleAxis, selectAngleAxisRange], combineAxisRangeWithReverse);
+export var selectRadiusAxisRange = createSelector([selectMaxRadius, selectInnerRadius, selectOuterRadius], (maxRadius, innerRadius, outerRadius) => {
+  if (maxRadius == null || innerRadius == null || outerRadius == null) {
+    return undefined;
+  }
+  return [innerRadius, outerRadius];
+});
+export var selectRadiusAxisRangeWithReversed = createSelector([selectRadiusAxis, selectRadiusAxisRange], combineAxisRangeWithReverse);
+export var selectPolarViewBox = createSelector([selectChartLayout, selectPolarOptions, selectInnerRadius, selectOuterRadius, selectChartWidth, selectChartHeight], (layout, polarOptions, innerRadius, outerRadius, width, height) => {
+  if (layout !== 'centric' && layout !== 'radial' || polarOptions == null || innerRadius == null || outerRadius == null) {
+    return undefined;
+  }
+  var {
+    cx,
+    cy,
+    startAngle,
+    endAngle
+  } = polarOptions;
+  return {
+    cx: getPercentValue(cx, width, width / 2),
+    cy: getPercentValue(cy, height, height / 2),
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle,
+    clockWise: false // this property look useful, why not use it?
+  };
+});
Index: node_modules/recharts/es6/state/selectors/polarGridSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/polarGridSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/polarGridSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,16 @@
+import { createSelector } from 'reselect';
+import { selectPolarAxisTicks } from './polarScaleSelectors';
+var selectAngleAxisTicks = (state, anglexisId) => selectPolarAxisTicks(state, 'angleAxis', anglexisId, false);
+export var selectPolarGridAngles = createSelector([selectAngleAxisTicks], ticks => {
+  if (!ticks) {
+    return undefined;
+  }
+  return ticks.map(tick => tick.coordinate);
+});
+var selectRadiusAxisTicks = (state, radiusAxisId) => selectPolarAxisTicks(state, 'radiusAxis', radiusAxisId, false);
+export var selectPolarGridRadii = createSelector([selectRadiusAxisTicks], ticks => {
+  if (!ticks) {
+    return undefined;
+  }
+  return ticks.map(tick => tick.coordinate);
+});
Index: node_modules/recharts/es6/state/selectors/polarScaleSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/polarScaleSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/polarScaleSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,59 @@
+import { createSelector } from 'reselect';
+import { combineAxisTicks, combineCategoricalDomain, combineGraphicalItemTicks, combineScaleFunction, selectRenderableAxisSettings, selectDuplicateDomain, selectRealScaleType } from './axisSelectors';
+import { selectAngleAxis, selectAngleAxisRangeWithReversed, selectRadiusAxis, selectRadiusAxisRangeWithReversed } from './polarAxisSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectPolarAppliedValues, selectPolarAxisCheckedDomain, selectPolarNiceTicks } from './polarSelectors';
+import { pickAxisType } from './pickAxisType';
+export var selectPolarAxis = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'angleAxis':
+      {
+        return selectAngleAxis(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return selectRadiusAxis(state, axisId);
+      }
+    default:
+      {
+        throw new Error("Unexpected axis type: ".concat(axisType));
+      }
+  }
+};
+var selectPolarAxisRangeWithReversed = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'angleAxis':
+      {
+        return selectAngleAxisRangeWithReversed(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return selectRadiusAxisRangeWithReversed(state, axisId);
+      }
+    default:
+      {
+        throw new Error("Unexpected axis type: ".concat(axisType));
+      }
+  }
+};
+export var selectPolarAxisScale = createSelector([selectPolarAxis, selectRealScaleType, selectPolarAxisCheckedDomain, selectPolarAxisRangeWithReversed], combineScaleFunction);
+export var selectPolarCategoricalDomain = createSelector([selectChartLayout, selectPolarAppliedValues, selectRenderableAxisSettings, pickAxisType], combineCategoricalDomain);
+export var selectPolarAxisTicks = createSelector([selectChartLayout, selectPolarAxis, selectRealScaleType, selectPolarAxisScale, selectPolarNiceTicks, selectPolarAxisRangeWithReversed, selectDuplicateDomain, selectPolarCategoricalDomain, pickAxisType], combineAxisTicks);
+export var selectPolarAngleAxisTicks = createSelector([selectPolarAxisTicks], ticks => {
+  /*
+   * Angle axis is circular; so here we need to look for ticks that overlap (i.e., 0 and 360 degrees)
+   * and remove the duplicate tick to avoid rendering issues.
+   */
+  if (!ticks) {
+    return undefined;
+  }
+  var uniqueTicksMap = new Map();
+  ticks.forEach(tick => {
+    var normalizedCoordinate = (tick.coordinate + 360) % 360;
+    if (!uniqueTicksMap.has(normalizedCoordinate)) {
+      uniqueTicksMap.set(normalizedCoordinate, tick);
+    }
+  });
+  return Array.from(uniqueTicksMap.values());
+});
+export var selectPolarGraphicalItemAxisTicks = createSelector([selectChartLayout, selectPolarAxis, selectPolarAxisScale, selectPolarAxisRangeWithReversed, selectDuplicateDomain, selectPolarCategoricalDomain, pickAxisType], combineGraphicalItemTicks);
Index: node_modules/recharts/es6/state/selectors/polarSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/polarSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/polarSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,46 @@
+import { createSelector } from 'reselect';
+import { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';
+import { combineAppliedValues, combineAxisDomain, combineAxisDomainWithNiceTicks, combineDisplayedData, combineDomainOfAllAppliedNumericalValuesIncludingErrorValues, combineGraphicalItemsData, combineGraphicalItemsSettings, combineNiceTicks, combineNumericalDomain, itemAxisPredicate, selectAllErrorBarSettings, selectBaseAxis, selectDomainDefinition, selectDomainFromUserPreference, selectRealScaleType, selectRenderableAxisSettings } from './axisSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { getValueByDataKey } from '../../util/ChartUtils';
+import { pickAxisType } from './pickAxisType';
+import { pickAxisId } from './pickAxisId';
+import { selectStackOffsetType } from './rootPropsSelectors';
+import { combineCheckedDomain } from './combiners/combineCheckedDomain';
+export var selectUnfilteredPolarItems = state => state.graphicalItems.polarItems;
+var selectAxisPredicate = createSelector([pickAxisType, pickAxisId], itemAxisPredicate);
+export var selectPolarItemsSettings = createSelector([selectUnfilteredPolarItems, selectBaseAxis, selectAxisPredicate], combineGraphicalItemsSettings);
+var selectPolarGraphicalItemsData = createSelector([selectPolarItemsSettings], combineGraphicalItemsData);
+export var selectPolarDisplayedData = createSelector([selectPolarGraphicalItemsData, selectChartDataAndAlwaysIgnoreIndexes], combineDisplayedData);
+export var selectPolarAppliedValues = createSelector([selectPolarDisplayedData, selectBaseAxis, selectPolarItemsSettings], combineAppliedValues);
+export var selectAllPolarAppliedNumericalValues = createSelector([selectPolarDisplayedData, selectBaseAxis, selectPolarItemsSettings], (data, axisSettings, items) => {
+  if (items.length > 0) {
+    return data.flatMap(entry => {
+      return items.flatMap(item => {
+        var _axisSettings$dataKey;
+        var valueByDataKey = getValueByDataKey(entry, (_axisSettings$dataKey = axisSettings.dataKey) !== null && _axisSettings$dataKey !== void 0 ? _axisSettings$dataKey : item.dataKey);
+        return {
+          value: valueByDataKey,
+          errorDomain: [] // polar charts do not have error bars
+        };
+      });
+    }).filter(Boolean);
+  }
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {
+    return data.map(item => ({
+      value: getValueByDataKey(item, axisSettings.dataKey),
+      errorDomain: []
+    }));
+  }
+  return data.map(entry => ({
+    value: entry,
+    errorDomain: []
+  }));
+});
+var unsupportedInPolarChart = () => undefined;
+var selectDomainOfAllPolarAppliedNumericalValues = createSelector([selectPolarDisplayedData, selectBaseAxis, selectPolarItemsSettings, selectAllErrorBarSettings, pickAxisType], combineDomainOfAllAppliedNumericalValuesIncludingErrorValues);
+var selectPolarNumericalDomain = createSelector([selectBaseAxis, selectDomainDefinition, selectDomainFromUserPreference, unsupportedInPolarChart, selectDomainOfAllPolarAppliedNumericalValues, unsupportedInPolarChart, selectChartLayout, pickAxisType], combineNumericalDomain);
+export var selectPolarAxisDomain = createSelector([selectBaseAxis, selectChartLayout, selectPolarDisplayedData, selectPolarAppliedValues, selectStackOffsetType, pickAxisType, selectPolarNumericalDomain], combineAxisDomain);
+export var selectPolarNiceTicks = createSelector([selectPolarAxisDomain, selectRenderableAxisSettings, selectRealScaleType], combineNiceTicks);
+export var selectPolarAxisDomainIncludingNiceTicks = createSelector([selectBaseAxis, selectPolarAxisDomain, selectPolarNiceTicks, pickAxisType], combineAxisDomainWithNiceTicks);
+export var selectPolarAxisCheckedDomain = createSelector([selectRealScaleType, selectPolarAxisDomainIncludingNiceTicks], combineCheckedDomain);
Index: node_modules/recharts/es6/state/selectors/radarSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/radarSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/radarSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,92 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { computeRadarPoints } from '../../polar/Radar';
+import { selectPolarAxisScale, selectPolarAxisTicks } from './polarScaleSelectors';
+import { selectAngleAxis, selectPolarViewBox, selectRadiusAxis } from './polarAxisSelectors';
+import { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { getBandSizeOfAxis, isCategoricalAxis } from '../../util/ChartUtils';
+import { selectUnfilteredPolarItems } from './polarSelectors';
+var selectRadiusAxisScale = (state, radiusAxisId) => selectPolarAxisScale(state, 'radiusAxis', radiusAxisId);
+var selectRadiusAxisForRadar = createSelector([selectRadiusAxisScale], scale => {
+  if (scale == null) {
+    return undefined;
+  }
+  return {
+    scale
+  };
+});
+export var selectRadiusAxisForBandSize = createSelector([selectRadiusAxis, selectRadiusAxisScale], (axisSettings, scale) => {
+  if (axisSettings == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axisSettings), {}, {
+    scale
+  });
+});
+var selectRadiusAxisTicks = (state, radiusAxisId, _angleAxisId, isPanorama) => {
+  return selectPolarAxisTicks(state, 'radiusAxis', radiusAxisId, isPanorama);
+};
+var selectAngleAxisForRadar = (state, _radiusAxisId, angleAxisId) => selectAngleAxis(state, angleAxisId);
+var selectPolarAxisScaleForRadar = (state, _radiusAxisId, angleAxisId) => selectPolarAxisScale(state, 'angleAxis', angleAxisId);
+export var selectAngleAxisForBandSize = createSelector([selectAngleAxisForRadar, selectPolarAxisScaleForRadar], (axisSettings, scale) => {
+  if (axisSettings == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axisSettings), {}, {
+    scale
+  });
+});
+var selectAngleAxisTicks = (state, _radiusAxisId, angleAxisId, isPanorama) => {
+  return selectPolarAxisTicks(state, 'angleAxis', angleAxisId, isPanorama);
+};
+export var selectAngleAxisWithScaleAndViewport = createSelector([selectAngleAxisForRadar, selectPolarAxisScaleForRadar, selectPolarViewBox], (axisOptions, scale, polarViewBox) => {
+  if (polarViewBox == null || scale == null) {
+    return undefined;
+  }
+  return {
+    scale,
+    type: axisOptions.type,
+    dataKey: axisOptions.dataKey,
+    cx: polarViewBox.cx,
+    cy: polarViewBox.cy
+  };
+});
+var pickId = (_state, _radiusAxisId, _angleAxisId, _isPanorama, radarId) => radarId;
+var selectBandSizeOfAxis = createSelector([selectChartLayout, selectRadiusAxisForBandSize, selectRadiusAxisTicks, selectAngleAxisForBandSize, selectAngleAxisTicks], (layout, radiusAxis, radiusAxisTicks, angleAxis, angleAxisTicks) => {
+  if (isCategoricalAxis(layout, 'radiusAxis')) {
+    return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, false);
+  }
+  return getBandSizeOfAxis(angleAxis, angleAxisTicks, false);
+});
+var selectSynchronisedRadarDataKey = createSelector([selectUnfilteredPolarItems, pickId], (graphicalItems, radarId) => {
+  if (graphicalItems == null) {
+    return undefined;
+  }
+  // Find the radar item with the given radarId
+  var pgis = graphicalItems.find(item => item.type === 'radar' && radarId === item.id);
+  // If found, return its dataKey
+  return pgis === null || pgis === void 0 ? void 0 : pgis.dataKey;
+});
+export var selectRadarPoints = createSelector([selectRadiusAxisForRadar, selectAngleAxisWithScaleAndViewport, selectChartDataAndAlwaysIgnoreIndexes, selectSynchronisedRadarDataKey, selectBandSizeOfAxis], (radiusAxis, angleAxis, _ref, dataKey, bandSize) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (radiusAxis == null || angleAxis == null || chartData == null || bandSize == null || dataKey == null) {
+    return undefined;
+  }
+  var displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);
+  return computeRadarPoints({
+    radiusAxis,
+    angleAxis,
+    displayedData,
+    dataKey,
+    bandSize
+  });
+});
Index: node_modules/recharts/es6/state/selectors/radialBarSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/radialBarSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/radialBarSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,183 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { computeRadialBarDataItems } from '../../polar/RadialBar';
+import { selectChartDataAndAlwaysIgnoreIndexes, selectChartDataWithIndexes } from './dataSelectors';
+import { selectPolarAxisScale, selectPolarAxisTicks, selectPolarGraphicalItemAxisTicks } from './polarScaleSelectors';
+import { combineStackGroups, selectTooltipAxis } from './axisSelectors';
+import { selectAngleAxis, selectPolarViewBox, selectRadiusAxis } from './polarAxisSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { getBandSizeOfAxis, getBaseValueOfBar, isCategoricalAxis } from '../../util/ChartUtils';
+import { selectBarCategoryGap, selectBarGap, selectReverseStackOrder, selectRootBarSize, selectRootMaxBarSize, selectStackOffsetType } from './rootPropsSelectors';
+import { selectPolarItemsSettings, selectUnfilteredPolarItems } from './polarSelectors';
+import { isNullish } from '../../util/DataUtils';
+import { combineDisplayedStackedData } from './combiners/combineDisplayedStackedData';
+import { isStacked } from '../types/StackedGraphicalItem';
+import { combineBarSizeList } from './combiners/combineBarSizeList';
+import { combineAllBarPositions } from './combiners/combineAllBarPositions';
+import { combineStackedData } from './combiners/combineStackedData';
+import { combineBarPosition } from './combiners/combineBarPosition';
+var selectRadiusAxisForRadialBar = (state, radiusAxisId) => selectRadiusAxis(state, radiusAxisId);
+var selectRadiusAxisScaleForRadar = (state, radiusAxisId) => selectPolarAxisScale(state, 'radiusAxis', radiusAxisId);
+export var selectRadiusAxisWithScale = createSelector([selectRadiusAxisForRadialBar, selectRadiusAxisScaleForRadar], (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+export var selectRadiusAxisTicks = (state, radiusAxisId) => {
+  return selectPolarGraphicalItemAxisTicks(state, 'radiusAxis', radiusAxisId, false);
+};
+var selectAngleAxisForRadialBar = (state, _radiusAxisId, angleAxisId) => selectAngleAxis(state, angleAxisId);
+var selectAngleAxisScaleForRadialBar = (state, _radiusAxisId, angleAxisId) => selectPolarAxisScale(state, 'angleAxis', angleAxisId);
+export var selectAngleAxisWithScale = createSelector([selectAngleAxisForRadialBar, selectAngleAxisScaleForRadialBar], (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+var selectAngleAxisTicks = (state, _radiusAxisId, angleAxisId) => {
+  // here we can hardcode isPanorama to false because radialBar does not support panorama mode
+  return selectPolarAxisTicks(state, 'angleAxis', angleAxisId, false);
+};
+var pickRadialBarSettings = (_state, _radiusAxisId, _angleAxisId, radialBarSettings) => radialBarSettings;
+var selectSynchronisedRadialBarSettings = createSelector([selectUnfilteredPolarItems, pickRadialBarSettings], (graphicalItems, radialBarSettingsFromProps) => {
+  if (graphicalItems.some(pgis => pgis.type === 'radialBar' && radialBarSettingsFromProps.dataKey === pgis.dataKey && radialBarSettingsFromProps.stackId === pgis.stackId)) {
+    return radialBarSettingsFromProps;
+  }
+  return undefined;
+});
+export var selectBandSizeOfPolarAxis = createSelector([selectChartLayout, selectRadiusAxisWithScale, selectRadiusAxisTicks, selectAngleAxisWithScale, selectAngleAxisTicks], (layout, radiusAxis, radiusAxisTicks, angleAxis, angleAxisTicks) => {
+  if (isCategoricalAxis(layout, 'radiusAxis')) {
+    return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, false);
+  }
+  return getBandSizeOfAxis(angleAxis, angleAxisTicks, false);
+});
+export var selectBaseValue = createSelector([selectAngleAxisWithScale, selectRadiusAxisWithScale, selectChartLayout], (angleAxis, radiusAxis, layout) => {
+  var numericAxis = layout === 'radial' ? angleAxis : radiusAxis;
+  if (numericAxis == null || numericAxis.scale == null) {
+    return undefined;
+  }
+  return getBaseValueOfBar({
+    numericAxis
+  });
+});
+var pickCells = (_state, _radiusAxisId, _angleAxisId, _radialBarSettings, cells) => cells;
+var pickAngleAxisId = (_state, _radiusAxisId, angleAxisId, _radialBarSettings, _cells) => angleAxisId;
+var pickRadiusAxisId = (_state, radiusAxisId, _angleAxisId, _radialBarSettings, _cells) => radiusAxisId;
+export var pickMaxBarSize = (_state, _radiusAxisId, _angleAxisId, radialBarSettings, _cells) => radialBarSettings.maxBarSize;
+var isRadialBar = item => item.type === 'radialBar';
+var selectAllVisibleRadialBars = createSelector([selectChartLayout, selectUnfilteredPolarItems, pickAngleAxisId, pickRadiusAxisId], (layout, allItems, angleAxisId, radiusAxisId) => {
+  return allItems.filter(i => {
+    if (layout === 'centric') {
+      return i.angleAxisId === angleAxisId;
+    }
+    return i.radiusAxisId === radiusAxisId;
+  }).filter(i => i.hide === false).filter(isRadialBar);
+});
+
+/**
+ * The generator never returned the totalSize which means that barSize in polar chart can not support percent values.
+ * We can add that if we want to I suppose.
+ * @returns undefined - but it should be a total size of numerical axis in polar chart
+ */
+var selectPolarBarAxisSize = () => undefined;
+export var selectPolarBarSizeList = createSelector([selectAllVisibleRadialBars, selectRootBarSize, selectPolarBarAxisSize], combineBarSizeList);
+export var selectPolarBarBandSize = createSelector([selectChartLayout, selectRootMaxBarSize, selectAngleAxisWithScale, selectAngleAxisTicks, selectRadiusAxisWithScale, selectRadiusAxisTicks, pickMaxBarSize], (layout, globalMaxBarSize, angleAxis, angleAxisTicks, radiusAxis, radiusAxisTicks, childMaxBarSize) => {
+  var _ref2, _getBandSizeOfAxis2;
+  var maxBarSize = isNullish(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;
+  if (layout === 'centric') {
+    var _ref, _getBandSizeOfAxis;
+    return (_ref = (_getBandSizeOfAxis = getBandSizeOfAxis(angleAxis, angleAxisTicks, true)) !== null && _getBandSizeOfAxis !== void 0 ? _getBandSizeOfAxis : maxBarSize) !== null && _ref !== void 0 ? _ref : 0;
+  }
+  return (_ref2 = (_getBandSizeOfAxis2 = getBandSizeOfAxis(radiusAxis, radiusAxisTicks, true)) !== null && _getBandSizeOfAxis2 !== void 0 ? _getBandSizeOfAxis2 : maxBarSize) !== null && _ref2 !== void 0 ? _ref2 : 0;
+});
+export var selectAllPolarBarPositions = createSelector([selectPolarBarSizeList, selectRootMaxBarSize, selectBarGap, selectBarCategoryGap, selectPolarBarBandSize, selectBandSizeOfPolarAxis, pickMaxBarSize], combineAllBarPositions);
+export var selectPolarBarPosition = createSelector([selectAllPolarBarPositions, selectSynchronisedRadialBarSettings], combineBarPosition);
+var selectStackedRadialBars = createSelector([selectPolarItemsSettings], allPolarItems => allPolarItems.filter(isRadialBar).filter(isStacked));
+var selectPolarCombinedStackedData = createSelector([selectStackedRadialBars, selectChartDataAndAlwaysIgnoreIndexes, selectTooltipAxis], combineDisplayedStackedData);
+var selectStackGroups = createSelector([selectPolarCombinedStackedData, selectStackedRadialBars, selectStackOffsetType, selectReverseStackOrder], combineStackGroups);
+var selectRadialBarStackGroups = (state, radiusAxisId, angleAxisId) => {
+  var layout = selectChartLayout(state);
+  if (layout === 'centric') {
+    return selectStackGroups(state, 'radiusAxis', radiusAxisId);
+  }
+  return selectStackGroups(state, 'angleAxis', angleAxisId);
+};
+var selectPolarStackedData = createSelector([selectRadialBarStackGroups, selectSynchronisedRadialBarSettings], combineStackedData);
+export var selectRadialBarSectors = createSelector([selectAngleAxisWithScale, selectAngleAxisTicks, selectRadiusAxisWithScale, selectRadiusAxisTicks, selectChartDataWithIndexes, selectSynchronisedRadialBarSettings, selectBandSizeOfPolarAxis, selectChartLayout, selectBaseValue, selectPolarViewBox, pickCells, selectPolarBarPosition, selectPolarStackedData], (angleAxis, angleAxisTicks, radiusAxis, radiusAxisTicks, _ref3, radialBarSettings, bandSize, layout, baseValue, polarViewBox, cells, pos, stackedData) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref3;
+  if (radialBarSettings == null || radiusAxis == null || angleAxis == null || chartData == null || bandSize == null || pos == null || layout !== 'centric' && layout !== 'radial' || radiusAxisTicks == null || polarViewBox == null) {
+    return [];
+  }
+  var {
+    dataKey,
+    minPointSize
+  } = radialBarSettings;
+  var {
+    cx,
+    cy,
+    startAngle,
+    endAngle
+  } = polarViewBox;
+  var displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);
+  var numericAxis = layout === 'centric' ? radiusAxis : angleAxis;
+  var stackedDomain = stackedData ? numericAxis.scale.domain() : null;
+  return computeRadialBarDataItems({
+    angleAxis,
+    angleAxisTicks,
+    bandSize,
+    baseValue,
+    cells,
+    cx,
+    cy,
+    dataKey,
+    dataStartIndex,
+    displayedData,
+    endAngle,
+    layout,
+    minPointSize,
+    pos,
+    radiusAxis,
+    radiusAxisTicks,
+    stackedData,
+    stackedDomain,
+    startAngle
+  });
+});
+export var selectRadialBarLegendPayload = createSelector([selectChartDataAndAlwaysIgnoreIndexes, (_s, l) => l], (_ref4, legendType) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref4;
+  if (chartData == null) {
+    return [];
+  }
+  var displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);
+  if (displayedData.length === 0) {
+    return [];
+  }
+  return displayedData.map(entry => {
+    return {
+      type: legendType,
+      // @ts-expect-error we need a better typing for our data inputs
+      value: entry.name,
+      // @ts-expect-error we need a better typing for our data inputs
+      color: entry.fill,
+      // @ts-expect-error we need a better typing for our data inputs
+      payload: entry
+    };
+  });
+});
Index: node_modules/recharts/es6/state/selectors/rootPropsSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/rootPropsSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/rootPropsSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,11 @@
+export var selectRootMaxBarSize = state => state.rootProps.maxBarSize;
+export var selectBarGap = state => state.rootProps.barGap;
+export var selectBarCategoryGap = state => state.rootProps.barCategoryGap;
+export var selectRootBarSize = state => state.rootProps.barSize;
+export var selectStackOffsetType = state => state.rootProps.stackOffset;
+export var selectReverseStackOrder = state => state.rootProps.reverseStackOrder;
+export var selectChartName = state => state.options.chartName;
+export var selectSyncId = state => state.rootProps.syncId;
+export var selectSyncMethod = state => state.rootProps.syncMethod;
+export var selectEventEmitter = state => state.options.eventEmitter;
+export var selectChartBaseValue = state => state.rootProps.baseValue;
Index: node_modules/recharts/es6/state/selectors/scatterSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/scatterSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/scatterSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,44 @@
+import { createSelector } from 'reselect';
+import { computeScatterPoints } from '../../cartesian/Scatter';
+import { selectChartDataWithIndexesIfNotInPanoramaPosition4 } from './dataSelectors';
+import { selectAxisWithScale, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems, selectZAxisWithScale } from './axisSelectors';
+var selectXAxisWithScale = (state, xAxisId, _yAxisId, _zAxisId, _id, _cells, isPanorama) => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+var selectXAxisTicks = (state, xAxisId, _yAxisId, _zAxisId, _id, _cells, isPanorama) => selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisWithScale = (state, _xAxisId, yAxisId, _zAxisId, _id, _cells, isPanorama) => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+var selectYAxisTicks = (state, _xAxisId, yAxisId, _zAxisId, _id, _cells, isPanorama) => selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+var selectZAxis = (state, _xAxisId, _yAxisId, zAxisId) => selectZAxisWithScale(state, 'zAxis', zAxisId, false);
+var pickScatterId = (_state, _xAxisId, _yAxisId, _zAxisId, id) => id;
+var pickCells = (_state, _xAxisId, _yAxisId, _zAxisId, _id, cells) => cells;
+var scatterChartDataSelector = (state, _xAxisId, _yAxisId, _zAxisId, _id, _cells, isPanorama) => selectChartDataWithIndexesIfNotInPanoramaPosition4(state, undefined, undefined, isPanorama);
+var selectSynchronisedScatterSettings = createSelector([selectUnfilteredCartesianItems, pickScatterId], (graphicalItems, id) => {
+  return graphicalItems.filter(item => item.type === 'scatter').find(item => item.id === id);
+});
+export var selectScatterPoints = createSelector([scatterChartDataSelector, selectXAxisWithScale, selectXAxisTicks, selectYAxisWithScale, selectYAxisTicks, selectZAxis, selectSynchronisedScatterSettings, pickCells], (_ref, xAxis, xAxisTicks, yAxis, yAxisTicks, zAxis, scatterSettings, cells) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (scatterSettings == null) {
+    return undefined;
+  }
+  var displayedData;
+  if ((scatterSettings === null || scatterSettings === void 0 ? void 0 : scatterSettings.data) != null && scatterSettings.data.length > 0) {
+    displayedData = scatterSettings.data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || (xAxisTicks === null || xAxisTicks === void 0 ? void 0 : xAxisTicks.length) === 0 || (yAxisTicks === null || yAxisTicks === void 0 ? void 0 : yAxisTicks.length) === 0) {
+    return undefined;
+  }
+  return computeScatterPoints({
+    displayedData,
+    xAxis,
+    yAxis,
+    zAxis,
+    scatterSettings,
+    xAxisTicks,
+    yAxisTicks,
+    cells
+  });
+});
Index: node_modules/recharts/es6/state/selectors/selectActivePropsFromChartPointer.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectActivePropsFromChartPointer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectActivePropsFromChartPointer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,9 @@
+import { createSelector } from 'reselect';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectTooltipAxisRangeWithReverse, selectTooltipAxisTicks } from './tooltipSelectors';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { combineActiveProps, selectOrderedTooltipTicks } from './selectors';
+import { selectPolarViewBox } from './polarAxisSelectors';
+import { selectTooltipAxisType } from './selectTooltipAxisType';
+var pickChartPointer = (_state, chartPointer) => chartPointer;
+export var selectActivePropsFromChartPointer = createSelector([pickChartPointer, selectChartLayout, selectPolarViewBox, selectTooltipAxisType, selectTooltipAxisRangeWithReverse, selectTooltipAxisTicks, selectOrderedTooltipTicks, selectChartOffsetInternal], combineActiveProps);
Index: node_modules/recharts/es6/state/selectors/selectAllAxes.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectAllAxes.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectAllAxes.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,7 @@
+import { createSelector } from 'reselect';
+export var selectAllXAxes = createSelector(state => state.cartesianAxis.xAxis, xAxisMap => {
+  return Object.values(xAxisMap);
+});
+export var selectAllYAxes = createSelector(state => state.cartesianAxis.yAxis, yAxisMap => {
+  return Object.values(yAxisMap);
+});
Index: node_modules/recharts/es6/state/selectors/selectChartOffset.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectChartOffset.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectChartOffset.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,10 @@
+import { createSelector } from 'reselect';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+export var selectChartOffset = createSelector([selectChartOffsetInternal], offsetInternal => {
+  return {
+    top: offsetInternal.top,
+    bottom: offsetInternal.bottom,
+    left: offsetInternal.left,
+    right: offsetInternal.right
+  };
+});
Index: node_modules/recharts/es6/state/selectors/selectChartOffsetInternal.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectChartOffsetInternal.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectChartOffsetInternal.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,92 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { selectLegendSettings, selectLegendSize } from './legendSelectors';
+import { appendOffsetOfLegend } from '../../util/ChartUtils';
+import { selectChartHeight, selectChartWidth, selectMargin } from './containerSelectors';
+import { selectAllXAxes, selectAllYAxes } from './selectAllAxes';
+import { DEFAULT_Y_AXIS_WIDTH } from '../../util/Constants';
+export var selectBrushHeight = state => state.brush.height;
+function selectLeftAxesOffset(state) {
+  var yAxes = selectAllYAxes(state);
+  return yAxes.reduce((result, entry) => {
+    if (entry.orientation === 'left' && !entry.mirror && !entry.hide) {
+      var width = typeof entry.width === 'number' ? entry.width : DEFAULT_Y_AXIS_WIDTH;
+      return result + width;
+    }
+    return result;
+  }, 0);
+}
+function selectRightAxesOffset(state) {
+  var yAxes = selectAllYAxes(state);
+  return yAxes.reduce((result, entry) => {
+    if (entry.orientation === 'right' && !entry.mirror && !entry.hide) {
+      var width = typeof entry.width === 'number' ? entry.width : DEFAULT_Y_AXIS_WIDTH;
+      return result + width;
+    }
+    return result;
+  }, 0);
+}
+function selectTopAxesOffset(state) {
+  var xAxes = selectAllXAxes(state);
+  return xAxes.reduce((result, entry) => {
+    if (entry.orientation === 'top' && !entry.mirror && !entry.hide) {
+      return result + entry.height;
+    }
+    return result;
+  }, 0);
+}
+function selectBottomAxesOffset(state) {
+  var xAxes = selectAllXAxes(state);
+  return xAxes.reduce((result, entry) => {
+    if (entry.orientation === 'bottom' && !entry.mirror && !entry.hide) {
+      return result + entry.height;
+    }
+    return result;
+  }, 0);
+}
+
+/**
+ * For internal use only.
+ *
+ * @param root state
+ * @return ChartOffsetInternal
+ */
+export var selectChartOffsetInternal = createSelector([selectChartWidth, selectChartHeight, selectMargin, selectBrushHeight, selectLeftAxesOffset, selectRightAxesOffset, selectTopAxesOffset, selectBottomAxesOffset, selectLegendSettings, selectLegendSize], (chartWidth, chartHeight, margin, brushHeight, leftAxesOffset, rightAxesOffset, topAxesOffset, bottomAxesOffset, legendSettings, legendSize) => {
+  var offsetH = {
+    left: (margin.left || 0) + leftAxesOffset,
+    right: (margin.right || 0) + rightAxesOffset
+  };
+  var offsetV = {
+    top: (margin.top || 0) + topAxesOffset,
+    bottom: (margin.bottom || 0) + bottomAxesOffset
+  };
+  var offset = _objectSpread(_objectSpread({}, offsetV), offsetH);
+  var brushBottom = offset.bottom;
+  offset.bottom += brushHeight;
+  offset = appendOffsetOfLegend(offset, legendSettings, legendSize);
+  var offsetWidth = chartWidth - offset.left - offset.right;
+  var offsetHeight = chartHeight - offset.top - offset.bottom;
+  return _objectSpread(_objectSpread({
+    brushBottom
+  }, offset), {}, {
+    // never return negative values for height and width
+    width: Math.max(offsetWidth, 0),
+    height: Math.max(offsetHeight, 0)
+  });
+});
+export var selectChartViewBox = createSelector(selectChartOffsetInternal, offset => ({
+  x: offset.left,
+  y: offset.top,
+  width: offset.width,
+  height: offset.height
+}));
+export var selectAxisViewBox = createSelector(selectChartWidth, selectChartHeight, (width, height) => ({
+  x: 0,
+  y: 0,
+  width,
+  height
+}));
Index: node_modules/recharts/es6/state/selectors/selectPlotArea.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectPlotArea.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectPlotArea.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,14 @@
+import { createSelector } from 'reselect';
+import { selectChartOffset } from './selectChartOffset';
+import { selectChartHeight, selectChartWidth } from './containerSelectors';
+export var selectPlotArea = createSelector([selectChartOffset, selectChartWidth, selectChartHeight], (offset, chartWidth, chartHeight) => {
+  if (!offset || chartWidth == null || chartHeight == null) {
+    return undefined;
+  }
+  return {
+    x: offset.left,
+    y: offset.top,
+    width: Math.max(0, chartWidth - offset.left - offset.right),
+    height: Math.max(0, chartHeight - offset.top - offset.bottom)
+  };
+});
Index: node_modules/recharts/es6/state/selectors/selectTooltipAxisId.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipAxisId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectTooltipAxisId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export var selectTooltipAxisId = state => state.tooltip.settings.axisId;
Index: node_modules/recharts/es6/state/selectors/selectTooltipAxisType.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipAxisType.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectTooltipAxisType.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,23 @@
+import { selectChartLayout } from '../../context/chartLayoutContext';
+
+/**
+ * angle, radius, X, Y, and Z axes all have domain and range and scale and associated settings
+ */
+
+/**
+ * Z axis is never displayed and so it lacks ticks and tick settings.
+ */
+
+export var selectTooltipAxisType = state => {
+  var layout = selectChartLayout(state);
+  if (layout === 'horizontal') {
+    return 'xAxis';
+  }
+  if (layout === 'vertical') {
+    return 'yAxis';
+  }
+  if (layout === 'centric') {
+    return 'angleAxis';
+  }
+  return 'radiusAxis';
+};
Index: node_modules/recharts/es6/state/selectors/selectTooltipEventType.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipEventType.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectTooltipEventType.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+import { useAppSelector } from '../hooks';
+export var selectDefaultTooltipEventType = state => state.options.defaultTooltipEventType;
+export var selectValidateTooltipEventTypes = state => state.options.validateTooltipEventTypes;
+export function combineTooltipEventType(shared, defaultTooltipEventType, validateTooltipEventTypes) {
+  if (shared == null) {
+    return defaultTooltipEventType;
+  }
+  var eventType = shared ? 'axis' : 'item';
+  if (validateTooltipEventTypes == null) {
+    return defaultTooltipEventType;
+  }
+  return validateTooltipEventTypes.includes(eventType) ? eventType : defaultTooltipEventType;
+}
+export function selectTooltipEventType(state, shared) {
+  var defaultTooltipEventType = selectDefaultTooltipEventType(state);
+  var validateTooltipEventTypes = selectValidateTooltipEventTypes(state);
+  return combineTooltipEventType(shared, defaultTooltipEventType, validateTooltipEventTypes);
+}
+export function useTooltipEventType(shared) {
+  return useAppSelector(state => selectTooltipEventType(state, shared));
+}
Index: node_modules/recharts/es6/state/selectors/selectTooltipPayloadSearcher.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipPayloadSearcher.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectTooltipPayloadSearcher.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export var selectTooltipPayloadSearcher = state => state.options.tooltipPayloadSearcher;
Index: node_modules/recharts/es6/state/selectors/selectTooltipSettings.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectTooltipSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export var selectTooltipSettings = state => state.tooltip.settings;
Index: node_modules/recharts/es6/state/selectors/selectTooltipState.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipState.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectTooltipState.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export var selectTooltipState = state => state.tooltip;
Index: node_modules/recharts/es6/state/selectors/selectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/selectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,100 @@
+import { createSelector } from 'reselect';
+import sortBy from 'es-toolkit/compat/sortBy';
+import { useAppSelector } from '../hooks';
+import { calculateCartesianTooltipPos, calculatePolarTooltipPos } from '../../util/ChartUtils';
+import { selectChartDataWithIndexes } from './dataSelectors';
+import { selectTooltipAxisDomain, selectTooltipAxisTicks, selectTooltipDisplayedData } from './tooltipSelectors';
+import { selectTooltipAxisDataKey } from './axisSelectors';
+import { selectChartName } from './rootPropsSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { selectChartHeight, selectChartWidth } from './containerSelectors';
+import { combineActiveLabel } from './combiners/combineActiveLabel';
+import { combineTooltipInteractionState } from './combiners/combineTooltipInteractionState';
+import { combineActiveTooltipIndex } from './combiners/combineActiveTooltipIndex';
+import { combineCoordinateForDefaultIndex } from './combiners/combineCoordinateForDefaultIndex';
+import { combineTooltipPayloadConfigurations } from './combiners/combineTooltipPayloadConfigurations';
+import { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';
+import { selectTooltipState } from './selectTooltipState';
+import { combineTooltipPayload } from './combiners/combineTooltipPayload';
+import { calculateActiveTickIndex, getActiveCartesianCoordinate, getActivePolarCoordinate, isInCartesianRange } from '../../util/getActiveCoordinate';
+import { inRangeOfSector } from '../../util/PolarUtils';
+export var useChartName = () => {
+  return useAppSelector(selectChartName);
+};
+var pickTooltipEventType = (_state, tooltipEventType) => tooltipEventType;
+var pickTrigger = (_state, _tooltipEventType, trigger) => trigger;
+var pickDefaultIndex = (_state, _tooltipEventType, _trigger, defaultIndex) => defaultIndex;
+export var selectOrderedTooltipTicks = createSelector(selectTooltipAxisTicks, ticks => sortBy(ticks, o => o.coordinate));
+export var selectTooltipInteractionState = createSelector([selectTooltipState, pickTooltipEventType, pickTrigger, pickDefaultIndex], combineTooltipInteractionState);
+export var selectActiveIndex = createSelector([selectTooltipInteractionState, selectTooltipDisplayedData, selectTooltipAxisDataKey, selectTooltipAxisDomain], combineActiveTooltipIndex);
+export var selectTooltipDataKey = (state, tooltipEventType, trigger) => {
+  if (tooltipEventType == null) {
+    return undefined;
+  }
+  var tooltipState = selectTooltipState(state);
+  if (tooltipEventType === 'axis') {
+    if (trigger === 'hover') {
+      return tooltipState.axisInteraction.hover.dataKey;
+    }
+    return tooltipState.axisInteraction.click.dataKey;
+  }
+  if (trigger === 'hover') {
+    return tooltipState.itemInteraction.hover.dataKey;
+  }
+  return tooltipState.itemInteraction.click.dataKey;
+};
+export var selectTooltipPayloadConfigurations = createSelector([selectTooltipState, pickTooltipEventType, pickTrigger, pickDefaultIndex], combineTooltipPayloadConfigurations);
+export var selectCoordinateForDefaultIndex = createSelector([selectChartWidth, selectChartHeight, selectChartLayout, selectChartOffsetInternal, selectTooltipAxisTicks, pickDefaultIndex, selectTooltipPayloadConfigurations], combineCoordinateForDefaultIndex);
+export var selectActiveCoordinate = createSelector([selectTooltipInteractionState, selectCoordinateForDefaultIndex], (tooltipInteractionState, defaultIndexCoordinate) => {
+  var _tooltipInteractionSt;
+  return (_tooltipInteractionSt = tooltipInteractionState.coordinate) !== null && _tooltipInteractionSt !== void 0 ? _tooltipInteractionSt : defaultIndexCoordinate;
+});
+export var selectActiveLabel = createSelector([selectTooltipAxisTicks, selectActiveIndex], combineActiveLabel);
+export var selectTooltipPayload = createSelector([selectTooltipPayloadConfigurations, selectActiveIndex, selectChartDataWithIndexes, selectTooltipAxisDataKey, selectActiveLabel, selectTooltipPayloadSearcher, pickTooltipEventType], combineTooltipPayload);
+export var selectIsTooltipActive = createSelector([selectTooltipInteractionState, selectActiveIndex], (tooltipInteractionState, activeIndex) => {
+  return {
+    isActive: tooltipInteractionState.active && activeIndex != null,
+    activeIndex
+  };
+});
+var combineActiveCartesianProps = (chartEvent, layout, tooltipAxisType, tooltipAxisRange, tooltipTicks, orderedTooltipTicks, offset) => {
+  if (!chartEvent || !tooltipAxisType || !tooltipAxisRange || !tooltipTicks) {
+    return undefined;
+  }
+  if (!isInCartesianRange(chartEvent, offset)) {
+    return undefined;
+  }
+  var pos = calculateCartesianTooltipPos(chartEvent, layout);
+  var activeIndex = calculateActiveTickIndex(pos, orderedTooltipTicks, tooltipTicks, tooltipAxisType, tooltipAxisRange);
+  var activeCoordinate = getActiveCartesianCoordinate(layout, tooltipTicks, activeIndex, chartEvent);
+  return {
+    activeIndex: String(activeIndex),
+    activeCoordinate
+  };
+};
+var combineActivePolarProps = (chartEvent, layout, polarViewBox, tooltipAxisType, tooltipAxisRange, tooltipTicks, orderedTooltipTicks) => {
+  if (!chartEvent || !tooltipAxisType || !tooltipAxisRange || !tooltipTicks || !polarViewBox) {
+    return undefined;
+  }
+  var rangeObj = inRangeOfSector(chartEvent, polarViewBox);
+  if (!rangeObj) {
+    return undefined;
+  }
+  var pos = calculatePolarTooltipPos(rangeObj, layout);
+  var activeIndex = calculateActiveTickIndex(pos, orderedTooltipTicks, tooltipTicks, tooltipAxisType, tooltipAxisRange);
+  var activeCoordinate = getActivePolarCoordinate(layout, tooltipTicks, activeIndex, rangeObj);
+  return {
+    activeIndex: String(activeIndex),
+    activeCoordinate
+  };
+};
+export var combineActiveProps = (chartEvent, layout, polarViewBox, tooltipAxisType, tooltipAxisRange, tooltipTicks, orderedTooltipTicks, offset) => {
+  if (!chartEvent || !layout || !tooltipAxisType || !tooltipAxisRange || !tooltipTicks) {
+    return undefined;
+  }
+  if (layout === 'horizontal' || layout === 'vertical') {
+    return combineActiveCartesianProps(chartEvent, layout, tooltipAxisType, tooltipAxisRange, tooltipTicks, orderedTooltipTicks, offset);
+  }
+  return combineActivePolarProps(chartEvent, layout, polarViewBox, tooltipAxisType, tooltipAxisRange, tooltipTicks, orderedTooltipTicks);
+};
Index: node_modules/recharts/es6/state/selectors/tooltipSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/tooltipSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/tooltipSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,179 @@
+import { createSelector } from 'reselect';
+import { combineAppliedValues, combineAreasDomain, combineAxisDomain, combineAxisDomainWithNiceTicks, combineCategoricalDomain, combineDisplayedData, combineDomainOfAllAppliedNumericalValuesIncludingErrorValues, combineDomainOfStackGroups, combineDotsDomain, combineDuplicateDomain, combineGraphicalItemsData, combineGraphicalItemsSettings, combineLinesDomain, combineNiceTicks, combineNumericalDomain, combineRealScaleType, combineScaleFunction, combineStackGroups, filterGraphicalNotStackedItems, filterReferenceElements, getDomainDefinition, itemAxisPredicate, mergeDomains, selectAllErrorBarSettings, selectAxisRange, selectHasBar, selectReferenceAreas, selectReferenceDots, selectReferenceLines, selectTooltipAxis, selectTooltipAxisDataKey } from './axisSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { isCategoricalAxis } from '../../util/ChartUtils';
+import { selectChartDataWithIndexes } from './dataSelectors';
+import { selectChartName, selectReverseStackOrder, selectStackOffsetType } from './rootPropsSelectors';
+import { isNotNil, mathSign } from '../../util/DataUtils';
+import { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';
+import { combineTooltipEventType, selectDefaultTooltipEventType, selectValidateTooltipEventTypes } from './selectTooltipEventType';
+import { combineActiveLabel } from './combiners/combineActiveLabel';
+import { selectTooltipSettings } from './selectTooltipSettings';
+import { combineTooltipInteractionState } from './combiners/combineTooltipInteractionState';
+import { combineActiveTooltipIndex } from './combiners/combineActiveTooltipIndex';
+import { combineCoordinateForDefaultIndex } from './combiners/combineCoordinateForDefaultIndex';
+import { selectChartHeight, selectChartWidth } from './containerSelectors';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { combineTooltipPayloadConfigurations } from './combiners/combineTooltipPayloadConfigurations';
+import { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';
+import { selectTooltipState } from './selectTooltipState';
+import { combineTooltipPayload } from './combiners/combineTooltipPayload';
+import { selectTooltipAxisId } from './selectTooltipAxisId';
+import { selectTooltipAxisType } from './selectTooltipAxisType';
+import { combineDisplayedStackedData } from './combiners/combineDisplayedStackedData';
+import { isStacked } from '../types/StackedGraphicalItem';
+import { numericalDomainSpecifiedWithoutRequiringData } from '../../util/isDomainSpecifiedByUser';
+import { numberDomainEqualityCheck } from './numberDomainEqualityCheck';
+import { emptyArraysAreEqualCheck } from './arrayEqualityCheck';
+import { isWellBehavedNumber } from '../../util/isWellBehavedNumber';
+export var selectTooltipAxisRealScaleType = createSelector([selectTooltipAxis, selectHasBar, selectChartName], combineRealScaleType);
+export var selectAllUnfilteredGraphicalItems = createSelector([state => state.graphicalItems.cartesianItems, state => state.graphicalItems.polarItems], (cartesianItems, polarItems) => [...cartesianItems, ...polarItems]);
+var selectTooltipAxisPredicate = createSelector([selectTooltipAxisType, selectTooltipAxisId], itemAxisPredicate);
+export var selectAllGraphicalItemsSettings = createSelector([selectAllUnfilteredGraphicalItems, selectTooltipAxis, selectTooltipAxisPredicate], combineGraphicalItemsSettings, {
+  memoizeOptions: {
+    resultEqualityCheck: emptyArraysAreEqualCheck
+  }
+});
+var selectAllStackedGraphicalItemsSettings = createSelector([selectAllGraphicalItemsSettings], graphicalItems => graphicalItems.filter(isStacked));
+export var selectTooltipGraphicalItemsData = createSelector([selectAllGraphicalItemsSettings], combineGraphicalItemsData, {
+  memoizeOptions: {
+    resultEqualityCheck: emptyArraysAreEqualCheck
+  }
+});
+
+/**
+ * Data for tooltip always use the data with indexes set by a Brush,
+ * and never accept the isPanorama flag:
+ * because Tooltip never displays inside the panorama anyway
+ * so we don't need to worry what would happen there.
+ */
+export var selectTooltipDisplayedData = createSelector([selectTooltipGraphicalItemsData, selectChartDataWithIndexes], combineDisplayedData);
+var selectTooltipStackedData = createSelector([selectAllStackedGraphicalItemsSettings, selectChartDataWithIndexes, selectTooltipAxis], combineDisplayedStackedData);
+var selectAllTooltipAppliedValues = createSelector([selectTooltipDisplayedData, selectTooltipAxis, selectAllGraphicalItemsSettings], combineAppliedValues);
+var selectTooltipAxisDomainDefinition = createSelector([selectTooltipAxis], getDomainDefinition);
+var selectTooltipDataOverflow = createSelector([selectTooltipAxis], axisSettings => axisSettings.allowDataOverflow);
+var selectTooltipDomainFromUserPreferences = createSelector([selectTooltipAxisDomainDefinition, selectTooltipDataOverflow], numericalDomainSpecifiedWithoutRequiringData);
+var selectAllStackedGraphicalItems = createSelector([selectAllGraphicalItemsSettings], graphicalItems => graphicalItems.filter(isStacked));
+var selectTooltipStackGroups = createSelector([selectTooltipStackedData, selectAllStackedGraphicalItems, selectStackOffsetType, selectReverseStackOrder], combineStackGroups);
+var selectTooltipDomainOfStackGroups = createSelector([selectTooltipStackGroups, selectChartDataWithIndexes, selectTooltipAxisType, selectTooltipDomainFromUserPreferences], combineDomainOfStackGroups);
+var selectTooltipItemsSettingsExceptStacked = createSelector([selectAllGraphicalItemsSettings], filterGraphicalNotStackedItems);
+var selectDomainOfAllAppliedNumericalValuesIncludingErrorValues = createSelector([selectTooltipDisplayedData, selectTooltipAxis, selectTooltipItemsSettingsExceptStacked, selectAllErrorBarSettings, selectTooltipAxisType], combineDomainOfAllAppliedNumericalValuesIncludingErrorValues, {
+  memoizeOptions: {
+    resultEqualityCheck: numberDomainEqualityCheck
+  }
+});
+var selectReferenceDotsByTooltipAxis = createSelector([selectReferenceDots, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);
+var selectTooltipReferenceDotsDomain = createSelector([selectReferenceDotsByTooltipAxis, selectTooltipAxisType], combineDotsDomain);
+var selectReferenceAreasByTooltipAxis = createSelector([selectReferenceAreas, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);
+var selectTooltipReferenceAreasDomain = createSelector([selectReferenceAreasByTooltipAxis, selectTooltipAxisType], combineAreasDomain);
+var selectReferenceLinesByTooltipAxis = createSelector([selectReferenceLines, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);
+var selectTooltipReferenceLinesDomain = createSelector([selectReferenceLinesByTooltipAxis, selectTooltipAxisType], combineLinesDomain);
+var selectTooltipReferenceElementsDomain = createSelector([selectTooltipReferenceDotsDomain, selectTooltipReferenceLinesDomain, selectTooltipReferenceAreasDomain], mergeDomains);
+var selectTooltipNumericalDomain = createSelector([selectTooltipAxis, selectTooltipAxisDomainDefinition, selectTooltipDomainFromUserPreferences, selectTooltipDomainOfStackGroups, selectDomainOfAllAppliedNumericalValuesIncludingErrorValues, selectTooltipReferenceElementsDomain, selectChartLayout, selectTooltipAxisType], combineNumericalDomain);
+export var selectTooltipAxisDomain = createSelector([selectTooltipAxis, selectChartLayout, selectTooltipDisplayedData, selectAllTooltipAppliedValues, selectStackOffsetType, selectTooltipAxisType, selectTooltipNumericalDomain], combineAxisDomain);
+var selectTooltipNiceTicks = createSelector([selectTooltipAxisDomain, selectTooltipAxis, selectTooltipAxisRealScaleType], combineNiceTicks);
+export var selectTooltipAxisDomainIncludingNiceTicks = createSelector([selectTooltipAxis, selectTooltipAxisDomain, selectTooltipNiceTicks, selectTooltipAxisType], combineAxisDomainWithNiceTicks);
+var selectTooltipAxisRange = state => {
+  var axisType = selectTooltipAxisType(state);
+  var axisId = selectTooltipAxisId(state);
+  var isPanorama = false; // Tooltip never displays in panorama so this is safe to assume
+  return selectAxisRange(state, axisType, axisId, isPanorama);
+};
+export var selectTooltipAxisRangeWithReverse = createSelector([selectTooltipAxis, selectTooltipAxisRange], combineAxisRangeWithReverse);
+export var selectTooltipAxisScale = createSelector([selectTooltipAxis, selectTooltipAxisRealScaleType, selectTooltipAxisDomainIncludingNiceTicks, selectTooltipAxisRangeWithReverse], combineScaleFunction);
+var selectTooltipDuplicateDomain = createSelector([selectChartLayout, selectAllTooltipAppliedValues, selectTooltipAxis, selectTooltipAxisType], combineDuplicateDomain);
+export var selectTooltipCategoricalDomain = createSelector([selectChartLayout, selectAllTooltipAppliedValues, selectTooltipAxis, selectTooltipAxisType], combineCategoricalDomain);
+var combineTicksOfTooltipAxis = (layout, axis, realScaleType, scale, range, duplicateDomain, categoricalDomain, axisType) => {
+  if (!axis) {
+    return undefined;
+  }
+  var {
+    type
+  } = axis;
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  if (!scale) {
+    return undefined;
+  }
+  var offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;
+  var offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;
+  offset = axisType === 'angleAxis' && range != null && (range === null || range === void 0 ? void 0 : range.length) >= 2 ? mathSign(range[0] - range[1]) * 2 * offset : offset;
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => {
+      var scaled = scale.map(entry);
+      if (!isWellBehavedNumber(scaled)) {
+        return null;
+      }
+      return {
+        coordinate: scaled + offset,
+        value: entry,
+        index,
+        offset
+      };
+    }).filter(isNotNil);
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => {
+    var scaled = scale.map(entry);
+    if (!isWellBehavedNumber(scaled)) {
+      return null;
+    }
+    return {
+      coordinate: scaled + offset,
+      // @ts-expect-error can't use Date as an index
+      value: duplicateDomain ? duplicateDomain[entry] : entry,
+      index,
+      offset
+    };
+  }).filter(isNotNil);
+};
+
+/**
+ * Of on four almost identical implementations of tick generation.
+ * The four horsemen of tick generation are:
+ * - {@link selectTooltipAxisTicks}
+ * - {@link combineAxisTicks}
+ * - {@link getTicksOfAxis}.
+ * - {@link combineGraphicalItemTicks}
+ */
+export var selectTooltipAxisTicks = createSelector([selectChartLayout, selectTooltipAxis, selectTooltipAxisRealScaleType, selectTooltipAxisScale, selectTooltipAxisRange, selectTooltipDuplicateDomain, selectTooltipCategoricalDomain, selectTooltipAxisType], combineTicksOfTooltipAxis);
+var selectTooltipEventType = createSelector([selectDefaultTooltipEventType, selectValidateTooltipEventTypes, selectTooltipSettings], (defaultTooltipEventType, validateTooltipEventType, settings) => combineTooltipEventType(settings.shared, defaultTooltipEventType, validateTooltipEventType));
+var selectTooltipTrigger = state => state.tooltip.settings.trigger;
+var selectDefaultIndex = state => state.tooltip.settings.defaultIndex;
+var selectTooltipInteractionState = createSelector([selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex], combineTooltipInteractionState);
+export var selectActiveTooltipIndex = createSelector([selectTooltipInteractionState, selectTooltipDisplayedData, selectTooltipAxisDataKey, selectTooltipAxisDomain], combineActiveTooltipIndex);
+export var selectActiveLabel = createSelector([selectTooltipAxisTicks, selectActiveTooltipIndex], combineActiveLabel);
+export var selectActiveTooltipDataKey = createSelector([selectTooltipInteractionState], tooltipInteraction => {
+  if (!tooltipInteraction) {
+    return undefined;
+  }
+  return tooltipInteraction.dataKey;
+});
+export var selectActiveTooltipGraphicalItemId = createSelector([selectTooltipInteractionState], tooltipInteraction => {
+  if (!tooltipInteraction) {
+    return undefined;
+  }
+  return tooltipInteraction.graphicalItemId;
+});
+var selectTooltipPayloadConfigurations = createSelector([selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex], combineTooltipPayloadConfigurations);
+var selectTooltipCoordinateForDefaultIndex = createSelector([selectChartWidth, selectChartHeight, selectChartLayout, selectChartOffsetInternal, selectTooltipAxisTicks, selectDefaultIndex, selectTooltipPayloadConfigurations], combineCoordinateForDefaultIndex);
+export var selectActiveTooltipCoordinate = createSelector([selectTooltipInteractionState, selectTooltipCoordinateForDefaultIndex], (tooltipInteractionState, defaultIndexCoordinate) => {
+  if (tooltipInteractionState !== null && tooltipInteractionState !== void 0 && tooltipInteractionState.coordinate) {
+    return tooltipInteractionState.coordinate;
+  }
+  return defaultIndexCoordinate;
+});
+export var selectIsTooltipActive = createSelector([selectTooltipInteractionState], tooltipInteractionState => {
+  var _tooltipInteractionSt;
+  return (_tooltipInteractionSt = tooltipInteractionState === null || tooltipInteractionState === void 0 ? void 0 : tooltipInteractionState.active) !== null && _tooltipInteractionSt !== void 0 ? _tooltipInteractionSt : false;
+});
+export var selectActiveTooltipPayload = createSelector([selectTooltipPayloadConfigurations, selectActiveTooltipIndex, selectChartDataWithIndexes, selectTooltipAxisDataKey, selectActiveLabel, selectTooltipPayloadSearcher, selectTooltipEventType], combineTooltipPayload);
+export var selectActiveTooltipDataPoints = createSelector([selectActiveTooltipPayload], payload => {
+  if (payload == null) {
+    return undefined;
+  }
+  var dataPoints = payload.map(p => p.payload).filter(p => p != null);
+  return Array.from(new Set(dataPoints));
+});
Index: node_modules/recharts/es6/state/selectors/touchSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/touchSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/selectors/touchSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+import { createSelector } from 'reselect';
+import { selectTooltipState } from './selectTooltipState';
+var selectAllTooltipPayloadConfiguration = createSelector([selectTooltipState], tooltipState => tooltipState.tooltipItemPayloads);
+export var selectTooltipCoordinate = createSelector([selectAllTooltipPayloadConfiguration, (_state, tooltipIndex) => tooltipIndex, (_state, _tooltipIndex, graphicalItemId) => graphicalItemId], (allTooltipConfigurations, tooltipIndex, graphicalItemId) => {
+  if (tooltipIndex == null) {
+    return undefined;
+  }
+  var mostRelevantTooltipConfiguration = allTooltipConfigurations.find(tooltipConfiguration => {
+    return tooltipConfiguration.settings.graphicalItemId === graphicalItemId;
+  });
+  if (mostRelevantTooltipConfiguration == null) {
+    return undefined;
+  }
+  var {
+    getPosition
+  } = mostRelevantTooltipConfiguration;
+  if (getPosition == null) {
+    return undefined;
+  }
+  return getPosition(tooltipIndex);
+});
Index: node_modules/recharts/es6/state/store.js
===================================================================
--- node_modules/recharts/es6/state/store.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/store.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,83 @@
+import { autoBatchEnhancer, combineReducers, configureStore } from '@reduxjs/toolkit';
+import { optionsReducer } from './optionsSlice';
+import { tooltipReducer } from './tooltipSlice';
+import { chartDataReducer } from './chartDataSlice';
+import { chartLayoutReducer } from './layoutSlice';
+import { mouseClickMiddleware, mouseMoveMiddleware } from './mouseEventsMiddleware';
+import { reduxDevtoolsJsonStringifyReplacer } from './reduxDevtoolsJsonStringifyReplacer';
+import { cartesianAxisReducer } from './cartesianAxisSlice';
+import { graphicalItemsReducer } from './graphicalItemsSlice';
+import { referenceElementsReducer } from './referenceElementsSlice';
+import { brushReducer } from './brushSlice';
+import { legendReducer } from './legendSlice';
+import { rootPropsReducer } from './rootPropsSlice';
+import { polarAxisReducer } from './polarAxisSlice';
+import { polarOptionsReducer } from './polarOptionsSlice';
+import { keyboardEventsMiddleware } from './keyboardEventsMiddleware';
+import { externalEventsMiddleware } from './externalEventsMiddleware';
+import { touchEventMiddleware } from './touchEventsMiddleware';
+import { errorBarReducer } from './errorBarSlice';
+import { Global } from '../util/Global';
+import { zIndexReducer } from './zIndexSlice';
+var rootReducer = combineReducers({
+  brush: brushReducer,
+  cartesianAxis: cartesianAxisReducer,
+  chartData: chartDataReducer,
+  errorBars: errorBarReducer,
+  graphicalItems: graphicalItemsReducer,
+  layout: chartLayoutReducer,
+  legend: legendReducer,
+  options: optionsReducer,
+  polarAxis: polarAxisReducer,
+  polarOptions: polarOptionsReducer,
+  referenceElements: referenceElementsReducer,
+  rootProps: rootPropsReducer,
+  tooltip: tooltipReducer,
+  zIndex: zIndexReducer
+});
+export var createRechartsStore = function createRechartsStore(preloadedState) {
+  var chartName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Chart';
+  return configureStore({
+    reducer: rootReducer,
+    // redux-toolkit v1 types are unhappy with the preloadedState type. Remove the `as any` when bumping to v2
+    preloadedState: preloadedState,
+    // @ts-expect-error redux-toolkit v1 types are unhappy with the middleware array. Remove this comment when bumping to v2
+    middleware: getDefaultMiddleware => {
+      var _process$env$NODE_ENV;
+      return getDefaultMiddleware({
+        serializableCheck: false,
+        immutableCheck: !['commonjs', 'es6', 'production'].includes((_process$env$NODE_ENV = "es6") !== null && _process$env$NODE_ENV !== void 0 ? _process$env$NODE_ENV : '')
+      }).concat([mouseClickMiddleware.middleware, mouseMoveMiddleware.middleware, keyboardEventsMiddleware.middleware, externalEventsMiddleware.middleware, touchEventMiddleware.middleware]);
+    },
+    /*
+     * I can't find out how to satisfy typescript here.
+     * We return `EnhancerArray<[StoreEnhancer<{}, {}>, StoreEnhancer]>` from this function,
+     * but the types say we should return `EnhancerArray<StoreEnhancer<{}, {}>`.
+     * Looks like it's badly inferred generics, but it won't allow me to provide the correct type manually either.
+     * So let's just ignore the error for now.
+     */
+    // @ts-expect-error mismatched generics
+    enhancers: getDefaultEnhancers => {
+      var enhancers = getDefaultEnhancers;
+      if (typeof getDefaultEnhancers === 'function') {
+        /*
+         * In RTK v2 this is always a function, but in v1 it is an array.
+         * Because we have @types/redux-toolkit v1 as a dependency, typescript is going to flag this as an error.
+         * We support both RTK v1 and v2, so we need to do this check.
+         * https://redux-toolkit.js.org/usage/migrating-rtk-2#configurestoreenhancers-must-be-a-callback
+         */
+        // @ts-expect-error RTK v2 behaviour on RTK v1 types
+        enhancers = getDefaultEnhancers();
+      }
+      return enhancers.concat(autoBatchEnhancer({
+        type: 'raf'
+      }));
+    },
+    devTools: Global.devToolsEnabled && {
+      serialize: {
+        replacer: reduxDevtoolsJsonStringifyReplacer
+      },
+      name: "recharts-".concat(chartName)
+    }
+  });
+};
Index: node_modules/recharts/es6/state/tooltipSlice.js
===================================================================
--- node_modules/recharts/es6/state/tooltipSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/tooltipSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,219 @@
+import { createSlice, current, prepareAutoBatched } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+
+/**
+ * One Tooltip can display multiple TooltipPayloadEntries at a time.
+ */
+
+/**
+ * So what happens is that the tooltip payload is decided based on the available data, and the dataKey.
+ * The dataKey can either be defined on the graphical element (like Line, or Bar)
+ * or on the tooltip itself.
+ *
+ * The data can be defined in the chart element, or in the graphical item.
+ *
+ * So this type is all the settings, other than the data + dataKey complications.
+ */
+
+/**
+ * This is what Tooltip renders.
+ */
+
+/**
+ * null means no active index
+ * string means: whichever index from the chart data it is.
+ * Different charts have different requirements on data shapes,
+ * and are also responsible for providing a function that will accept this index
+ * and return data.
+ */
+
+/**
+ * Different items have different data shapes so the state has no opinion on what the data shape should be;
+ * the only requirement is that the chart also provides a searcher function
+ * that accepts the data, and a key, and returns whatever the payload in Tooltip should be.
+ */
+
+/**
+ * So this informs the "tooltip event type". Tooltip event type can be either "axis" or "item"
+ * and it is used for two things:
+ * 1. Sets the active area
+ * 2. Sets the background and cursor highlights
+ *
+ * Some charts only allow to have one type of tooltip event type, some allow both.
+ * Those charts that allow both will have one default, and the "shared" prop will be used to switch between them.
+ * Undefined means "use the chart default".
+ *
+ * Charts that only allow one tooltip event type, will ignore the shared prop.
+ */
+
+/**
+ * A generic state for user interaction with the chart.
+ * User interaction can come through multiple channels: mouse events, keyboard events, or hardcoded in props, or synchronised from other charts.
+ *
+ * Each of the interaction states is represented as TooltipInteractionState,
+ * and then the selectors and Tooltip will decide which of the interaction states to use.
+ */
+
+export var noInteraction = {
+  active: false,
+  index: null,
+  dataKey: undefined,
+  graphicalItemId: undefined,
+  coordinate: undefined
+};
+
+/**
+ * The tooltip interaction state stores:
+ *
+ * - Which graphical item is user interacting with at the moment,
+ * - which axis (or, which part of chart background) is user interacting with at the moment
+ * - The data that individual graphical items wish to be displayed in case the tooltip gets activated
+ */
+
+export var initialState = {
+  itemInteraction: {
+    click: noInteraction,
+    hover: noInteraction
+  },
+  axisInteraction: {
+    click: noInteraction,
+    hover: noInteraction
+  },
+  keyboardInteraction: noInteraction,
+  syncInteraction: {
+    active: false,
+    index: null,
+    dataKey: undefined,
+    label: undefined,
+    coordinate: undefined,
+    sourceViewBox: undefined,
+    graphicalItemId: undefined
+  },
+  tooltipItemPayloads: [],
+  settings: {
+    shared: undefined,
+    trigger: 'hover',
+    axisId: 0,
+    active: false,
+    defaultIndex: undefined
+  }
+};
+
+/**
+ * This is the event we get when user is interacting with a specific graphical item.
+ */
+
+/**
+ * Keyboard interaction payload has no graphical item ID,
+ * and no dataKey, because keyboard interaction is always
+ * with the whole chart, not with a specific graphical item.
+ */
+
+var tooltipSlice = createSlice({
+  name: 'tooltip',
+  initialState,
+  reducers: {
+    addTooltipEntrySettings: {
+      reducer(state, action) {
+        state.tooltipItemPayloads.push(castDraft(action.payload));
+      },
+      prepare: prepareAutoBatched()
+    },
+    replaceTooltipEntrySettings: {
+      reducer(state, action) {
+        var {
+          prev,
+          next
+        } = action.payload;
+        var index = current(state).tooltipItemPayloads.indexOf(castDraft(prev));
+        if (index > -1) {
+          state.tooltipItemPayloads[index] = castDraft(next);
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    removeTooltipEntrySettings: {
+      reducer(state, action) {
+        var index = current(state).tooltipItemPayloads.indexOf(castDraft(action.payload));
+        if (index > -1) {
+          state.tooltipItemPayloads.splice(index, 1);
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    setTooltipSettingsState(state, action) {
+      state.settings = action.payload;
+    },
+    setActiveMouseOverItemIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.keyboardInteraction.active = false;
+      state.itemInteraction.hover.active = true;
+      state.itemInteraction.hover.index = action.payload.activeIndex;
+      state.itemInteraction.hover.dataKey = action.payload.activeDataKey;
+      state.itemInteraction.hover.graphicalItemId = action.payload.activeGraphicalItemId;
+      state.itemInteraction.hover.coordinate = action.payload.activeCoordinate;
+    },
+    mouseLeaveChart(state) {
+      /*
+       * Clear only the active flags. Why?
+       * 1. Keep Coordinate to preserve animation - next time the Tooltip appears, we want to render it from
+       * the last place where it was when it disappeared.
+       * 2. We want to keep all the properties anyway just in case the tooltip has `active=true` prop
+       * and continues being visible even after the mouse has left the chart.
+       */
+      state.itemInteraction.hover.active = false;
+      state.axisInteraction.hover.active = false;
+    },
+    mouseLeaveItem(state) {
+      state.itemInteraction.hover.active = false;
+    },
+    setActiveClickItemIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.itemInteraction.click.active = true;
+      state.keyboardInteraction.active = false;
+      state.itemInteraction.click.index = action.payload.activeIndex;
+      state.itemInteraction.click.dataKey = action.payload.activeDataKey;
+      state.itemInteraction.click.graphicalItemId = action.payload.activeGraphicalItemId;
+      state.itemInteraction.click.coordinate = action.payload.activeCoordinate;
+    },
+    setMouseOverAxisIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.axisInteraction.hover.active = true;
+      state.keyboardInteraction.active = false;
+      state.axisInteraction.hover.index = action.payload.activeIndex;
+      state.axisInteraction.hover.dataKey = action.payload.activeDataKey;
+      state.axisInteraction.hover.coordinate = action.payload.activeCoordinate;
+    },
+    setMouseClickAxisIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.keyboardInteraction.active = false;
+      state.axisInteraction.click.active = true;
+      state.axisInteraction.click.index = action.payload.activeIndex;
+      state.axisInteraction.click.dataKey = action.payload.activeDataKey;
+      state.axisInteraction.click.coordinate = action.payload.activeCoordinate;
+    },
+    setSyncInteraction(state, action) {
+      state.syncInteraction = action.payload;
+    },
+    setKeyboardInteraction(state, action) {
+      state.keyboardInteraction.active = action.payload.active;
+      state.keyboardInteraction.index = action.payload.activeIndex;
+      state.keyboardInteraction.coordinate = action.payload.activeCoordinate;
+    }
+  }
+});
+export var {
+  addTooltipEntrySettings,
+  replaceTooltipEntrySettings,
+  removeTooltipEntrySettings,
+  setTooltipSettingsState,
+  setActiveMouseOverItemIndex,
+  mouseLeaveItem,
+  mouseLeaveChart,
+  setActiveClickItemIndex,
+  setMouseOverAxisIndex,
+  setMouseClickAxisIndex,
+  setSyncInteraction,
+  setKeyboardInteraction
+} = tooltipSlice.actions;
+export var tooltipReducer = tooltipSlice.reducer;
Index: node_modules/recharts/es6/state/touchEventsMiddleware.js
===================================================================
--- node_modules/recharts/es6/state/touchEventsMiddleware.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/touchEventsMiddleware.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,65 @@
+import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
+import { setActiveMouseOverItemIndex, setMouseOverAxisIndex } from './tooltipSlice';
+import { selectActivePropsFromChartPointer } from './selectors/selectActivePropsFromChartPointer';
+import { getChartPointer } from '../util/getChartPointer';
+import { selectTooltipEventType } from './selectors/selectTooltipEventType';
+import { DATA_ITEM_GRAPHICAL_ITEM_ID_ATTRIBUTE_NAME, DATA_ITEM_INDEX_ATTRIBUTE_NAME } from '../util/Constants';
+import { selectTooltipCoordinate } from './selectors/touchSelectors';
+import { selectAllGraphicalItemsSettings } from './selectors/tooltipSelectors';
+export var touchEventAction = createAction('touchMove');
+export var touchEventMiddleware = createListenerMiddleware();
+touchEventMiddleware.startListening({
+  actionCreator: touchEventAction,
+  effect: (action, listenerApi) => {
+    var touchEvent = action.payload;
+    if (touchEvent.touches == null || touchEvent.touches.length === 0) {
+      return;
+    }
+    var state = listenerApi.getState();
+    var tooltipEventType = selectTooltipEventType(state, state.tooltip.settings.shared);
+    if (tooltipEventType === 'axis') {
+      var touch = touchEvent.touches[0];
+      if (touch == null) {
+        return;
+      }
+      var activeProps = selectActivePropsFromChartPointer(state, getChartPointer({
+        clientX: touch.clientX,
+        clientY: touch.clientY,
+        currentTarget: touchEvent.currentTarget
+      }));
+      if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {
+        listenerApi.dispatch(setMouseOverAxisIndex({
+          activeIndex: activeProps.activeIndex,
+          activeDataKey: undefined,
+          activeCoordinate: activeProps.activeCoordinate
+        }));
+      }
+    } else if (tooltipEventType === 'item') {
+      var _target$getAttribute;
+      var _touch = touchEvent.touches[0];
+      if (document.elementFromPoint == null || _touch == null) {
+        return;
+      }
+      var target = document.elementFromPoint(_touch.clientX, _touch.clientY);
+      if (!target || !target.getAttribute) {
+        return;
+      }
+      var itemIndex = target.getAttribute(DATA_ITEM_INDEX_ATTRIBUTE_NAME);
+      var graphicalItemId = (_target$getAttribute = target.getAttribute(DATA_ITEM_GRAPHICAL_ITEM_ID_ATTRIBUTE_NAME)) !== null && _target$getAttribute !== void 0 ? _target$getAttribute : undefined;
+      var settings = selectAllGraphicalItemsSettings(state).find(item => item.id === graphicalItemId);
+      if (itemIndex == null || settings == null || graphicalItemId == null) {
+        return;
+      }
+      var {
+        dataKey
+      } = settings;
+      var coordinate = selectTooltipCoordinate(state, itemIndex, graphicalItemId);
+      listenerApi.dispatch(setActiveMouseOverItemIndex({
+        activeDataKey: dataKey,
+        activeIndex: itemIndex,
+        activeCoordinate: coordinate,
+        activeGraphicalItemId: graphicalItemId
+      }));
+    }
+  }
+});
Index: node_modules/recharts/es6/state/types/AreaSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/AreaSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/types/AreaSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/BarSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/BarSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/types/BarSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/LineSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/LineSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/types/LineSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/PieSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/PieSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/types/PieSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/RadarSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/RadarSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/types/RadarSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/RadialBarSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/RadialBarSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/types/RadialBarSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/ScatterSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/ScatterSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/types/ScatterSettings.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/StackedGraphicalItem.js
===================================================================
--- node_modules/recharts/es6/state/types/StackedGraphicalItem.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/types/StackedGraphicalItem.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,14 @@
+/**
+ * Some graphical items allow data stacking. The stacks are optional,
+ * so all props here are optional too.
+ */
+
+/**
+ * Some graphical items allow data stacking.
+ * This interface is used to represent the items that are stacked
+ * because the user has provided the stackId and dataKey properties.
+ */
+
+export function isStacked(graphicalItem) {
+  return 'stackId' in graphicalItem && graphicalItem.stackId != null && graphicalItem.dataKey != null;
+}
Index: node_modules/recharts/es6/state/zIndexSlice.js
===================================================================
--- node_modules/recharts/es6/state/zIndexSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/state/zIndexSlice.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,115 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * This slice contains a registry of z-index values for various components.
+ * The state is a map from z-index numbers to element references.
+ */
+import { createSlice, prepareAutoBatched } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+import { DefaultZIndexes } from '../zIndex/DefaultZIndexes';
+var seed = {};
+var initialState = {
+  zIndexMap: Object.values(DefaultZIndexes).reduce((acc, current) => _objectSpread(_objectSpread({}, acc), {}, {
+    [current]: {
+      element: undefined,
+      panoramaElement: undefined,
+      consumers: 0
+    }
+  }), seed)
+};
+var defaultZIndexSet = new Set(Object.values(DefaultZIndexes));
+function isDefaultZIndex(zIndex) {
+  return defaultZIndexSet.has(zIndex);
+}
+var zIndexSlice = createSlice({
+  name: 'zIndex',
+  initialState,
+  reducers: {
+    registerZIndexPortal: {
+      reducer: (state, action) => {
+        var {
+          zIndex
+        } = action.payload;
+        if (state.zIndexMap[zIndex]) {
+          state.zIndexMap[zIndex].consumers += 1;
+        } else {
+          state.zIndexMap[zIndex] = {
+            consumers: 1,
+            element: undefined,
+            panoramaElement: undefined
+          };
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    unregisterZIndexPortal: {
+      reducer: (state, action) => {
+        var {
+          zIndex
+        } = action.payload;
+        if (state.zIndexMap[zIndex]) {
+          state.zIndexMap[zIndex].consumers -= 1;
+          /*
+           * Garbage collect unused z-index entries, except for default z-indexes.
+           * Default z-indexes are always rendered, regardless of whether there are consumers or not.
+           * And because of that, even if we delete this entry, the ZIndexPortal provider will still be rendered
+           * and React is not going to re-create it, and it won't re-register the element ID.
+           * So let's not delete default z-index entries.
+           */
+          if (state.zIndexMap[zIndex].consumers <= 0 && !isDefaultZIndex(zIndex)) {
+            delete state.zIndexMap[zIndex];
+          }
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    registerZIndexPortalElement: {
+      reducer: (state, action) => {
+        var {
+          zIndex,
+          element,
+          isPanorama
+        } = action.payload;
+        if (state.zIndexMap[zIndex]) {
+          if (isPanorama) {
+            state.zIndexMap[zIndex].panoramaElement = castDraft(element);
+          } else {
+            state.zIndexMap[zIndex].element = castDraft(element);
+          }
+        } else {
+          state.zIndexMap[zIndex] = {
+            consumers: 0,
+            element: isPanorama ? undefined : castDraft(element),
+            panoramaElement: isPanorama ? castDraft(element) : undefined
+          };
+        }
+      },
+      prepare: prepareAutoBatched()
+    },
+    unregisterZIndexPortalElement: {
+      reducer: (state, action) => {
+        var {
+          zIndex
+        } = action.payload;
+        if (state.zIndexMap[zIndex]) {
+          if (action.payload.isPanorama) {
+            state.zIndexMap[zIndex].panoramaElement = undefined;
+          } else {
+            state.zIndexMap[zIndex].element = undefined;
+          }
+        }
+      },
+      prepare: prepareAutoBatched()
+    }
+  }
+});
+export var {
+  registerZIndexPortal,
+  unregisterZIndexPortal,
+  registerZIndexPortalElement,
+  unregisterZIndexPortalElement
+} = zIndexSlice.actions;
+export var zIndexReducer = zIndexSlice.reducer;
Index: node_modules/recharts/es6/synchronisation/syncSelectors.js
===================================================================
--- node_modules/recharts/es6/synchronisation/syncSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/synchronisation/syncSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,3 @@
+export function selectSynchronisedTooltipState(state) {
+  return state.tooltip.syncInteraction;
+}
Index: node_modules/recharts/es6/synchronisation/types.js
===================================================================
--- node_modules/recharts/es6/synchronisation/types.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/synchronisation/types.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/synchronisation/useChartSynchronisation.js
===================================================================
--- node_modules/recharts/es6/synchronisation/useChartSynchronisation.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/synchronisation/useChartSynchronisation.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,253 @@
+var _excluded = ["x", "y"];
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import { useEffect } from 'react';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectEventEmitter, selectSyncId, selectSyncMethod } from '../state/selectors/rootPropsSelectors';
+import { BRUSH_SYNC_EVENT, eventCenter, TOOLTIP_SYNC_EVENT } from '../util/Events';
+import { createEventEmitter } from '../state/optionsSlice';
+import { setSyncInteraction } from '../state/tooltipSlice';
+import { selectTooltipDataKey } from '../state/selectors/selectors';
+import { selectTooltipAxisTicks } from '../state/selectors/tooltipSelectors';
+import { selectSynchronisedTooltipState } from './syncSelectors';
+import { useChartLayout, useViewBox } from '../context/chartLayoutContext';
+import { setDataStartEndIndexes } from '../state/chartDataSlice';
+import { noop } from '../util/DataUtils';
+function useTooltipSyncEventsListener() {
+  var mySyncId = useAppSelector(selectSyncId);
+  var myEventEmitter = useAppSelector(selectEventEmitter);
+  var dispatch = useAppDispatch();
+  var syncMethod = useAppSelector(selectSyncMethod);
+  var tooltipTicks = useAppSelector(selectTooltipAxisTicks);
+  var layout = useChartLayout();
+  var viewBox = useViewBox();
+  var className = useAppSelector(state => state.rootProps.className);
+  useEffect(() => {
+    if (mySyncId == null) {
+      // This chart is not synchronised with any other chart so we don't need to listen for any events.
+      return noop;
+    }
+    var listener = (incomingSyncId, action, emitter) => {
+      if (myEventEmitter === emitter) {
+        // We don't want to dispatch actions that we sent ourselves.
+        return;
+      }
+      if (mySyncId !== incomingSyncId) {
+        // This event is not for this chart
+        return;
+      }
+      if (syncMethod === 'index') {
+        var _action$payload;
+        if (viewBox && action !== null && action !== void 0 && (_action$payload = action.payload) !== null && _action$payload !== void 0 && _action$payload.coordinate && action.payload.sourceViewBox) {
+          var _action$payload$coord = action.payload.coordinate,
+            {
+              x: _x,
+              y: _y
+            } = _action$payload$coord,
+            otherCoordinateProps = _objectWithoutProperties(_action$payload$coord, _excluded);
+          var {
+            x: sourceX,
+            y: sourceY,
+            width: sourceWidth,
+            height: sourceHeight
+          } = action.payload.sourceViewBox;
+          var scaledCoordinate = _objectSpread(_objectSpread({}, otherCoordinateProps), {}, {
+            x: viewBox.x + (sourceWidth ? (_x - sourceX) / sourceWidth : 0) * viewBox.width,
+            y: viewBox.y + (sourceHeight ? (_y - sourceY) / sourceHeight : 0) * viewBox.height
+          });
+          dispatch(_objectSpread(_objectSpread({}, action), {}, {
+            payload: _objectSpread(_objectSpread({}, action.payload), {}, {
+              coordinate: scaledCoordinate
+            })
+          }));
+        } else {
+          dispatch(action);
+        }
+        return;
+      }
+      if (tooltipTicks == null) {
+        // for the other two sync methods, we need the ticks to be available
+        return;
+      }
+      var activeTick;
+      if (typeof syncMethod === 'function') {
+        /*
+         * This is what the data shape in 2.x CategoricalChartState used to look like.
+         * In 3.x we store things differently but let's try to keep the old shape for compatibility.
+         */
+        var syncMethodParam = {
+          activeTooltipIndex: action.payload.index == null ? undefined : Number(action.payload.index),
+          isTooltipActive: action.payload.active,
+          activeIndex: action.payload.index == null ? undefined : Number(action.payload.index),
+          activeLabel: action.payload.label,
+          activeDataKey: action.payload.dataKey,
+          activeCoordinate: action.payload.coordinate
+        };
+        // Call a callback function. If there is an application specific algorithm
+        var activeTooltipIndex = syncMethod(tooltipTicks, syncMethodParam);
+        activeTick = tooltipTicks[activeTooltipIndex];
+      } else if (syncMethod === 'value') {
+        // labels are always strings, tick.value might be a string or a number, depending on axis type
+        activeTick = tooltipTicks.find(tick => String(tick.value) === action.payload.label);
+      }
+      var {
+        coordinate
+      } = action.payload;
+      if (activeTick == null || action.payload.active === false || coordinate == null || viewBox == null) {
+        dispatch(setSyncInteraction({
+          active: false,
+          coordinate: undefined,
+          dataKey: undefined,
+          index: null,
+          label: undefined,
+          sourceViewBox: undefined,
+          graphicalItemId: undefined
+        }));
+        return;
+      }
+      var {
+        x,
+        y
+      } = coordinate;
+      var validateChartX = Math.min(x, viewBox.x + viewBox.width);
+      var validateChartY = Math.min(y, viewBox.y + viewBox.height);
+      var activeCoordinate = {
+        x: layout === 'horizontal' ? activeTick.coordinate : validateChartX,
+        y: layout === 'horizontal' ? validateChartY : activeTick.coordinate
+      };
+      var syncAction = setSyncInteraction({
+        active: action.payload.active,
+        coordinate: activeCoordinate,
+        dataKey: action.payload.dataKey,
+        index: String(activeTick.index),
+        label: action.payload.label,
+        sourceViewBox: action.payload.sourceViewBox,
+        graphicalItemId: action.payload.graphicalItemId
+      });
+      dispatch(syncAction);
+    };
+    eventCenter.on(TOOLTIP_SYNC_EVENT, listener);
+    return () => {
+      eventCenter.off(TOOLTIP_SYNC_EVENT, listener);
+    };
+  }, [className, dispatch, myEventEmitter, mySyncId, syncMethod, tooltipTicks, layout, viewBox]);
+}
+function useBrushSyncEventsListener() {
+  var mySyncId = useAppSelector(selectSyncId);
+  var myEventEmitter = useAppSelector(selectEventEmitter);
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    if (mySyncId == null) {
+      // This chart is not synchronised with any other chart so we don't need to listen for any events.
+      return noop;
+    }
+    var listener = (incomingSyncId, action, emitter) => {
+      if (myEventEmitter === emitter) {
+        // We don't want to dispatch actions that we sent ourselves.
+        return;
+      }
+      if (mySyncId === incomingSyncId) {
+        dispatch(setDataStartEndIndexes(action));
+      }
+    };
+    eventCenter.on(BRUSH_SYNC_EVENT, listener);
+    return () => {
+      eventCenter.off(BRUSH_SYNC_EVENT, listener);
+    };
+  }, [dispatch, myEventEmitter, mySyncId]);
+}
+
+/**
+ * Will receive synchronisation events from other charts.
+ *
+ * Reads syncMethod from state and decides how to synchronise the tooltip based on that.
+ *
+ * @returns void
+ */
+export function useSynchronisedEventsFromOtherCharts() {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(createEventEmitter());
+  }, [dispatch]);
+  useTooltipSyncEventsListener();
+  useBrushSyncEventsListener();
+}
+
+/**
+ * Will send events to other charts.
+ * If syncId is undefined, no events will be sent.
+ *
+ * This ignores the syncMethod, because that is set and computed on the receiving end.
+ *
+ * @param tooltipEventType from Tooltip
+ * @param trigger from Tooltip
+ * @param activeCoordinate from state
+ * @param activeLabel from state
+ * @param activeIndex from state
+ * @param isTooltipActive from state
+ * @returns void
+ */
+export function useTooltipChartSynchronisation(tooltipEventType, trigger, activeCoordinate, activeLabel, activeIndex, isTooltipActive) {
+  var activeDataKey = useAppSelector(state => selectTooltipDataKey(state, tooltipEventType, trigger));
+  var eventEmitterSymbol = useAppSelector(selectEventEmitter);
+  var syncId = useAppSelector(selectSyncId);
+  var syncMethod = useAppSelector(selectSyncMethod);
+  var tooltipState = useAppSelector(selectSynchronisedTooltipState);
+  var isReceivingSynchronisation = tooltipState === null || tooltipState === void 0 ? void 0 : tooltipState.active;
+  var viewBox = useViewBox();
+  useEffect(() => {
+    if (isReceivingSynchronisation) {
+      /*
+       * This chart currently has active tooltip, synchronised from another chart.
+       * Let's not send any outgoing synchronisation events while that's happening
+       * to avoid infinite loops.
+       */
+      return;
+    }
+    if (syncId == null) {
+      /*
+       * syncId is not set, means that this chart is not synchronised with any other chart,
+       * means we don't need to send synchronisation events
+       */
+      return;
+    }
+    if (eventEmitterSymbol == null) {
+      /*
+       * When using Recharts internal hooks and selectors outside charts context,
+       * these properties will be undefined. Let's return silently instead of throwing an error.
+       */
+      return;
+    }
+    var syncAction = setSyncInteraction({
+      active: isTooltipActive,
+      coordinate: activeCoordinate,
+      dataKey: activeDataKey,
+      index: activeIndex,
+      label: typeof activeLabel === 'number' ? String(activeLabel) : activeLabel,
+      sourceViewBox: viewBox,
+      graphicalItemId: undefined
+    });
+    eventCenter.emit(TOOLTIP_SYNC_EVENT, syncId, syncAction, eventEmitterSymbol);
+  }, [isReceivingSynchronisation, activeCoordinate, activeDataKey, activeIndex, activeLabel, eventEmitterSymbol, syncId, syncMethod, isTooltipActive, viewBox]);
+}
+export function useBrushChartSynchronisation() {
+  var syncId = useAppSelector(selectSyncId);
+  var eventEmitterSymbol = useAppSelector(selectEventEmitter);
+  var brushStartIndex = useAppSelector(state => state.chartData.dataStartIndex);
+  var brushEndIndex = useAppSelector(state => state.chartData.dataEndIndex);
+  useEffect(() => {
+    if (syncId == null || brushStartIndex == null || brushEndIndex == null || eventEmitterSymbol == null) {
+      return;
+    }
+    var syncAction = {
+      startIndex: brushStartIndex,
+      endIndex: brushEndIndex
+    };
+    eventCenter.emit(BRUSH_SYNC_EVENT, syncId, syncAction, eventEmitterSymbol);
+  }, [brushEndIndex, brushStartIndex, eventEmitterSymbol, syncId]);
+}
Index: node_modules/recharts/es6/types.js
===================================================================
--- node_modules/recharts/es6/types.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/types.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/util/ActiveShapeUtils.js
===================================================================
--- node_modules/recharts/es6/util/ActiveShapeUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/ActiveShapeUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,100 @@
+var _excluded = ["option", "shapeType", "activeClassName"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { cloneElement, isValidElement } from 'react';
+import isPlainObject from 'es-toolkit/compat/isPlainObject';
+import { Rectangle } from '../shape/Rectangle';
+import { Trapezoid } from '../shape/Trapezoid';
+import { Sector } from '../shape/Sector';
+import { Layer } from '../container/Layer';
+import { Symbols } from '../shape/Symbols';
+import { Curve } from '../shape/Curve';
+
+/**
+ * This is an abstraction for rendering a user defined prop for a customized shape in several forms.
+ *
+ * <Shape /> is the root and will handle taking in:
+ *  - an object of svg properties
+ *  - a boolean
+ *  - a render prop(inline function that returns jsx)
+ *  - a React element
+ *
+ * <ShapeSelector /> is a subcomponent of <Shape /> and used to match a component
+ * to the value of props.shapeType that is passed to the root.
+ *
+ */
+
+function defaultPropTransformer(option, props) {
+  return _objectSpread(_objectSpread({}, props), option);
+}
+function isSymbolsProps(shapeType, _elementProps) {
+  return shapeType === 'symbols';
+}
+function ShapeSelector(_ref) {
+  var {
+    shapeType,
+    elementProps
+  } = _ref;
+  switch (shapeType) {
+    case 'rectangle':
+      return /*#__PURE__*/React.createElement(Rectangle, elementProps);
+    case 'trapezoid':
+      return /*#__PURE__*/React.createElement(Trapezoid, elementProps);
+    case 'sector':
+      return /*#__PURE__*/React.createElement(Sector, elementProps);
+    case 'symbols':
+      if (isSymbolsProps(shapeType, elementProps)) {
+        return /*#__PURE__*/React.createElement(Symbols, elementProps);
+      }
+      break;
+    case 'curve':
+      return /*#__PURE__*/React.createElement(Curve, elementProps);
+    default:
+      return null;
+  }
+}
+export function getPropsFromShapeOption(option) {
+  if (/*#__PURE__*/isValidElement(option)) {
+    return option.props;
+  }
+  return option;
+}
+export function Shape(_ref2) {
+  var {
+      option,
+      shapeType,
+      activeClassName = 'recharts-active-shape'
+    } = _ref2,
+    props = _objectWithoutProperties(_ref2, _excluded);
+  var shape;
+  if (/*#__PURE__*/isValidElement(option)) {
+    // @ts-expect-error we can't know the type of cloned element props
+    shape = /*#__PURE__*/cloneElement(option, _objectSpread(_objectSpread({}, props), getPropsFromShapeOption(option)));
+  } else if (typeof option === 'function') {
+    shape = option(props, props.index);
+  } else if (isPlainObject(option) && typeof option !== 'boolean') {
+    var nextProps = defaultPropTransformer(option, props);
+    shape = /*#__PURE__*/React.createElement(ShapeSelector, {
+      shapeType: shapeType,
+      elementProps: nextProps
+    });
+  } else {
+    var elementProps = props;
+    shape = /*#__PURE__*/React.createElement(ShapeSelector, {
+      shapeType: shapeType,
+      elementProps: elementProps
+    });
+  }
+  if (props.isActive) {
+    return /*#__PURE__*/React.createElement(Layer, {
+      className: activeClassName
+    }, shape);
+  }
+  return shape;
+}
Index: node_modules/recharts/es6/util/BarUtils.js
===================================================================
--- node_modules/recharts/es6/util/BarUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/BarUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,29 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import invariant from 'tiny-invariant';
+import { Shape } from './ActiveShapeUtils';
+import { isNullish, isNumber } from './DataUtils';
+export function BarRectangle(props) {
+  return /*#__PURE__*/React.createElement(Shape, _extends({
+    shapeType: "rectangle",
+    activeClassName: "recharts-active-bar"
+  }, props));
+}
+/**
+ * Safely gets minPointSize from the minPointSize prop if it is a function
+ * @param minPointSize minPointSize as passed to the Bar component
+ * @param defaultValue default minPointSize
+ * @returns minPointSize
+ */
+export var minPointSizeCallback = function minPointSizeCallback(minPointSize) {
+  var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+  return (value, index) => {
+    if (isNumber(minPointSize)) return minPointSize;
+    var isValueNumberOrNil = isNumber(value) || isNullish(value);
+    if (isValueNumberOrNil) {
+      return minPointSize(value, index);
+    }
+    !isValueNumberOrNil ? true ? invariant(false, "minPointSize callback function received a value with type of ".concat(typeof value, ". Currently only numbers or null/undefined are supported.")) : invariant(false) : void 0;
+    return defaultValue;
+  };
+};
Index: node_modules/recharts/es6/util/CartesianUtils.js
===================================================================
--- node_modules/recharts/es6/util/CartesianUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/CartesianUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,66 @@
+export var rectWithPoints = (_ref, _ref2) => {
+  var {
+    x: x1,
+    y: y1
+  } = _ref;
+  var {
+    x: x2,
+    y: y2
+  } = _ref2;
+  return {
+    x: Math.min(x1, x2),
+    y: Math.min(y1, y2),
+    width: Math.abs(x2 - x1),
+    height: Math.abs(y2 - y1)
+  };
+};
+
+/**
+ * Compute the x, y, width, and height of a box from two reference points.
+ * @param  {Object} coords     x1, x2, y1, and y2
+ * @return {Object} object
+ */
+export var rectWithCoords = _ref3 => {
+  var {
+    x1,
+    y1,
+    x2,
+    y2
+  } = _ref3;
+  return rectWithPoints({
+    x: x1,
+    y: y1
+  }, {
+    x: x2,
+    y: y2
+  });
+};
+
+/** Normalizes the angle so that 0 <= angle < 180.
+ * @param {number} angle Angle in degrees.
+ * @return {number} the normalized angle with a value of at least 0 and never greater or equal to 180. */
+export function normalizeAngle(angle) {
+  return (angle % 180 + 180) % 180;
+}
+
+/** Calculates the width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.
+ * @param {Object} size Width and height of the text in a horizontal position.
+ * @param {number} angle Angle in degrees in which the text is displayed.
+ * @return {number} The width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.
+ */
+export var getAngledRectangleWidth = function getAngledRectangleWidth(_ref4) {
+  var {
+    width,
+    height
+  } = _ref4;
+  var angle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+  // Ensure angle is >= 0 && < 180
+  var normalizedAngle = normalizeAngle(angle);
+  var angleRadians = normalizedAngle * Math.PI / 180;
+
+  /* Depending on the height and width of the rectangle, we may need to use different formulas to calculate the angled
+   * width. This threshold defines when each formula should kick in. */
+  var angleThreshold = Math.atan(height / width);
+  var angledWidth = angleRadians > angleThreshold && angleRadians < Math.PI - angleThreshold ? height / Math.sin(angleRadians) : width / Math.cos(angleRadians);
+  return Math.abs(angledWidth);
+};
Index: node_modules/recharts/es6/util/ChartUtils.js
===================================================================
--- node_modules/recharts/es6/util/ChartUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/ChartUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,521 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import sortBy from 'es-toolkit/compat/sortBy';
+import get from 'es-toolkit/compat/get';
+import { stack as shapeStack, stackOffsetExpand, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderNone } from 'victory-vendor/d3-shape';
+import { findEntryInArray, isNan, isNotNil, isNullish, isNumber, isNumOrStr, mathSign } from './DataUtils';
+import { getSliced } from './getSliced';
+import { isWellBehavedNumber } from './isWellBehavedNumber';
+export function getValueByDataKey(obj, dataKey, defaultValue) {
+  if (isNullish(obj) || isNullish(dataKey)) {
+    return defaultValue;
+  }
+  if (isNumOrStr(dataKey)) {
+    return get(obj, dataKey, defaultValue);
+  }
+  if (typeof dataKey === 'function') {
+    return dataKey(obj);
+  }
+  return defaultValue;
+}
+export var appendOffsetOfLegend = (offset, legendSettings, legendSize) => {
+  if (legendSettings && legendSize) {
+    var {
+      width: boxWidth,
+      height: boxHeight
+    } = legendSize;
+    var {
+      align,
+      verticalAlign,
+      layout
+    } = legendSettings;
+    if ((layout === 'vertical' || layout === 'horizontal' && verticalAlign === 'middle') && align !== 'center' && isNumber(offset[align])) {
+      return _objectSpread(_objectSpread({}, offset), {}, {
+        [align]: offset[align] + (boxWidth || 0)
+      });
+    }
+    if ((layout === 'horizontal' || layout === 'vertical' && align === 'center') && verticalAlign !== 'middle' && isNumber(offset[verticalAlign])) {
+      return _objectSpread(_objectSpread({}, offset), {}, {
+        [verticalAlign]: offset[verticalAlign] + (boxHeight || 0)
+      });
+    }
+  }
+  return offset;
+};
+export var isCategoricalAxis = (layout, axisType) => layout === 'horizontal' && axisType === 'xAxis' || layout === 'vertical' && axisType === 'yAxis' || layout === 'centric' && axisType === 'angleAxis' || layout === 'radial' && axisType === 'radiusAxis';
+
+/**
+ * Calculate the Coordinates of grid
+ * @param  {Array} ticks           The ticks in axis
+ * @param {Number} minValue        The minimum value of axis
+ * @param {Number} maxValue        The maximum value of axis
+ * @param {boolean} syncWithTicks  Synchronize grid lines with ticks or not
+ * @return {Array}                 Coordinates
+ */
+export var getCoordinatesOfGrid = (ticks, minValue, maxValue, syncWithTicks) => {
+  if (syncWithTicks) {
+    return ticks.map(entry => entry.coordinate);
+  }
+  var hasMin, hasMax;
+  var values = ticks.map(entry => {
+    if (entry.coordinate === minValue) {
+      hasMin = true;
+    }
+    if (entry.coordinate === maxValue) {
+      hasMax = true;
+    }
+    return entry.coordinate;
+  });
+  if (!hasMin) {
+    values.push(minValue);
+  }
+  if (!hasMax) {
+    values.push(maxValue);
+  }
+  return values;
+};
+/**
+ * Of on four almost identical implementations of tick generation.
+ * The four horsemen of tick generation are:
+ * - {@link selectTooltipAxisTicks}
+ * - {@link combineAxisTicks}
+ * - {@link getTicksOfAxis}.
+ * - {@link combineGraphicalItemTicks}
+ */
+export var getTicksOfAxis = (axis, isGrid, isAll) => {
+  if (!axis) {
+    return null;
+  }
+  var {
+    duplicateDomain,
+    type,
+    range,
+    scale,
+    realScaleType,
+    isCategorical,
+    categoricalDomain,
+    tickCount,
+    ticks,
+    niceTicks,
+    axisType
+  } = axis;
+  if (!scale) {
+    return null;
+  }
+  var offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;
+  var offset = (isGrid || isAll) && type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;
+  offset = axisType === 'angleAxis' && range && range.length >= 2 ? mathSign(range[0] - range[1]) * 2 * offset : offset;
+
+  // The ticks set by user should only affect the ticks adjacent to axis line
+  if (isGrid && (ticks || niceTicks)) {
+    var result = (ticks || niceTicks || []).map((entry, index) => {
+      var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;
+      var scaled = scale.map(scaleContent);
+      if (!isWellBehavedNumber(scaled)) {
+        return null;
+      }
+      return {
+        // If the scaleContent is not a number, the coordinate will be NaN.
+        // That could be the case for example with a PointScale and a string as domain.
+        coordinate: scaled + offset,
+        value: entry,
+        offset,
+        index
+      };
+    }).filter(isNotNil);
+    return result;
+  }
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => {
+      var scaled = scale.map(entry);
+      if (!isWellBehavedNumber(scaled)) {
+        return null;
+      }
+      return {
+        coordinate: scaled + offset,
+        value: entry,
+        index,
+        offset
+      };
+    }).filter(isNotNil);
+  }
+  if (scale.ticks && !isAll && tickCount != null) {
+    return scale.ticks(tickCount).map((entry, index) => {
+      var scaled = scale.map(entry);
+      if (!isWellBehavedNumber(scaled)) {
+        return null;
+      }
+      return {
+        coordinate: scaled + offset,
+        value: entry,
+        index,
+        offset
+      };
+    }).filter(isNotNil);
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => {
+    var scaled = scale.map(entry);
+    if (!isWellBehavedNumber(scaled)) {
+      return null;
+    }
+    return {
+      coordinate: scaled + offset,
+      // @ts-expect-error can't use Date as an index
+      value: duplicateDomain ? duplicateDomain[entry] : entry,
+      index,
+      offset
+    };
+  }).filter(isNotNil);
+};
+
+/**
+ * Both value and domain are tuples of two numbers
+ * - but the type stays as array of numbers until we have better support in rest of the app
+ * @param value input that will be truncated
+ * @param domain boundaries
+ * @returns tuple of two numbers
+ */
+export var truncateByDomain = (value, domain) => {
+  if (!domain || domain.length !== 2 || !isNumber(domain[0]) || !isNumber(domain[1])) {
+    return value;
+  }
+  var minValue = Math.min(domain[0], domain[1]);
+  var maxValue = Math.max(domain[0], domain[1]);
+  var result = [value[0], value[1]];
+  if (!isNumber(value[0]) || value[0] < minValue) {
+    result[0] = minValue;
+  }
+  if (!isNumber(value[1]) || value[1] > maxValue) {
+    result[1] = maxValue;
+  }
+  if (result[0] > maxValue) {
+    result[0] = maxValue;
+  }
+  if (result[1] < minValue) {
+    result[1] = minValue;
+  }
+  return result;
+};
+
+/**
+ * Stacks all positive numbers above zero and all negative numbers below zero.
+ *
+ * If all values in the series are positive then this behaves the same as 'none' stacker.
+ *
+ * @param {Array} series from d3-shape Stack
+ * @return {Array} series with applied offset
+ */
+export var offsetSign = series => {
+  var _series$;
+  var n = series.length;
+  if (n <= 0) {
+    return;
+  }
+  var m = (_series$ = series[0]) === null || _series$ === void 0 ? void 0 : _series$.length;
+  if (m == null || m <= 0) {
+    return;
+  }
+  for (var j = 0; j < m; ++j) {
+    var positive = 0;
+    var negative = 0;
+    for (var i = 0; i < n; ++i) {
+      var row = series[i];
+      var col = row === null || row === void 0 ? void 0 : row[j];
+      if (col == null) {
+        continue;
+      }
+      var series1 = col[1];
+      var series0 = col[0];
+      var value = isNan(series1) ? series0 : series1;
+      if (value >= 0) {
+        col[0] = positive;
+        positive += value;
+        col[1] = positive;
+      } else {
+        col[0] = negative;
+        negative += value;
+        col[1] = negative;
+      }
+    }
+  }
+};
+
+/**
+ * Replaces all negative values with zero when stacking data.
+ *
+ * If all values in the series are positive then this behaves the same as 'none' stacker.
+ *
+ * @param {Array} series from d3-shape Stack
+ * @return {Array} series with applied offset
+ */
+export var offsetPositive = series => {
+  var _series$2;
+  var n = series.length;
+  if (n <= 0) {
+    return;
+  }
+  var m = (_series$2 = series[0]) === null || _series$2 === void 0 ? void 0 : _series$2.length;
+  if (m == null || m <= 0) {
+    return;
+  }
+  for (var j = 0; j < m; ++j) {
+    var positive = 0;
+    for (var i = 0; i < n; ++i) {
+      var row = series[i];
+      var col = row === null || row === void 0 ? void 0 : row[j];
+      if (col == null) {
+        continue;
+      }
+      var value = isNan(col[1]) ? col[0] : col[1];
+      if (value >= 0) {
+        col[0] = positive;
+        positive += value;
+        col[1] = positive;
+      } else {
+        col[0] = 0;
+        col[1] = 0;
+      }
+    }
+  }
+};
+
+/**
+ * Function type to compute offset for stacked data.
+ *
+ * d3-shape has something fishy going on with its types.
+ * In @definitelytyped/d3-shape, this function (the offset accessor) is typed as Series<> => void.
+ * However! When I actually open the storybook I can see that the offset accessor actually receives Array<Series<>>.
+ * The same I can see in the source code itself:
+ * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042
+ * That one unfortunately has no types but we can tell it passes three-dimensional array.
+ *
+ * Which leads me to believe that definitelytyped is wrong on this one.
+ * There's open discussion on this topic without much attention:
+ * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042
+ */
+
+var STACK_OFFSET_MAP = {
+  sign: offsetSign,
+  // @ts-expect-error definitelytyped types are incorrect
+  expand: stackOffsetExpand,
+  // @ts-expect-error definitelytyped types are incorrect
+  none: stackOffsetNone,
+  // @ts-expect-error definitelytyped types are incorrect
+  silhouette: stackOffsetSilhouette,
+  // @ts-expect-error definitelytyped types are incorrect
+  wiggle: stackOffsetWiggle,
+  positive: offsetPositive
+};
+export var getStackedData = (data, dataKeys, offsetType) => {
+  var _STACK_OFFSET_MAP$off;
+  var offsetAccessor = (_STACK_OFFSET_MAP$off = STACK_OFFSET_MAP[offsetType]) !== null && _STACK_OFFSET_MAP$off !== void 0 ? _STACK_OFFSET_MAP$off : stackOffsetNone;
+  var stack = shapeStack().keys(dataKeys).value((d, key) => Number(getValueByDataKey(d, key, 0))).order(stackOrderNone)
+  // @ts-expect-error definitelytyped types are incorrect
+  .offset(offsetAccessor);
+  var result = stack(data);
+
+  // Post-process ranged data: if value is an array of two numbers, use them directly without stacking
+  result.forEach((series, seriesIndex) => {
+    series.forEach((point, pointIndex) => {
+      var value = getValueByDataKey(data[pointIndex], dataKeys[seriesIndex], 0);
+      if (Array.isArray(value) && value.length === 2 && isNumber(value[0]) && isNumber(value[1])) {
+        // eslint-disable-next-line prefer-destructuring,no-param-reassign
+        point[0] = value[0];
+        // eslint-disable-next-line prefer-destructuring,no-param-reassign
+        point[1] = value[1];
+      }
+    });
+  });
+  return result;
+};
+
+/**
+ * Externally, we accept both strings and numbers as stack IDs
+ * @inline
+ */
+
+/**
+ * Stack IDs in the external props allow numbers; but internally we use it as an object key
+ * and object keys are always strings. Also, it would be kinda confusing if stackId=8 and stackId='8' were different stacks
+ * so let's just force a string.
+ */
+
+export function getNormalizedStackId(publicStackId) {
+  return publicStackId == null ? undefined : String(publicStackId);
+}
+export function getCateCoordinateOfLine(_ref) {
+  var {
+    axis,
+    ticks,
+    bandSize,
+    entry,
+    index,
+    dataKey
+  } = _ref;
+  if (axis.type === 'category') {
+    // find coordinate of category axis by the value of category
+    // @ts-expect-error why does this use direct object access instead of getValueByDataKey?
+    if (!axis.allowDuplicatedCategory && axis.dataKey && !isNullish(entry[axis.dataKey])) {
+      // @ts-expect-error why does this use direct object access instead of getValueByDataKey?
+      var matchedTick = findEntryInArray(ticks, 'value', entry[axis.dataKey]);
+      if (matchedTick) {
+        return matchedTick.coordinate + bandSize / 2;
+      }
+    }
+    return ticks !== null && ticks !== void 0 && ticks[index] ? ticks[index].coordinate + bandSize / 2 : null;
+  }
+  var value = getValueByDataKey(entry, !isNullish(dataKey) ? dataKey : axis.dataKey);
+  var scaled = axis.scale.map(value);
+  if (!isNumber(scaled)) {
+    return null;
+  }
+  return scaled;
+}
+export var getCateCoordinateOfBar = _ref2 => {
+  var {
+    axis,
+    ticks,
+    offset,
+    bandSize,
+    entry,
+    index
+  } = _ref2;
+  if (axis.type === 'category') {
+    return ticks[index] ? ticks[index].coordinate + offset : null;
+  }
+  // @ts-expect-error getValueByDataKey does not validate the output type
+  var value = getValueByDataKey(entry, axis.dataKey, axis.scale.domain()[index]);
+  if (isNullish(value)) {
+    return null;
+  }
+  var scaled = axis.scale.map(value);
+  if (!isNumber(scaled)) {
+    return null;
+  }
+  return scaled - bandSize / 2 + offset;
+};
+export var getBaseValueOfBar = _ref3 => {
+  var {
+    numericAxis
+  } = _ref3;
+  var domain = numericAxis.scale.domain();
+  if (numericAxis.type === 'number') {
+    // @ts-expect-error type number means the domain has numbers in it but this relationship is not known to typescript
+    var minValue = Math.min(domain[0], domain[1]);
+    // @ts-expect-error type number means the domain has numbers in it but this relationship is not known to typescript
+    var maxValue = Math.max(domain[0], domain[1]);
+    if (minValue <= 0 && maxValue >= 0) {
+      return 0;
+    }
+    if (maxValue < 0) {
+      return maxValue;
+    }
+    return minValue;
+  }
+  return domain[0];
+};
+var getDomainOfSingle = data => {
+  var flat = data.flat(2).filter(isNumber);
+  return [Math.min(...flat), Math.max(...flat)];
+};
+var makeDomainFinite = domain => {
+  return [domain[0] === Infinity ? 0 : domain[0], domain[1] === -Infinity ? 0 : domain[1]];
+};
+export var getDomainOfStackGroups = (stackGroups, startIndex, endIndex) => {
+  if (stackGroups == null) {
+    return undefined;
+  }
+  return makeDomainFinite(Object.keys(stackGroups).reduce((result, stackId) => {
+    var group = stackGroups[stackId];
+    if (!group) {
+      return result;
+    }
+    var {
+      stackedData
+    } = group;
+    var domain = stackedData.reduce((res, entry) => {
+      var sliced = getSliced(entry, startIndex, endIndex);
+      var s = getDomainOfSingle(sliced);
+      if (!isWellBehavedNumber(s[0]) || !isWellBehavedNumber(s[1])) {
+        return res;
+      }
+      return [Math.min(res[0], s[0]), Math.max(res[1], s[1])];
+    }, [Infinity, -Infinity]);
+    return [Math.min(domain[0], result[0]), Math.max(domain[1], result[1])];
+  }, [Infinity, -Infinity]));
+};
+export var MIN_VALUE_REG = /^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;
+export var MAX_VALUE_REG = /^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;
+
+/**
+ * Calculate the size between two category
+ * @param  {Object} axis  The options of axis
+ * @param  {Array}  ticks The ticks of axis
+ * @param  {Boolean} isBar if items in axis are bars
+ * @return {Number} Size
+ */
+export var getBandSizeOfAxis = (axis, ticks, isBar) => {
+  if (axis && axis.scale && axis.scale.bandwidth) {
+    var bandWidth = axis.scale.bandwidth();
+    if (!isBar || bandWidth > 0) {
+      return bandWidth;
+    }
+  }
+  if (axis && ticks && ticks.length >= 2) {
+    var orderedTicks = sortBy(ticks, o => o.coordinate);
+    var bandSize = Infinity;
+    for (var i = 1, len = orderedTicks.length; i < len; i++) {
+      var cur = orderedTicks[i];
+      var prev = orderedTicks[i - 1];
+      bandSize = Math.min(((cur === null || cur === void 0 ? void 0 : cur.coordinate) || 0) - ((prev === null || prev === void 0 ? void 0 : prev.coordinate) || 0), bandSize);
+    }
+    return bandSize === Infinity ? 0 : bandSize;
+  }
+  return isBar ? undefined : 0;
+};
+export function getTooltipEntry(_ref4) {
+  var {
+    tooltipEntrySettings,
+    dataKey,
+    payload,
+    value,
+    name
+  } = _ref4;
+  return _objectSpread(_objectSpread({}, tooltipEntrySettings), {}, {
+    dataKey,
+    payload,
+    value,
+    name
+  });
+}
+export function getTooltipNameProp(nameFromItem, dataKey) {
+  if (nameFromItem) {
+    return String(nameFromItem);
+  }
+  if (typeof dataKey === 'string') {
+    return dataKey;
+  }
+  return undefined;
+}
+export var calculateCartesianTooltipPos = (coordinate, layout) => {
+  if (layout === 'horizontal') {
+    return coordinate.chartX;
+  }
+  if (layout === 'vertical') {
+    return coordinate.chartY;
+  }
+  return undefined;
+};
+export var calculatePolarTooltipPos = (rangeObj, layout) => {
+  if (layout === 'centric') {
+    return rangeObj.angle;
+  }
+  return rangeObj.radius;
+};
Index: node_modules/recharts/es6/util/Constants.js
===================================================================
--- node_modules/recharts/es6/util/Constants.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/Constants.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,15 @@
+export var COLOR_PANEL = ['#1890FF', '#66B5FF', '#41D9C7', '#2FC25B', '#6EDB8F', '#9AE65C', '#FACC14', '#E6965C', '#57AD71', '#223273', '#738AE6', '#7564CC', '#8543E0', '#A877ED', '#5C8EE6', '#13C2C2', '#70E0E0', '#5CA3E6', '#3436C7', '#8082FF', '#DD81E6', '#F04864', '#FA7D92', '#D598D9'];
+
+/**
+ * We use this attribute to identify which element is the one that the user is touching.
+ * The index is the position of the element in the data array.
+ * This can be either a number (for array-based charts) or a string (for the charts that have a matrix-shaped data).
+ */
+export var DATA_ITEM_INDEX_ATTRIBUTE_NAME = 'data-recharts-item-index';
+
+/**
+ * We use this attribute to identify which element is the one that the user is touching.
+ * Unlike dataKey, or name, it is always unique.
+ */
+export var DATA_ITEM_GRAPHICAL_ITEM_ID_ATTRIBUTE_NAME = 'data-recharts-item-id';
+export var DEFAULT_Y_AXIS_WIDTH = 60;
Index: node_modules/recharts/es6/util/CssPrefixUtils.js
===================================================================
--- node_modules/recharts/es6/util/CssPrefixUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/CssPrefixUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,17 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var PREFIX_LIST = ['Webkit', 'Moz', 'O', 'ms'];
+export var generatePrefixStyle = (name, value) => {
+  if (!name) {
+    return undefined;
+  }
+  var camelName = name.replace(/(\w)/, v => v.toUpperCase());
+  var result = PREFIX_LIST.reduce((res, entry) => _objectSpread(_objectSpread({}, res), {}, {
+    [entry + camelName]: value
+  }), {});
+  result[name] = value;
+  return result;
+};
Index: node_modules/recharts/es6/util/DOMUtils.js
===================================================================
--- node_modules/recharts/es6/util/DOMUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/DOMUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,127 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { Global } from './Global';
+import { LRUCache } from './LRUCache';
+var defaultConfig = {
+  cacheSize: 2000,
+  enableCache: true
+};
+var currentConfig = _objectSpread({}, defaultConfig);
+var stringCache = new LRUCache(currentConfig.cacheSize);
+var SPAN_STYLE = {
+  position: 'absolute',
+  top: '-20000px',
+  left: 0,
+  padding: 0,
+  margin: 0,
+  border: 'none',
+  whiteSpace: 'pre'
+};
+var MEASUREMENT_SPAN_ID = 'recharts_measurement_span';
+function createCacheKey(text, style) {
+  // Simple string concatenation for better performance than JSON.stringify
+  var fontSize = style.fontSize || '';
+  var fontFamily = style.fontFamily || '';
+  var fontWeight = style.fontWeight || '';
+  var fontStyle = style.fontStyle || '';
+  var letterSpacing = style.letterSpacing || '';
+  var textTransform = style.textTransform || '';
+  return "".concat(text, "|").concat(fontSize, "|").concat(fontFamily, "|").concat(fontWeight, "|").concat(fontStyle, "|").concat(letterSpacing, "|").concat(textTransform);
+}
+
+/**
+ * Measure text using DOM (accurate but slower)
+ * @param text - The text to measure
+ * @param style - CSS style properties to apply
+ * @returns The size of the text
+ */
+var measureTextWithDOM = (text, style) => {
+  try {
+    var measurementSpan = document.getElementById(MEASUREMENT_SPAN_ID);
+    if (!measurementSpan) {
+      measurementSpan = document.createElement('span');
+      measurementSpan.setAttribute('id', MEASUREMENT_SPAN_ID);
+      measurementSpan.setAttribute('aria-hidden', 'true');
+      document.body.appendChild(measurementSpan);
+    }
+
+    // Apply styles directly without unnecessary object creation
+    Object.assign(measurementSpan.style, SPAN_STYLE, style);
+    measurementSpan.textContent = "".concat(text);
+    var rect = measurementSpan.getBoundingClientRect();
+    return {
+      width: rect.width,
+      height: rect.height
+    };
+  } catch (_unused) {
+    return {
+      width: 0,
+      height: 0
+    };
+  }
+};
+export var getStringSize = function getStringSize(text) {
+  var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+  if (text === undefined || text === null || Global.isSsr) {
+    return {
+      width: 0,
+      height: 0
+    };
+  }
+
+  // If caching is disabled, measure directly
+  if (!currentConfig.enableCache) {
+    return measureTextWithDOM(text, style);
+  }
+  var cacheKey = createCacheKey(text, style);
+  var cachedResult = stringCache.get(cacheKey);
+  if (cachedResult) {
+    return cachedResult;
+  }
+
+  // Measure using DOM
+  var result = measureTextWithDOM(text, style);
+
+  // Store in LRU cache
+  stringCache.set(cacheKey, result);
+  return result;
+};
+
+/**
+ * Configure text measurement behavior
+ * @param config - Partial configuration to apply
+ * @returns void
+ */
+export var configureTextMeasurement = config => {
+  var newConfig = _objectSpread(_objectSpread({}, currentConfig), config);
+  if (newConfig.cacheSize !== currentConfig.cacheSize) {
+    stringCache = new LRUCache(newConfig.cacheSize);
+  }
+  currentConfig = newConfig;
+};
+
+/**
+ * Get current text measurement configuration
+ * @returns Current configuration
+ */
+export var getTextMeasurementConfig = () => _objectSpread({}, currentConfig);
+
+/**
+ * Clear the string size cache. Useful for testing or memory management.
+ * @returns void
+ */
+export var clearStringCache = () => {
+  stringCache.clear();
+};
+
+/**
+ * Get cache statistics for debugging purposes.
+ * @returns Cache statistics including size and max size
+ */
+export var getStringCacheStats = () => ({
+  size: stringCache.size(),
+  maxSize: currentConfig.cacheSize
+});
Index: node_modules/recharts/es6/util/DataUtils.js
===================================================================
--- node_modules/recharts/es6/util/DataUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/DataUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,159 @@
+import get from 'es-toolkit/compat/get';
+import { round } from './round';
+export var mathSign = value => {
+  if (value === 0) {
+    return 0;
+  }
+  if (value > 0) {
+    return 1;
+  }
+  return -1;
+};
+export var isNan = value => {
+  // eslint-disable-next-line eqeqeq
+  return typeof value == 'number' && value != +value;
+};
+export var isPercent = value => typeof value === 'string' && value.indexOf('%') === value.length - 1;
+export var isNumber = value => (typeof value === 'number' || value instanceof Number) && !isNan(value);
+export var isNumOrStr = value => isNumber(value) || typeof value === 'string';
+var idCounter = 0;
+export var uniqueId = prefix => {
+  var id = ++idCounter;
+  return "".concat(prefix || '').concat(id);
+};
+
+/**
+ * Calculates the numeric value represented by a percent string or number, based on a total value.
+ *
+ * - If `percent` is not a number or string, returns `defaultValue`.
+ * - If `percent` is a percent string but `totalValue` is null/undefined, returns `defaultValue`.
+ * - If the result is NaN, returns `defaultValue`.
+ * - If `validate` is true and the result exceeds `totalValue`, returns `totalValue`.
+ *
+ * @param percent - The percent value to convert. Can be a number (e.g. 25) or a string ending with '%' (e.g. '25%').
+ *                  If a string, it must end with '%' to be treated as a percent; otherwise, it is parsed as a number.
+ * @param totalValue - The total value to calculate the percent of. Required if `percent` is a percent string.
+ * @param defaultValue - The value returned if `percent` is undefined, invalid, or cannot be converted to a number.
+ * @param validate - If true, ensures the result does not exceed `totalValue` (when provided).
+ * @returns The calculated value, or `defaultValue` for invalid input.
+ */
+export var getPercentValue = function getPercentValue(percent, totalValue) {
+  var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+  var validate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+  if (!isNumber(percent) && typeof percent !== 'string') {
+    return defaultValue;
+  }
+  var value;
+  if (isPercent(percent)) {
+    if (totalValue == null) {
+      return defaultValue;
+    }
+    var index = percent.indexOf('%');
+    value = totalValue * parseFloat(percent.slice(0, index)) / 100;
+  } else {
+    value = +percent;
+  }
+  if (isNan(value)) {
+    value = defaultValue;
+  }
+  if (validate && totalValue != null && value > totalValue) {
+    value = totalValue;
+  }
+  return value;
+};
+export var hasDuplicate = ary => {
+  if (!Array.isArray(ary)) {
+    return false;
+  }
+  var len = ary.length;
+  var cache = {};
+  for (var i = 0; i < len; i++) {
+    if (!cache[String(ary[i])]) {
+      cache[String(ary[i])] = true;
+    } else {
+      return true;
+    }
+  }
+  return false;
+};
+export function interpolate(start, end, t) {
+  if (isNumber(start) && isNumber(end)) {
+    return round(start + t * (end - start));
+  }
+  return end;
+}
+export function findEntryInArray(ary, specifiedKey, specifiedValue) {
+  if (!ary || !ary.length) {
+    return undefined;
+  }
+  return ary.find(entry => entry && (typeof specifiedKey === 'function' ? specifiedKey(entry) : get(entry, specifiedKey)) === specifiedValue);
+}
+/**
+ * The least square linear regression
+ * @param {Array} data The array of points
+ * @returns {Object} The domain of x, and the parameter of linear function
+ */
+export var getLinearRegression = data => {
+  var len = data.length;
+  var xsum = 0;
+  var ysum = 0;
+  var xysum = 0;
+  var xxsum = 0;
+  var xmin = Infinity;
+  var xmax = -Infinity;
+  var xcurrent = 0;
+  var ycurrent = 0;
+  for (var i = 0; i < len; i++) {
+    var _data$i, _data$i2;
+    xcurrent = ((_data$i = data[i]) === null || _data$i === void 0 ? void 0 : _data$i.cx) || 0;
+    ycurrent = ((_data$i2 = data[i]) === null || _data$i2 === void 0 ? void 0 : _data$i2.cy) || 0;
+    xsum += xcurrent;
+    ysum += ycurrent;
+    xysum += xcurrent * ycurrent;
+    xxsum += xcurrent * xcurrent;
+    xmin = Math.min(xmin, xcurrent);
+    xmax = Math.max(xmax, xcurrent);
+  }
+  var a = len * xxsum !== xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0;
+  return {
+    xmin,
+    xmax,
+    a,
+    b: (ysum - a * xsum) / len
+  };
+};
+/**
+ * Checks if the value is null or undefined
+ * @param value The value to check
+ * @returns true if the value is null or undefined
+ */
+export var isNullish = value => {
+  return value === null || typeof value === 'undefined';
+};
+
+/**
+ * Uppercase the first letter of a string
+ * @param {string} value The string to uppercase
+ * @returns {string} The uppercased string
+ */
+export var upperFirst = value => {
+  if (isNullish(value)) {
+    return value;
+  }
+  return "".concat(value.charAt(0).toUpperCase()).concat(value.slice(1));
+};
+
+/**
+ * Checks if the value is not null nor undefined.
+ * @param value The value to check
+ * @returns true if the value is not null nor undefined
+ */
+export function isNotNil(value) {
+  return value != null;
+}
+
+/**
+ * No-operation function that does nothing.
+ * Useful as a placeholder or default callback function.
+ */
+export function noop() {}
Index: node_modules/recharts/es6/util/Events.js
===================================================================
--- node_modules/recharts/es6/util/Events.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/Events.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,5 @@
+import EventEmitter from 'eventemitter3';
+var eventCenter = new EventEmitter();
+export { eventCenter };
+export var TOOLTIP_SYNC_EVENT = 'recharts.syncEvent.tooltip';
+export var BRUSH_SYNC_EVENT = 'recharts.syncEvent.brush';
Index: node_modules/recharts/es6/util/FunnelUtils.js
===================================================================
--- node_modules/recharts/es6/util/FunnelUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/FunnelUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,8 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { Shape } from './ActiveShapeUtils';
+export function FunnelTrapezoid(props) {
+  return /*#__PURE__*/React.createElement(Shape, _extends({
+    shapeType: "trapezoid"
+  }, props));
+}
Index: node_modules/recharts/es6/util/Global.js
===================================================================
--- node_modules/recharts/es6/util/Global.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/Global.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,5 @@
+var parseIsSsrByDefault = () => !(typeof window !== 'undefined' && window.document && Boolean(window.document.createElement) && window.setTimeout);
+export var Global = {
+  devToolsEnabled: true,
+  isSsr: parseIsSsrByDefault()
+};
Index: node_modules/recharts/es6/util/IfOverflow.js
===================================================================
--- node_modules/recharts/es6/util/IfOverflow.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/IfOverflow.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/util/LRUCache.js
===================================================================
--- node_modules/recharts/es6/util/LRUCache.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/LRUCache.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,37 @@
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * Simple LRU (Least Recently Used) cache implementation
+ */
+export class LRUCache {
+  constructor(maxSize) {
+    _defineProperty(this, "cache", new Map());
+    this.maxSize = maxSize;
+  }
+  get(key) {
+    var value = this.cache.get(key);
+    if (value !== undefined) {
+      this.cache.delete(key);
+      this.cache.set(key, value);
+    }
+    return value;
+  }
+  set(key, value) {
+    if (this.cache.has(key)) {
+      this.cache.delete(key);
+    } else if (this.cache.size >= this.maxSize) {
+      var firstKey = this.cache.keys().next().value;
+      if (firstKey != null) {
+        this.cache.delete(firstKey);
+      }
+    }
+    this.cache.set(key, value);
+  }
+  clear() {
+    this.cache.clear();
+  }
+  size() {
+    return this.cache.size;
+  }
+}
Index: node_modules/recharts/es6/util/LogUtils.js
===================================================================
--- node_modules/recharts/es6/util/LogUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/LogUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,20 @@
+/* eslint no-console: 0 */
+var isDev = true;
+export var warn = function warn(condition, format) {
+  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
+    args[_key - 2] = arguments[_key];
+  }
+  if (isDev && typeof console !== 'undefined' && console.warn) {
+    if (format === undefined) {
+      console.warn('LogUtils requires an error message argument');
+    }
+    if (!condition) {
+      if (format === undefined) {
+        console.warn('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
+      } else {
+        var argIndex = 0;
+        console.warn(format.replace(/%s/g, () => args[argIndex++]));
+      }
+    }
+  }
+};
Index: node_modules/recharts/es6/util/PolarUtils.js
===================================================================
--- node_modules/recharts/es6/util/PolarUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/PolarUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,144 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+export var RADIAN = Math.PI / 180;
+export var degreeToRadian = angle => angle * Math.PI / 180;
+export var radianToDegree = angleInRadian => angleInRadian * 180 / Math.PI;
+export var polarToCartesian = (cx, cy, radius, angle) => ({
+  x: cx + Math.cos(-RADIAN * angle) * radius,
+  y: cy + Math.sin(-RADIAN * angle) * radius
+});
+export var getMaxRadius = function getMaxRadius(width, height) {
+  var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0,
+    width: 0,
+    height: 0,
+    brushBottom: 0
+  };
+  return Math.min(Math.abs(width - (offset.left || 0) - (offset.right || 0)), Math.abs(height - (offset.top || 0) - (offset.bottom || 0))) / 2;
+};
+var distanceBetweenPoints = (point, anotherPoint) => {
+  var {
+    x: x1,
+    y: y1
+  } = point;
+  var {
+    x: x2,
+    y: y2
+  } = anotherPoint;
+  return Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);
+};
+var getAngleOfPoint = (_ref, _ref2) => {
+  var {
+    x,
+    y
+  } = _ref;
+  var {
+    cx,
+    cy
+  } = _ref2;
+  var radius = distanceBetweenPoints({
+    x,
+    y
+  }, {
+    x: cx,
+    y: cy
+  });
+  if (radius <= 0) {
+    return {
+      radius,
+      angle: 0
+    };
+  }
+  var cos = (x - cx) / radius;
+  var angleInRadian = Math.acos(cos);
+  if (y > cy) {
+    angleInRadian = 2 * Math.PI - angleInRadian;
+  }
+  return {
+    radius,
+    angle: radianToDegree(angleInRadian),
+    angleInRadian
+  };
+};
+var formatAngleOfSector = _ref3 => {
+  var {
+    startAngle,
+    endAngle
+  } = _ref3;
+  var startCnt = Math.floor(startAngle / 360);
+  var endCnt = Math.floor(endAngle / 360);
+  var min = Math.min(startCnt, endCnt);
+  return {
+    startAngle: startAngle - min * 360,
+    endAngle: endAngle - min * 360
+  };
+};
+var reverseFormatAngleOfSector = (angle, _ref4) => {
+  var {
+    startAngle,
+    endAngle
+  } = _ref4;
+  var startCnt = Math.floor(startAngle / 360);
+  var endCnt = Math.floor(endAngle / 360);
+  var min = Math.min(startCnt, endCnt);
+  return angle + min * 360;
+};
+export var inRangeOfSector = (_ref5, viewBox) => {
+  var {
+    chartX: x,
+    chartY: y
+  } = _ref5;
+  var {
+    radius,
+    angle
+  } = getAngleOfPoint({
+    x,
+    y
+  }, viewBox);
+  var {
+    innerRadius,
+    outerRadius
+  } = viewBox;
+  if (radius < innerRadius || radius > outerRadius) {
+    return null;
+  }
+  if (radius === 0) {
+    return null;
+  }
+  var {
+    startAngle,
+    endAngle
+  } = formatAngleOfSector(viewBox);
+  var formatAngle = angle;
+  var inRange;
+  if (startAngle <= endAngle) {
+    while (formatAngle > endAngle) {
+      formatAngle -= 360;
+    }
+    while (formatAngle < startAngle) {
+      formatAngle += 360;
+    }
+    inRange = formatAngle >= startAngle && formatAngle <= endAngle;
+  } else {
+    while (formatAngle > startAngle) {
+      formatAngle -= 360;
+    }
+    while (formatAngle < endAngle) {
+      formatAngle += 360;
+    }
+    inRange = formatAngle >= endAngle && formatAngle <= startAngle;
+  }
+  if (inRange) {
+    return _objectSpread(_objectSpread({}, viewBox), {}, {
+      radius,
+      angle: reverseFormatAngleOfSector(formatAngle, viewBox)
+    });
+  }
+  return null;
+};
Index: node_modules/recharts/es6/util/RadialBarUtils.js
===================================================================
--- node_modules/recharts/es6/util/RadialBarUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/RadialBarUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,14 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { Shape } from './ActiveShapeUtils';
+export function parseCornerRadius(cornerRadius) {
+  if (typeof cornerRadius === 'string') {
+    return parseInt(cornerRadius, 10);
+  }
+  return cornerRadius;
+}
+export function RadialBarSector(props) {
+  return /*#__PURE__*/React.createElement(Shape, _extends({
+    shapeType: "sector"
+  }, props));
+}
Index: node_modules/recharts/es6/util/ReactUtils.js
===================================================================
--- node_modules/recharts/es6/util/ReactUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/ReactUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,85 @@
+import get from 'es-toolkit/compat/get';
+import { Children } from 'react';
+import { isFragment } from 'react-is';
+import { isNullish } from './DataUtils';
+export var SCALE_TYPES = ['auto', 'linear', 'pow', 'sqrt', 'log', 'identity', 'time', 'band', 'point', 'ordinal', 'quantile', 'quantize', 'utc', 'sequential', 'threshold'];
+
+/**
+ * @deprecated instead find another approach that does not depend on displayName.
+ * Get the display name of a component
+ * @param  {Object} Comp Specified Component
+ * @return {String}      Display name of Component
+ */
+export var getDisplayName = Comp => {
+  if (typeof Comp === 'string') {
+    return Comp;
+  }
+  if (!Comp) {
+    return '';
+  }
+  return Comp.displayName || Comp.name || 'Component';
+};
+
+// `toArray` gets called multiple times during the render
+// so we can memoize last invocation (since reference to `children` is the same)
+var lastChildren = null;
+var lastResult = null;
+
+/**
+ * @deprecated instead find another approach that does not require reading React Elements from DOM.
+ *
+ * @param children do not use
+ * @return deprecated do not use
+ */
+export var toArray = children => {
+  if (children === lastChildren && Array.isArray(lastResult)) {
+    return lastResult;
+  }
+  var result = [];
+  Children.forEach(children, child => {
+    if (isNullish(child)) return;
+    if (isFragment(child)) {
+      result = result.concat(toArray(child.props.children));
+    } else {
+      // @ts-expect-error this could still be Iterable<ReactNode> and TS does not like that
+      result.push(child);
+    }
+  });
+  lastResult = result;
+  lastChildren = children;
+  return result;
+};
+
+/**
+ * @deprecated instead find another approach that does not require reading React Elements from DOM.
+ *
+ * Find and return all matched children by type.
+ * `type` must be a React.ComponentType
+ *
+ * @param children do not use
+ * @param type do not use
+ * @return deprecated do not use
+ */
+export function findAllByType(children, type) {
+  var result = [];
+  var types = [];
+  if (Array.isArray(type)) {
+    types = type.map(t => getDisplayName(t));
+  } else {
+    types = [getDisplayName(type)];
+  }
+  toArray(children).forEach(child => {
+    // @ts-expect-error toArray and lodash.get are not compatible. Let's get rid of the whole findAllByType function
+    var childType = get(child, 'type.displayName') || get(child, 'type.name');
+    if (childType && types.indexOf(childType) !== -1) {
+      result.push(child);
+    }
+  });
+  return result;
+}
+export var isClipDot = dot => {
+  if (dot && typeof dot === 'object' && 'clipDot' in dot) {
+    return Boolean(dot.clipDot);
+  }
+  return true;
+};
Index: node_modules/recharts/es6/util/ReduceCSSCalc.js
===================================================================
--- node_modules/recharts/es6/util/ReduceCSSCalc.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/ReduceCSSCalc.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,145 @@
+var _DecimalCSS;
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { isNan } from './DataUtils';
+var MULTIPLY_OR_DIVIDE_REGEX = /(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/;
+var ADD_OR_SUBTRACT_REGEX = /(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/;
+var CSS_LENGTH_UNIT_REGEX = /^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/;
+var NUM_SPLIT_REGEX = /(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/;
+var CONVERSION_RATES = {
+  cm: 96 / 2.54,
+  mm: 96 / 25.4,
+  pt: 96 / 72,
+  pc: 96 / 6,
+  in: 96,
+  Q: 96 / (2.54 * 40),
+  px: 1
+};
+var FIXED_CSS_LENGTH_UNITS = ['cm', 'mm', 'pt', 'pc', 'in', 'Q', 'px'];
+function isSupportedUnit(unit) {
+  return FIXED_CSS_LENGTH_UNITS.includes(unit);
+}
+var STR_NAN = 'NaN';
+function convertToPx(value, unit) {
+  return value * CONVERSION_RATES[unit];
+}
+class DecimalCSS {
+  static parse(str) {
+    var _NUM_SPLIT_REGEX$exec;
+    var [, numStr, unit] = (_NUM_SPLIT_REGEX$exec = NUM_SPLIT_REGEX.exec(str)) !== null && _NUM_SPLIT_REGEX$exec !== void 0 ? _NUM_SPLIT_REGEX$exec : [];
+    if (numStr == null) {
+      return DecimalCSS.NaN;
+    }
+    return new DecimalCSS(parseFloat(numStr), unit !== null && unit !== void 0 ? unit : '');
+  }
+  constructor(num, unit) {
+    this.num = num;
+    this.unit = unit;
+    this.num = num;
+    this.unit = unit;
+    if (isNan(num)) {
+      this.unit = '';
+    }
+    if (unit !== '' && !CSS_LENGTH_UNIT_REGEX.test(unit)) {
+      this.num = NaN;
+      this.unit = '';
+    }
+    if (isSupportedUnit(unit)) {
+      this.num = convertToPx(num, unit);
+      this.unit = 'px';
+    }
+  }
+  add(other) {
+    if (this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num + other.num, this.unit);
+  }
+  subtract(other) {
+    if (this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num - other.num, this.unit);
+  }
+  multiply(other) {
+    if (this.unit !== '' && other.unit !== '' && this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num * other.num, this.unit || other.unit);
+  }
+  divide(other) {
+    if (this.unit !== '' && other.unit !== '' && this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num / other.num, this.unit || other.unit);
+  }
+  toString() {
+    return "".concat(this.num).concat(this.unit);
+  }
+  isNaN() {
+    return isNan(this.num);
+  }
+}
+_DecimalCSS = DecimalCSS;
+_defineProperty(DecimalCSS, "NaN", new _DecimalCSS(NaN, ''));
+function calculateArithmetic(expr) {
+  if (expr == null || expr.includes(STR_NAN)) {
+    return STR_NAN;
+  }
+  var newExpr = expr;
+  while (newExpr.includes('*') || newExpr.includes('/')) {
+    var _MULTIPLY_OR_DIVIDE_R;
+    var [, leftOperand, operator, rightOperand] = (_MULTIPLY_OR_DIVIDE_R = MULTIPLY_OR_DIVIDE_REGEX.exec(newExpr)) !== null && _MULTIPLY_OR_DIVIDE_R !== void 0 ? _MULTIPLY_OR_DIVIDE_R : [];
+    var lTs = DecimalCSS.parse(leftOperand !== null && leftOperand !== void 0 ? leftOperand : '');
+    var rTs = DecimalCSS.parse(rightOperand !== null && rightOperand !== void 0 ? rightOperand : '');
+    var result = operator === '*' ? lTs.multiply(rTs) : lTs.divide(rTs);
+    if (result.isNaN()) {
+      return STR_NAN;
+    }
+    newExpr = newExpr.replace(MULTIPLY_OR_DIVIDE_REGEX, result.toString());
+  }
+  while (newExpr.includes('+') || /.-\d+(?:\.\d+)?/.test(newExpr)) {
+    var _ADD_OR_SUBTRACT_REGE;
+    var [, _leftOperand, _operator, _rightOperand] = (_ADD_OR_SUBTRACT_REGE = ADD_OR_SUBTRACT_REGEX.exec(newExpr)) !== null && _ADD_OR_SUBTRACT_REGE !== void 0 ? _ADD_OR_SUBTRACT_REGE : [];
+    var _lTs = DecimalCSS.parse(_leftOperand !== null && _leftOperand !== void 0 ? _leftOperand : '');
+    var _rTs = DecimalCSS.parse(_rightOperand !== null && _rightOperand !== void 0 ? _rightOperand : '');
+    var _result = _operator === '+' ? _lTs.add(_rTs) : _lTs.subtract(_rTs);
+    if (_result.isNaN()) {
+      return STR_NAN;
+    }
+    newExpr = newExpr.replace(ADD_OR_SUBTRACT_REGEX, _result.toString());
+  }
+  return newExpr;
+}
+var PARENTHESES_REGEX = /\(([^()]*)\)/;
+function calculateParentheses(expr) {
+  var newExpr = expr;
+  var match;
+  // eslint-disable-next-line no-cond-assign
+  while ((match = PARENTHESES_REGEX.exec(newExpr)) != null) {
+    var [, parentheticalExpression] = match;
+    newExpr = newExpr.replace(PARENTHESES_REGEX, calculateArithmetic(parentheticalExpression));
+  }
+  return newExpr;
+}
+function evaluateExpression(expression) {
+  var newExpr = expression.replace(/\s+/g, '');
+  newExpr = calculateParentheses(newExpr);
+  newExpr = calculateArithmetic(newExpr);
+  return newExpr;
+}
+export function safeEvaluateExpression(expression) {
+  try {
+    return evaluateExpression(expression);
+  } catch (_unused) {
+    return STR_NAN;
+  }
+}
+export function reduceCSSCalc(expression) {
+  var result = safeEvaluateExpression(expression.slice(5, -1));
+  if (result === STR_NAN) {
+    return '';
+  }
+  return result;
+}
Index: node_modules/recharts/es6/util/ScatterUtils.js
===================================================================
--- node_modules/recharts/es6/util/ScatterUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/ScatterUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,29 @@
+var _excluded = ["option", "isActive"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { Symbols } from '../shape/Symbols';
+import { Shape } from './ActiveShapeUtils';
+import { DATA_ITEM_GRAPHICAL_ITEM_ID_ATTRIBUTE_NAME } from './Constants';
+export function ScatterSymbol(_ref) {
+  var {
+      option,
+      isActive
+    } = _ref,
+    props = _objectWithoutProperties(_ref, _excluded);
+  if (typeof option === 'string') {
+    return /*#__PURE__*/React.createElement(Shape, _extends({
+      option: /*#__PURE__*/React.createElement(Symbols, _extends({
+        type: option
+      }, props)),
+      isActive: isActive,
+      shapeType: "symbols"
+    }, props));
+  }
+  return /*#__PURE__*/React.createElement(Shape, _extends({
+    option: option,
+    isActive: isActive,
+    shapeType: "symbols"
+  }, props));
+}
Index: node_modules/recharts/es6/util/TickUtils.js
===================================================================
--- node_modules/recharts/es6/util/TickUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/TickUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,40 @@
+import { getAngledRectangleWidth } from './CartesianUtils';
+import { getEveryNth } from './getEveryNth';
+export function getAngledTickWidth(contentSize, unitSize, angle) {
+  var size = {
+    width: contentSize.width + unitSize.width,
+    height: contentSize.height + unitSize.height
+  };
+  return getAngledRectangleWidth(size, angle);
+}
+export function getTickBoundaries(viewBox, sign, sizeKey) {
+  var isWidth = sizeKey === 'width';
+  var {
+    x,
+    y,
+    width,
+    height
+  } = viewBox;
+  if (sign === 1) {
+    return {
+      start: isWidth ? x : y,
+      end: isWidth ? x + width : y + height
+    };
+  }
+  return {
+    start: isWidth ? x + width : y + height,
+    end: isWidth ? x : y
+  };
+}
+export function isVisible(sign, tickPosition, getSize, start, end) {
+  /* Since getSize() is expensive (it reads the ticks' size from the DOM), we do this check first to avoid calculating
+   * the tick's size. */
+  if (sign * tickPosition < sign * start || sign * tickPosition > sign * end) {
+    return false;
+  }
+  var size = getSize();
+  return sign * (tickPosition - sign * size / 2 - start) >= 0 && sign * (tickPosition + sign * size / 2 - end) <= 0;
+}
+export function getNumberIntervalTicks(ticks, interval) {
+  return getEveryNth(ticks, interval + 1);
+}
Index: node_modules/recharts/es6/util/YAxisUtils.js
===================================================================
--- node_modules/recharts/es6/util/YAxisUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/YAxisUtils.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,41 @@
+/**
+ * Calculates the width of the Y-axis based on the tick labels and the axis label.
+ * @param params - The parameters object.
+ * @param [params.ticks] - An array-like object of tick elements, each with a `getBoundingClientRect` method.
+ * @param [params.label] - The axis label element, with a `getBoundingClientRect` method.
+ * @param [params.labelGapWithTick=5] - The gap between the label and the tick.
+ * @param [params.tickSize=0] - The length of the tick line.
+ * @param [params.tickMargin=0] - The margin between the tick line and the tick text.
+ * @returns The calculated width of the Y-axis.
+ */
+export var getCalculatedYAxisWidth = _ref => {
+  var {
+    ticks,
+    label,
+    labelGapWithTick = 5,
+    // Default gap between label and tick
+    tickSize = 0,
+    tickMargin = 0
+  } = _ref;
+  // find the max width of the tick labels
+  var maxTickWidth = 0;
+  if (ticks) {
+    Array.from(ticks).forEach(tickNode => {
+      if (tickNode) {
+        var bbox = tickNode.getBoundingClientRect();
+        if (bbox.width > maxTickWidth) {
+          maxTickWidth = bbox.width;
+        }
+      }
+    });
+
+    // calculate width of the axis label
+    var labelWidth = label ? label.getBoundingClientRect().width : 0;
+    var tickWidth = tickSize + tickMargin;
+
+    // calculate the updated width of the y-axis
+    var updatedYAxisWidth = maxTickWidth + tickWidth + labelWidth + (label ? labelGapWithTick : 0);
+    return Math.round(updatedYAxisWidth);
+  }
+  return 0;
+};
Index: node_modules/recharts/es6/util/axisPropsAreEqual.js
===================================================================
--- node_modules/recharts/es6/util/axisPropsAreEqual.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/axisPropsAreEqual.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,45 @@
+var _excluded = ["domain", "range"],
+  _excluded2 = ["domain", "range"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import { propsAreEqual } from './propsAreEqual';
+function shortArraysAreEqual(arr1, arr2) {
+  if (arr1 === arr2) {
+    return true;
+  }
+  if (Array.isArray(arr1) && arr1.length === 2 && Array.isArray(arr2) && arr2.length === 2) {
+    return arr1[0] === arr2[0] && arr1[1] === arr2[1];
+  }
+  return false;
+}
+
+/**
+ * Usually we would not compare array props deeply for performance consideration.
+ * However, for axis props, domain is sometimes defined as a two-elements array, and range is always
+ * a two-elements array. So we can do a shallow comparison for the rest props and a shallow
+ * comparison for these two array props.
+ * @param prevProps
+ * @param nextProps
+ */
+export function axisPropsAreEqual(prevProps, nextProps) {
+  if (prevProps === nextProps) {
+    return true;
+  }
+  var {
+      domain: prevDomain,
+      range: prevRange
+    } = prevProps,
+    prevRest = _objectWithoutProperties(prevProps, _excluded);
+  var {
+      domain: nextDomain,
+      range: nextRange
+    } = nextProps,
+    nextRest = _objectWithoutProperties(nextProps, _excluded2);
+  if (!shortArraysAreEqual(prevDomain, nextDomain)) {
+    return false;
+  }
+  if (!shortArraysAreEqual(prevRange, nextRange)) {
+    return false;
+  }
+  return propsAreEqual(prevRest, nextRest);
+}
Index: node_modules/recharts/es6/util/cursor/getCursorPoints.js
===================================================================
--- node_modules/recharts/es6/util/cursor/getCursorPoints.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/cursor/getCursorPoints.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,45 @@
+import { polarToCartesian } from '../PolarUtils';
+import { isPolarCoordinate } from '../types';
+import { getRadialCursorPoints } from './getRadialCursorPoints';
+export function getCursorPoints(layout, activeCoordinate, offset) {
+  if (layout === 'horizontal') {
+    return [{
+      x: activeCoordinate.x,
+      y: offset.top
+    }, {
+      x: activeCoordinate.x,
+      y: offset.top + offset.height
+    }];
+  }
+  if (layout === 'vertical') {
+    return [{
+      x: offset.left,
+      y: activeCoordinate.y
+    }, {
+      x: offset.left + offset.width,
+      y: activeCoordinate.y
+    }];
+  }
+  if (isPolarCoordinate(activeCoordinate)) {
+    if (layout === 'centric') {
+      var {
+        cx,
+        cy,
+        innerRadius,
+        outerRadius,
+        angle
+      } = activeCoordinate;
+      var innerPoint = polarToCartesian(cx, cy, innerRadius, angle);
+      var outerPoint = polarToCartesian(cx, cy, outerRadius, angle);
+      return [{
+        x: innerPoint.x,
+        y: innerPoint.y
+      }, {
+        x: outerPoint.x,
+        y: outerPoint.y
+      }];
+    }
+    return getRadialCursorPoints(activeCoordinate);
+  }
+  return undefined;
+}
Index: node_modules/recharts/es6/util/cursor/getCursorRectangle.js
===================================================================
--- node_modules/recharts/es6/util/cursor/getCursorRectangle.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/cursor/getCursorRectangle.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,11 @@
+export function getCursorRectangle(layout, activeCoordinate, offset, tooltipAxisBandSize) {
+  var halfSize = tooltipAxisBandSize / 2;
+  return {
+    stroke: 'none',
+    fill: '#ccc',
+    x: layout === 'horizontal' ? activeCoordinate.x - halfSize : offset.left + 0.5,
+    y: layout === 'horizontal' ? offset.top + 0.5 : activeCoordinate.y - halfSize,
+    width: layout === 'horizontal' ? tooltipAxisBandSize : offset.width - 1,
+    height: layout === 'horizontal' ? offset.height - 1 : tooltipAxisBandSize
+  };
+}
Index: node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js
===================================================================
--- node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,25 @@
+import { polarToCartesian } from '../PolarUtils';
+/**
+ * Only applicable for radial layouts
+ * @param {Object} activeCoordinate ChartCoordinate
+ * @returns {Object} RadialCursorPoints
+ */
+export function getRadialCursorPoints(activeCoordinate) {
+  var {
+    cx,
+    cy,
+    radius,
+    startAngle,
+    endAngle
+  } = activeCoordinate;
+  var startPoint = polarToCartesian(cx, cy, radius, startAngle);
+  var endPoint = polarToCartesian(cx, cy, radius, endAngle);
+  return {
+    points: [startPoint, endPoint],
+    cx,
+    cy,
+    radius,
+    startAngle,
+    endAngle
+  };
+}
Index: node_modules/recharts/es6/util/excludeEventProps.js
===================================================================
--- node_modules/recharts/es6/util/excludeEventProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/excludeEventProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,8 @@
+var EventKeys = ['dangerouslySetInnerHTML', 'onCopy', 'onCopyCapture', 'onCut', 'onCutCapture', 'onPaste', 'onPasteCapture', 'onCompositionEnd', 'onCompositionEndCapture', 'onCompositionStart', 'onCompositionStartCapture', 'onCompositionUpdate', 'onCompositionUpdateCapture', 'onFocus', 'onFocusCapture', 'onBlur', 'onBlurCapture', 'onChange', 'onChangeCapture', 'onBeforeInput', 'onBeforeInputCapture', 'onInput', 'onInputCapture', 'onReset', 'onResetCapture', 'onSubmit', 'onSubmitCapture', 'onInvalid', 'onInvalidCapture', 'onLoad', 'onLoadCapture', 'onError', 'onErrorCapture', 'onKeyDown', 'onKeyDownCapture', 'onKeyPress', 'onKeyPressCapture', 'onKeyUp', 'onKeyUpCapture', 'onAbort', 'onAbortCapture', 'onCanPlay', 'onCanPlayCapture', 'onCanPlayThrough', 'onCanPlayThroughCapture', 'onDurationChange', 'onDurationChangeCapture', 'onEmptied', 'onEmptiedCapture', 'onEncrypted', 'onEncryptedCapture', 'onEnded', 'onEndedCapture', 'onLoadedData', 'onLoadedDataCapture', 'onLoadedMetadata', 'onLoadedMetadataCapture', 'onLoadStart', 'onLoadStartCapture', 'onPause', 'onPauseCapture', 'onPlay', 'onPlayCapture', 'onPlaying', 'onPlayingCapture', 'onProgress', 'onProgressCapture', 'onRateChange', 'onRateChangeCapture', 'onSeeked', 'onSeekedCapture', 'onSeeking', 'onSeekingCapture', 'onStalled', 'onStalledCapture', 'onSuspend', 'onSuspendCapture', 'onTimeUpdate', 'onTimeUpdateCapture', 'onVolumeChange', 'onVolumeChangeCapture', 'onWaiting', 'onWaitingCapture', 'onAuxClick', 'onAuxClickCapture', 'onClick', 'onClickCapture', 'onContextMenu', 'onContextMenuCapture', 'onDoubleClick', 'onDoubleClickCapture', 'onDrag', 'onDragCapture', 'onDragEnd', 'onDragEndCapture', 'onDragEnter', 'onDragEnterCapture', 'onDragExit', 'onDragExitCapture', 'onDragLeave', 'onDragLeaveCapture', 'onDragOver', 'onDragOverCapture', 'onDragStart', 'onDragStartCapture', 'onDrop', 'onDropCapture', 'onMouseDown', 'onMouseDownCapture', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseMoveCapture', 'onMouseOut', 'onMouseOutCapture', 'onMouseOver', 'onMouseOverCapture', 'onMouseUp', 'onMouseUpCapture', 'onSelect', 'onSelectCapture', 'onTouchCancel', 'onTouchCancelCapture', 'onTouchEnd', 'onTouchEndCapture', 'onTouchMove', 'onTouchMoveCapture', 'onTouchStart', 'onTouchStartCapture', 'onPointerDown', 'onPointerDownCapture', 'onPointerMove', 'onPointerMoveCapture', 'onPointerUp', 'onPointerUpCapture', 'onPointerCancel', 'onPointerCancelCapture', 'onPointerEnter', 'onPointerEnterCapture', 'onPointerLeave', 'onPointerLeaveCapture', 'onPointerOver', 'onPointerOverCapture', 'onPointerOut', 'onPointerOutCapture', 'onGotPointerCapture', 'onGotPointerCaptureCapture', 'onLostPointerCapture', 'onLostPointerCaptureCapture', 'onScroll', 'onScrollCapture', 'onWheel', 'onWheelCapture', 'onAnimationStart', 'onAnimationStartCapture', 'onAnimationEnd', 'onAnimationEndCapture', 'onAnimationIteration', 'onAnimationIterationCapture', 'onTransitionEnd', 'onTransitionEndCapture'];
+export function isEventKey(key) {
+  if (typeof key !== 'string') {
+    return false;
+  }
+  var allowedEventKeys = EventKeys;
+  return allowedEventKeys.includes(key);
+}
Index: node_modules/recharts/es6/util/getActiveCoordinate.js
===================================================================
--- node_modules/recharts/es6/util/getActiveCoordinate.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/getActiveCoordinate.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,152 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { polarToCartesian } from './PolarUtils';
+import { mathSign } from './DataUtils';
+export var getActiveCartesianCoordinate = (layout, tooltipTicks, activeIndex, pointer) => {
+  var entry = tooltipTicks.find(tick => tick && tick.index === activeIndex);
+  if (entry) {
+    if (layout === 'horizontal') {
+      return {
+        x: entry.coordinate,
+        y: pointer.chartY
+      };
+    }
+    if (layout === 'vertical') {
+      return {
+        x: pointer.chartX,
+        y: entry.coordinate
+      };
+    }
+  }
+  return {
+    x: 0,
+    y: 0
+  };
+};
+
+/**
+ * Get the active coordinate in polar coordinate system.
+ * Internally we only really use x and y, but this returned object is part of public API
+ * (because it goes straight to the tooltip content) so we keep all the other properties
+ * for backwards compatibility.
+ *
+ * @param layout - The polar layout type ('centric' or 'radial').
+ * @param tooltipTicks - Array of tick items used for tooltips.
+ * @param activeIndex - The index of the active tick.
+ * @param rangeObj - The range object containing polar chart properties.
+ * @returns The active coordinate object with polar properties.
+ */
+export var getActivePolarCoordinate = (layout, tooltipTicks, activeIndex, rangeObj) => {
+  var entry = tooltipTicks.find(tick => tick && tick.index === activeIndex);
+  if (entry) {
+    if (layout === 'centric') {
+      var _angle = entry.coordinate;
+      var {
+        radius: _radius
+      } = rangeObj;
+      return _objectSpread(_objectSpread(_objectSpread({}, rangeObj), polarToCartesian(rangeObj.cx, rangeObj.cy, _radius, _angle)), {}, {
+        angle: _angle,
+        radius: _radius
+      });
+    }
+    var radius = entry.coordinate;
+    var {
+      angle
+    } = rangeObj;
+    return _objectSpread(_objectSpread(_objectSpread({}, rangeObj), polarToCartesian(rangeObj.cx, rangeObj.cy, radius, angle)), {}, {
+      angle,
+      radius
+    });
+  }
+  return {
+    angle: 0,
+    clockWise: false,
+    cx: 0,
+    cy: 0,
+    endAngle: 0,
+    innerRadius: 0,
+    outerRadius: 0,
+    radius: 0,
+    startAngle: 0,
+    x: 0,
+    y: 0
+  };
+};
+export function isInCartesianRange(pointer, offset) {
+  var {
+    chartX: x,
+    chartY: y
+  } = pointer;
+  return x >= offset.left && x <= offset.left + offset.width && y >= offset.top && y <= offset.top + offset.height;
+}
+export var calculateActiveTickIndex = (coordinate, ticks, unsortedTicks, axisType, range) => {
+  var _ticks$length;
+  var len = (_ticks$length = ticks === null || ticks === void 0 ? void 0 : ticks.length) !== null && _ticks$length !== void 0 ? _ticks$length : 0;
+
+  // if there are 1 or fewer ticks or if there is no coordinate then the active tick is at index 0
+  if (len <= 1 || coordinate == null) {
+    return 0;
+  }
+  if (axisType === 'angleAxis' && range != null && Math.abs(Math.abs(range[1] - range[0]) - 360) <= 1e-6) {
+    // ticks are distributed in a circle
+    for (var i = 0; i < len; i++) {
+      var _unsortedTicks, _unsortedTicks2, _unsortedTicks$i, _unsortedTicks$, _unsortedTicks3;
+      var before = i > 0 ? (_unsortedTicks = unsortedTicks[i - 1]) === null || _unsortedTicks === void 0 ? void 0 : _unsortedTicks.coordinate : (_unsortedTicks2 = unsortedTicks[len - 1]) === null || _unsortedTicks2 === void 0 ? void 0 : _unsortedTicks2.coordinate;
+      var cur = (_unsortedTicks$i = unsortedTicks[i]) === null || _unsortedTicks$i === void 0 ? void 0 : _unsortedTicks$i.coordinate;
+      var after = i >= len - 1 ? (_unsortedTicks$ = unsortedTicks[0]) === null || _unsortedTicks$ === void 0 ? void 0 : _unsortedTicks$.coordinate : (_unsortedTicks3 = unsortedTicks[i + 1]) === null || _unsortedTicks3 === void 0 ? void 0 : _unsortedTicks3.coordinate;
+      var sameDirectionCoord = void 0;
+      if (before == null || cur == null || after == null) {
+        continue;
+      }
+      if (mathSign(cur - before) !== mathSign(after - cur)) {
+        var diffInterval = [];
+        if (mathSign(after - cur) === mathSign(range[1] - range[0])) {
+          sameDirectionCoord = after;
+          var curInRange = cur + range[1] - range[0];
+          diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2);
+          diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2);
+        } else {
+          sameDirectionCoord = before;
+          var afterInRange = after + range[1] - range[0];
+          diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2);
+          diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2);
+        }
+        var sameInterval = [Math.min(cur, (sameDirectionCoord + cur) / 2), Math.max(cur, (sameDirectionCoord + cur) / 2)];
+        if (coordinate > sameInterval[0] && coordinate <= sameInterval[1] || coordinate >= diffInterval[0] && coordinate <= diffInterval[1]) {
+          var _unsortedTicks$i2;
+          return (_unsortedTicks$i2 = unsortedTicks[i]) === null || _unsortedTicks$i2 === void 0 ? void 0 : _unsortedTicks$i2.index;
+        }
+      } else {
+        var minValue = Math.min(before, after);
+        var maxValue = Math.max(before, after);
+        if (coordinate > (minValue + cur) / 2 && coordinate <= (maxValue + cur) / 2) {
+          var _unsortedTicks$i3;
+          return (_unsortedTicks$i3 = unsortedTicks[i]) === null || _unsortedTicks$i3 === void 0 ? void 0 : _unsortedTicks$i3.index;
+        }
+      }
+    }
+  } else if (ticks) {
+    // ticks are distributed in a single direction
+    for (var _i = 0; _i < len; _i++) {
+      var curr = ticks[_i];
+      if (curr == null) {
+        continue;
+      }
+      var next = ticks[_i + 1];
+      var prev = ticks[_i - 1];
+      if (_i === 0 && next != null && coordinate <= (curr.coordinate + next.coordinate) / 2) {
+        return curr.index;
+      }
+      if (_i === len - 1 && prev != null && coordinate > (curr.coordinate + prev.coordinate) / 2) {
+        return curr.index;
+      }
+      if (_i > 0 && _i < len - 1 && prev != null && next != null && coordinate > (curr.coordinate + prev.coordinate) / 2 && coordinate <= (curr.coordinate + next.coordinate) / 2) {
+        return curr.index;
+      }
+    }
+  }
+  return -1;
+};
Index: node_modules/recharts/es6/util/getAxisTypeBasedOnLayout.js
===================================================================
--- node_modules/recharts/es6/util/getAxisTypeBasedOnLayout.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/getAxisTypeBasedOnLayout.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,15 @@
+import { isCategoricalAxis } from './ChartUtils';
+
+/**
+ * This function evaluates the "auto" axis domain type based on the chart layout and axis type.
+ * It outputs a definitive axis domain type that can be used for further processing.
+ */
+export function getAxisTypeBasedOnLayout(layout, axisType, axisDomainType) {
+  if (axisDomainType !== 'auto') {
+    return axisDomainType;
+  }
+  if (layout == null) {
+    return undefined;
+  }
+  return isCategoricalAxis(layout, axisType) ? 'category' : 'number';
+}
Index: node_modules/recharts/es6/util/getChartPointer.js
===================================================================
--- node_modules/recharts/es6/util/getChartPointer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/getChartPointer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,32 @@
+/**
+ * Computes the chart coordinates from the mouse event.
+ *
+ * The coordinates are relative to the top-left corner of the chart,
+ * where the top-left corner of the chart is (0, 0).
+ * Moving right, the x-coordinate increases, and moving down, the y-coordinate increases.
+ *
+ * The coordinates are rounded to the nearest integer and are including a CSS transform scale.
+ * So a chart that's scaled will return the same coordinates as a chart that's not scaled.
+ *
+ * @param event The mouse event from React event handlers
+ * @return chartPointer The chart coordinates relative to the top-left corner of the chart
+ */
+export var getChartPointer = event => {
+  var rect = event.currentTarget.getBoundingClientRect();
+  var scaleX = rect.width / event.currentTarget.offsetWidth;
+  var scaleY = rect.height / event.currentTarget.offsetHeight;
+  return {
+    /*
+     * Here it's important to use:
+     * - event.clientX and event.clientY to get the mouse position relative to the viewport, including scroll.
+     * - pageX and pageY are not used because they are relative to the whole document, and ignore scroll.
+     * - rect.left and rect.top are used to get the position of the chart relative to the viewport.
+     * - offsetX and offsetY are not used because they are relative to the offset parent
+     *  which may or may not be the same as the clientX and clientY, depending on the position of the chart in the DOM
+     *  and surrounding element styles. CSS position: relative, absolute, fixed, will change the offset parent.
+     * - scaleX and scaleY are necessary for when the chart element is scaled using CSS `transform: scale(N)`.
+     */
+    chartX: Math.round((event.clientX - rect.left) / scaleX),
+    chartY: Math.round((event.clientY - rect.top) / scaleY)
+  };
+};
Index: node_modules/recharts/es6/util/getClassNameFromUnknown.js
===================================================================
--- node_modules/recharts/es6/util/getClassNameFromUnknown.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/getClassNameFromUnknown.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,6 @@
+export function getClassNameFromUnknown(u) {
+  if (u && typeof u === 'object' && 'className' in u && typeof u.className === 'string') {
+    return u.className;
+  }
+  return '';
+}
Index: node_modules/recharts/es6/util/getEveryNth.js
===================================================================
--- node_modules/recharts/es6/util/getEveryNth.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/getEveryNth.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,27 @@
+/**
+ * Given an array and a number N, return a new array which contains every nTh
+ * element of the input array. For n below 1, an empty array is returned.
+ * For n equal to 1, the input array is returned as is.
+ * For n greater than the length of the array, an array containing the first element
+ * and every nTh element after that (if any) is returned.
+ *
+ * @param array An input array.
+ * @param n A number specifying which elements to take.
+ * @returns The result array of the same type as the input array.
+ */
+export function getEveryNth(array, n) {
+  if (n < 1) {
+    return [];
+  }
+  if (n === 1) {
+    return array;
+  }
+  var result = [];
+  for (var i = 0; i < array.length; i += n) {
+    var item = array[i];
+    if (item !== undefined) {
+      result.push(item);
+    }
+  }
+  return result;
+}
Index: node_modules/recharts/es6/util/getRadiusAndStrokeWidthFromDot.js
===================================================================
--- node_modules/recharts/es6/util/getRadiusAndStrokeWidthFromDot.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/getRadiusAndStrokeWidthFromDot.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,28 @@
+import { svgPropertiesNoEventsFromUnknown } from './svgPropertiesNoEvents';
+export function getRadiusAndStrokeWidthFromDot(dot) {
+  var props = svgPropertiesNoEventsFromUnknown(dot);
+  var defaultR = 3;
+  var defaultStrokeWidth = 2;
+  if (props != null) {
+    var {
+      r,
+      strokeWidth
+    } = props;
+    var realR = Number(r);
+    var realStrokeWidth = Number(strokeWidth);
+    if (Number.isNaN(realR) || realR < 0) {
+      realR = defaultR;
+    }
+    if (Number.isNaN(realStrokeWidth) || realStrokeWidth < 0) {
+      realStrokeWidth = defaultStrokeWidth;
+    }
+    return {
+      r: realR,
+      strokeWidth: realStrokeWidth
+    };
+  }
+  return {
+    r: defaultR,
+    strokeWidth: defaultStrokeWidth
+  };
+}
Index: node_modules/recharts/es6/util/getSliced.js
===================================================================
--- node_modules/recharts/es6/util/getSliced.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/getSliced.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,9 @@
+export function getSliced(arr, startIndex, endIndex) {
+  if (!Array.isArray(arr)) {
+    return arr;
+  }
+  if (arr && startIndex + endIndex !== 0) {
+    return arr.slice(startIndex, endIndex + 1);
+  }
+  return arr;
+}
Index: node_modules/recharts/es6/util/isDomainSpecifiedByUser.js
===================================================================
--- node_modules/recharts/es6/util/isDomainSpecifiedByUser.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/isDomainSpecifiedByUser.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,177 @@
+import { MAX_VALUE_REG, MIN_VALUE_REG } from './ChartUtils';
+import { isNumber } from './DataUtils';
+import { isWellBehavedNumber } from './isWellBehavedNumber';
+export function isWellFormedNumberDomain(v) {
+  if (Array.isArray(v) && v.length === 2) {
+    var [min, max] = v;
+    if (isWellBehavedNumber(min) && isWellBehavedNumber(max)) {
+      return true;
+    }
+  }
+  return false;
+}
+export function extendDomain(providedDomain, boundaryDomain, allowDataOverflow) {
+  if (allowDataOverflow) {
+    // If the data are allowed to overflow - we're fine with whatever user provided
+    return providedDomain;
+  }
+  /*
+   * If the data are not allowed to overflow - we need to extend the domain.
+   * Means that effectively the user is allowed to make the domain larger
+   * but not smaller.
+   */
+  return [Math.min(providedDomain[0], boundaryDomain[0]), Math.max(providedDomain[1], boundaryDomain[1])];
+}
+
+/**
+ * So Recharts allows users to provide their own domains,
+ * but it also places some expectations on what the domain is.
+ * We can improve on the typescript typing, but we also need a runtime test
+ to observe that the user-provided domain is well-formed,
+ * that is: an array with exactly two numbers.
+ *
+ * This function does not accept data as an argument.
+ * This is to enable a performance optimization - if the domain is there,
+ * and we know what it is without traversing all the data,
+ * then we don't have to traverse all the data!
+ *
+ * If the user-provided domain is not well-formed,
+ * this function will return undefined - in which case we should traverse the data to calculate the real domain.
+ *
+ * This function is for parsing the numerical domain only.
+ *
+ * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.
+ * @param allowDataOverflow boolean, provided by users. If true then the data domain wins
+ *
+ * @return [min, max] domain if it's well-formed; undefined if the domain is invalid
+ */
+export function numericalDomainSpecifiedWithoutRequiringData(userDomain, allowDataOverflow) {
+  if (!allowDataOverflow) {
+    // Cannot compute data overflow if the data is not provided
+    return undefined;
+  }
+  if (typeof userDomain === 'function') {
+    // The user function expects the data to be provided as an argument
+    return undefined;
+  }
+  if (Array.isArray(userDomain) && userDomain.length === 2) {
+    var [providedMin, providedMax] = userDomain;
+    var finalMin, finalMax;
+    if (isWellBehavedNumber(providedMin)) {
+      finalMin = providedMin;
+    } else if (typeof providedMin === 'function') {
+      // The user function expects the data to be provided as an argument
+      return undefined;
+    }
+    if (isWellBehavedNumber(providedMax)) {
+      finalMax = providedMax;
+    } else if (typeof providedMax === 'function') {
+      // The user function expects the data to be provided as an argument
+      return undefined;
+    }
+    var candidate = [finalMin, finalMax];
+    if (isWellFormedNumberDomain(candidate)) {
+      return candidate;
+    }
+  }
+  return undefined;
+}
+
+/**
+ * So Recharts allows users to provide their own domains,
+ * but it also places some expectations on what the domain is.
+ * We can improve on the typescript typing, but we also need a runtime test
+ * to observe that the user-provided domain is well-formed,
+ * that is: an array with exactly two numbers.
+ * If the user-provided domain is not well-formed,
+ * this function will return undefined - in which case we should traverse the data to calculate the real domain.
+ *
+ * This function is for parsing the numerical domain only.
+ *
+ * You are probably thinking, why does domain need tick count?
+ * Well it adjusts the domain based on where the "nice ticks" land, and nice ticks depend on the tick count.
+ *
+ * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.
+ * @param dataDomain calculated from data. Can be undefined, as an option for performance optimization
+ * @param allowDataOverflow provided by users. If true then the data domain wins
+ *
+ * @return [min, max] domain if it's well-formed; undefined if the domain is invalid
+ */
+export function parseNumericalUserDomain(userDomain, dataDomain, allowDataOverflow) {
+  if (!allowDataOverflow && dataDomain == null) {
+    // Cannot compute data overflow if the data is not provided
+    return undefined;
+  }
+  if (typeof userDomain === 'function' && dataDomain != null) {
+    try {
+      var result = userDomain(dataDomain, allowDataOverflow);
+      if (isWellFormedNumberDomain(result)) {
+        return extendDomain(result, dataDomain, allowDataOverflow);
+      }
+    } catch (_unused) {
+      /* ignore the exception and compute domain from data later */
+    }
+  }
+  if (Array.isArray(userDomain) && userDomain.length === 2) {
+    var [providedMin, providedMax] = userDomain;
+    var finalMin, finalMax;
+    if (providedMin === 'auto') {
+      if (dataDomain != null) {
+        finalMin = Math.min(...dataDomain);
+      }
+    } else if (isNumber(providedMin)) {
+      finalMin = providedMin;
+    } else if (typeof providedMin === 'function') {
+      try {
+        if (dataDomain != null) {
+          finalMin = providedMin(dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[0]);
+        }
+      } catch (_unused2) {
+        /* ignore the exception and compute domain from data later */
+      }
+    } else if (typeof providedMin === 'string' && MIN_VALUE_REG.test(providedMin)) {
+      var match = MIN_VALUE_REG.exec(providedMin);
+      if (match == null || match[1] == null || dataDomain == null) {
+        finalMin = undefined;
+      } else {
+        var value = +match[1];
+        finalMin = dataDomain[0] - value;
+      }
+    } else {
+      finalMin = dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[0];
+    }
+    if (providedMax === 'auto') {
+      if (dataDomain != null) {
+        finalMax = Math.max(...dataDomain);
+      }
+    } else if (isNumber(providedMax)) {
+      finalMax = providedMax;
+    } else if (typeof providedMax === 'function') {
+      try {
+        if (dataDomain != null) {
+          finalMax = providedMax(dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[1]);
+        }
+      } catch (_unused3) {
+        /* ignore the exception and compute domain from data later */
+      }
+    } else if (typeof providedMax === 'string' && MAX_VALUE_REG.test(providedMax)) {
+      var _match = MAX_VALUE_REG.exec(providedMax);
+      if (_match == null || _match[1] == null || dataDomain == null) {
+        finalMax = undefined;
+      } else {
+        var _value = +_match[1];
+        finalMax = dataDomain[1] + _value;
+      }
+    } else {
+      finalMax = dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[1];
+    }
+    var candidate = [finalMin, finalMax];
+    if (isWellFormedNumberDomain(candidate)) {
+      if (dataDomain == null) {
+        return candidate;
+      }
+      return extendDomain(candidate, dataDomain, allowDataOverflow);
+    }
+  }
+  return undefined;
+}
Index: node_modules/recharts/es6/util/isWellBehavedNumber.js
===================================================================
--- node_modules/recharts/es6/util/isWellBehavedNumber.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/isWellBehavedNumber.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,6 @@
+export function isWellBehavedNumber(n) {
+  return Number.isFinite(n);
+}
+export function isPositiveNumber(n) {
+  return typeof n === 'number' && n > 0 && Number.isFinite(n);
+}
Index: node_modules/recharts/es6/util/payload/getUniqPayload.js
===================================================================
--- node_modules/recharts/es6/util/payload/getUniqPayload.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/payload/getUniqPayload.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,19 @@
+import uniqBy from 'es-toolkit/compat/uniqBy';
+
+/**
+ * This is configuration option that decides how to filter for unique values only:
+ *
+ * - `false` means "no filter"
+ * - `true` means "use recharts default filter"
+ * - function means "use return of this function as the default key"
+ */
+
+export function getUniqPayload(payload, option, defaultUniqBy) {
+  if (option === true) {
+    return uniqBy(payload, defaultUniqBy);
+  }
+  if (typeof option === 'function') {
+    return uniqBy(payload, option);
+  }
+  return payload;
+}
Index: node_modules/recharts/es6/util/propsAreEqual.js
===================================================================
--- node_modules/recharts/es6/util/propsAreEqual.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/propsAreEqual.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,72 @@
+import { shallowEqual } from 'react-redux';
+var propsToShallowCompare = new Set(['axisLine', 'tickLine', 'activeBar', 'activeDot', 'activeLabel', 'activeShape', 'allowEscapeViewBox', 'background', 'cursor', 'dot', 'label', 'line', 'margin', 'padding', 'position', 'shape', 'style', 'tick', 'wrapperStyle',
+// radius can be an array of 4 numbers, easy to compare shallowly
+'radius']);
+
+/**
+ * When comparing two values, returns true if they are the same value or
+ * are both NaN.
+ *
+ * If we used just a simple triple equals, we would get false negatives for two NaNs
+ * which could cause extra re-renders so let's have this instead.
+ *
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Equality_comparisons_and_sameness#same-value-zero_equality
+ *
+ * @param x first value to compare
+ * @param y second value to compare
+ * return true if the same, false if different
+ */
+function sameValueZero(x, y) {
+  if (x == null && y == null) {
+    /*
+     * treat null and undefined as equal. Internally in Recharts we make no difference between these two
+     * so there is no need to re-render.
+     */
+    return true;
+  }
+  if (typeof x === 'number' && typeof y === 'number') {
+    // x and y are equal (this is true for -0 and 0) or they are both NaN
+    // eslint-disable-next-line no-self-compare
+    return x === y || x !== x && y !== y;
+  }
+  return x === y;
+}
+
+/**
+ * So usually React would compare only the first level of props using Object.is.
+ * However, in our case many props are objects or arrays, and our own docs recommend to do that!
+ * Therefore, we need a custom comparison function that does a shallow comparison of each prop value.
+ *
+ * Because charts can and do receive large props (typically the data array),
+ * we only limit this to a subset of known props that are likely to be objects/arrays.
+ *
+ * @param prevProps
+ * @param nextProps
+ */
+export function propsAreEqual(prevProps, nextProps) {
+  var allKeys = new Set([...Object.keys(prevProps), ...Object.keys(nextProps)]);
+  for (var key of allKeys) {
+    /*
+     * If a key is on a special allowlist, go one level deeper
+     * and do a shallow comparison of the values.
+     */
+    if (propsToShallowCompare.has(key)) {
+      if (prevProps[key] == null && nextProps[key] == null) {
+        /*
+         * treat null and undefined as equal. Internally in Recharts we make no difference between these two
+         * so there is no need to re-render.
+         */
+        continue;
+      }
+      if (!shallowEqual(prevProps[key], nextProps[key])) {
+        return false;
+      }
+      /*
+       * Otherwise do a simple same-value comparison (with NaN support).
+       */
+    } else if (!sameValueZero(prevProps[key], nextProps[key])) {
+      return false;
+    }
+  }
+  return true;
+}
Index: node_modules/recharts/es6/util/resolveDefaultProps.js
===================================================================
--- node_modules/recharts/es6/util/resolveDefaultProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/resolveDefaultProps.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,85 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * This function mimics the behavior of the `defaultProps` static property in React.
+ * Functional components do not have a defaultProps property, so this function is useful to resolve default props.
+ *
+ * The common recommendation is to use ES6 destructuring with default values in the function signature,
+ * but you need to be careful there and make sure you destructure all the individual properties
+ * and not the whole object. See the test file for example.
+ *
+ * And because destructuring all properties one by one is a faff, and it's easy to miss one property,
+ * this function exists.
+ *
+ * @param realProps - the props object passed to the component by the user
+ * @param defaultProps - the default props object defined in the component by Recharts
+ * @returns - the props object with all the default props resolved. All `undefined` values are replaced with the default value.
+ */
+export function resolveDefaultProps(realProps, defaultProps) {
+  /*
+   * To avoid mutating the original `realProps` object passed to the function, create a shallow copy of it.
+   * `resolvedProps` will be modified directly with the defaults.
+   */
+  var resolvedProps = _objectSpread({}, realProps);
+  /*
+   * Since the function guarantees `D extends Partial<T>`, this assignment is safe.
+   * It allows TypeScript to work with the well-defined `Partial<T>` type inside the loop,
+   * making subsequent type inference (especially for `dp[key]`) much more straightforward for the compiler.
+   * This is a key step to improve type safety *without* value assertions later.
+   */
+  var dp = defaultProps;
+  /*
+   * `Object.keys` doesn't preserve strong key types - it always returns Array<string>.
+   * However, due to the `D extends Partial<T>` constraint,
+   * we know these keys *must* also be valid keys of `T`.
+   * This assertion informs TypeScript of this relationship, avoiding type errors when using `key` to index `acc` (type T).
+   *
+   * Type assertions are not sound but in this case it's necessary
+   * as `Object.keys` does not do what we want it to do.
+   */
+  var keys = Object.keys(defaultProps);
+  var withDefaults = keys.reduce((acc, key) => {
+    if (acc[key] === undefined && dp[key] !== undefined) {
+      acc[key] = dp[key];
+    }
+    return acc;
+  }, resolvedProps);
+  /*
+   * And again type assertions are not safe but here we have done the runtime work
+   * so let's bypass the lack of static type safety and tell the compiler what happened.
+   */
+  return withDefaults;
+}
+
+/**
+ * Helper type to extract the keys of T that are required.
+ * It iterates through each key K in T. If Pick<T, K> cannot be assigned an empty object {},
+ * it means K is required, so we keep K; otherwise, we discard it (never).
+ * [keyof T] at the end creates a union of the kept keys.
+ */
+
+/**
+ * Helper type to extract the keys of T that are optional.
+ * It iterates through each key K in T. If Pick<T, K> can be assigned an empty object {},
+ * it means K is optional (or potentially missing), so we keep K; otherwise, we discard it (never).
+ * [keyof T] at the end creates a union of the kept keys.
+ */
+
+/**
+ * Helper type to ensure keys of D exist in T.
+ * For each key K in D, if K is also a key of T, keep the type D[K].
+ * If K is NOT a key of T, map it to type `never`.
+ * An object cannot have a property of type `never`, effectively disallowing extra keys.
+ */
+
+/**
+ * This type will take a source type `Props` and a default type `Defaults` and will return a new type
+ * where all properties that are optional in `Props` but required in `Defaults` are made required in the result.
+ * Properties that are required in `Props` and optional in `Defaults` will remain required.
+ * Properties that are optional in both `Props` and `Defaults` will remain optional.
+ *
+ * This is useful for creating a type that represents the resolved props of a component with default props.
+ */
Index: node_modules/recharts/es6/util/round.js
===================================================================
--- node_modules/recharts/es6/util/round.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/round.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,32 @@
+// if you go lower than 3, wild wild things happen during rendering
+var defaultRoundPrecision = 4;
+export function round(num) {
+  var roundPrecision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultRoundPrecision;
+  var factor = 10 ** roundPrecision;
+  var rounded = Math.round(num * factor) / factor;
+  if (Object.is(rounded, -0)) {
+    return 0;
+  }
+  return rounded;
+}
+
+/**
+ * This function will accept a string template literal and for each
+ * variable placeholder, it will round the value to avoid long float numbers in
+ * the SVG path which might cause rendering issues in some browsers.
+ */
+export function roundTemplateLiteral(strings) {
+  for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+    values[_key - 1] = arguments[_key];
+  }
+  return strings.reduce((result, string, i) => {
+    var value = values[i - 1];
+    if (typeof value === 'string') {
+      return result + value + string;
+    }
+    if (value !== undefined) {
+      return result + round(value) + string;
+    }
+    return result + string;
+  }, '');
+}
Index: node_modules/recharts/es6/util/scale/CartesianScaleHelper.js
===================================================================
--- node_modules/recharts/es6/util/scale/CartesianScaleHelper.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/scale/CartesianScaleHelper.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,66 @@
+/**
+ * Groups X and Y scale functions together and provides helper methods.
+ */
+export class CartesianScaleHelperImpl {
+  constructor(_ref) {
+    var {
+      x,
+      y
+    } = _ref;
+    this.xAxisScale = x;
+    this.yAxisScale = y;
+  }
+  map(value, _ref2) {
+    var _this$xAxisScale$map, _this$yAxisScale$map;
+    var {
+      position
+    } = _ref2;
+    return {
+      x: (_this$xAxisScale$map = this.xAxisScale.map(value.x, {
+        position
+      })) !== null && _this$xAxisScale$map !== void 0 ? _this$xAxisScale$map : 0,
+      y: (_this$yAxisScale$map = this.yAxisScale.map(value.y, {
+        position
+      })) !== null && _this$yAxisScale$map !== void 0 ? _this$yAxisScale$map : 0
+    };
+  }
+  mapWithFallback(value, _ref3) {
+    var _this$xAxisScale$map2, _this$yAxisScale$map2;
+    var {
+      position,
+      fallback
+    } = _ref3;
+    var fallbackY, fallbackX;
+    if (fallback === 'rangeMin') {
+      fallbackY = this.yAxisScale.rangeMin();
+    } else if (fallback === 'rangeMax') {
+      fallbackY = this.yAxisScale.rangeMax();
+    } else {
+      fallbackY = 0;
+    }
+    if (fallback === 'rangeMin') {
+      fallbackX = this.xAxisScale.rangeMin();
+    } else if (fallback === 'rangeMax') {
+      fallbackX = this.xAxisScale.rangeMax();
+    } else {
+      fallbackX = 0;
+    }
+    return {
+      x: (_this$xAxisScale$map2 = this.xAxisScale.map(value.x, {
+        position
+      })) !== null && _this$xAxisScale$map2 !== void 0 ? _this$xAxisScale$map2 : fallbackX,
+      y: (_this$yAxisScale$map2 = this.yAxisScale.map(value.y, {
+        position
+      })) !== null && _this$yAxisScale$map2 !== void 0 ? _this$yAxisScale$map2 : fallbackY
+    };
+  }
+  isInRange(_ref4) {
+    var {
+      x,
+      y
+    } = _ref4;
+    var xInRange = x == null || this.xAxisScale.isInRange(x);
+    var yInRange = y == null || this.yAxisScale.isInRange(y);
+    return xInRange && yInRange;
+  }
+}
Index: node_modules/recharts/es6/util/scale/CustomScaleDefinition.js
===================================================================
--- node_modules/recharts/es6/util/scale/CustomScaleDefinition.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/scale/CustomScaleDefinition.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/util/scale/RechartsScale.js
===================================================================
--- node_modules/recharts/es6/util/scale/RechartsScale.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/scale/RechartsScale.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,100 @@
+import * as d3Scales from 'victory-vendor/d3-scale';
+import { upperFirst } from '../DataUtils';
+
+/**
+ * This is internal representation of scale used in Recharts.
+ * Users will provide CustomScaleDefinition or a string, which we will parse into RechartsScale.
+ * Most importantly, RechartsScale is fully immutable - there are no setters that mutate the scale in place.
+ * This is important for React integration - if the scale changes, we want to trigger re-renders.
+ * Mutating the scale in place would not trigger re-renders, leading to stale UI.
+ */
+
+/**
+ * Position within a band for banded scales.
+ * In scales that are not banded, this parameter is ignored.
+ *
+ * @inline
+ */
+
+function getD3ScaleFromType(realScaleType) {
+  if (realScaleType in d3Scales) {
+    // @ts-expect-error we should do better type verification here
+    return d3Scales[realScaleType]();
+  }
+  var name = "scale".concat(upperFirst(realScaleType));
+  if (name in d3Scales) {
+    // @ts-expect-error we should do better type verification here
+    return d3Scales[name]();
+  }
+  return undefined;
+}
+export function d3ScaleToRechartsScale(d3Scale) {
+  var ticksFn = d3Scale.ticks;
+  var bandwidthFn = d3Scale.bandwidth;
+  var d3Range = d3Scale.range();
+  var range = [Math.min(...d3Range), Math.max(...d3Range)];
+  return {
+    domain: () => d3Scale.domain(),
+    range: function (_range) {
+      function range() {
+        return _range.apply(this, arguments);
+      }
+      range.toString = function () {
+        return _range.toString();
+      };
+      return range;
+    }(() => range),
+    rangeMin: () => range[0],
+    rangeMax: () => range[1],
+    isInRange(value) {
+      var first = range[0];
+      var last = range[1];
+      return first <= last ? value >= first && value <= last : value >= last && value <= first;
+    },
+    bandwidth: bandwidthFn ? () => bandwidthFn.call(d3Scale) : undefined,
+    ticks: ticksFn ? count => ticksFn.call(d3Scale, count) : undefined,
+    map: (input, options) => {
+      var baseValue = d3Scale(input);
+      if (baseValue == null) {
+        return undefined;
+      }
+      if (d3Scale.bandwidth && options !== null && options !== void 0 && options.position) {
+        var bandWidth = d3Scale.bandwidth();
+        switch (options.position) {
+          case 'middle':
+            baseValue += bandWidth / 2;
+            break;
+          case 'end':
+            baseValue += bandWidth;
+            break;
+          default:
+            // 'start' requires no adjustment
+            break;
+        }
+      }
+      return baseValue;
+    }
+  };
+}
+
+/**
+ * Converts external scale definition into internal RechartsScale definition.
+ * @param scale custom function scale - if you have the string, use `combineRealScaleType` first
+ * @param axisDomain
+ * @param axisRange
+ */
+
+export function rechartsScaleFactory(scale, axisDomain, axisRange) {
+  if (typeof scale === 'function') {
+    return d3ScaleToRechartsScale(scale.copy().domain(axisDomain).range(axisRange));
+  }
+  if (scale == null) {
+    return undefined;
+  }
+  var d3ScaleFunction = getD3ScaleFromType(scale);
+  if (d3ScaleFunction == null) {
+    return undefined;
+  }
+  d3ScaleFunction.domain(axisDomain).range(axisRange);
+  return d3ScaleToRechartsScale(d3ScaleFunction);
+}
Index: node_modules/recharts/es6/util/scale/getNiceTickValues.js
===================================================================
--- node_modules/recharts/es6/util/scale/getNiceTickValues.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/scale/getNiceTickValues.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,208 @@
+/**
+ * @fileOverview calculate tick values of scale
+ * @author xile611, arcthur
+ * @date 2015-09-17
+ */
+import Decimal from 'decimal.js-light';
+import { getDigitCount, rangeStep } from './util/arithmetic';
+/**
+ * Calculate a interval of a minimum value and a maximum value
+ *
+ * @param  {Number} min       The minimum value
+ * @param  {Number} max       The maximum value
+ * @return {Array} An interval
+ */
+export var getValidInterval = _ref => {
+  var [min, max] = _ref;
+  var [validMin, validMax] = [min, max];
+
+  // exchange
+  if (min > max) {
+    [validMin, validMax] = [max, min];
+  }
+  return [validMin, validMax];
+};
+
+/**
+ * Calculate the step which is easy to understand between ticks, like 10, 20, 25
+ *
+ * @param  roughStep        The rough step calculated by dividing the difference by the tickCount
+ * @param  allowDecimals    Allow the ticks to be decimals or not
+ * @param  correctionFactor A correction factor
+ * @return The step which is easy to understand between two ticks
+ */
+export var getFormatStep = (roughStep, allowDecimals, correctionFactor) => {
+  if (roughStep.lte(0)) {
+    return new Decimal(0);
+  }
+  var digitCount = getDigitCount(roughStep.toNumber());
+  // The ratio between the rough step and the smallest number which has a bigger
+  // order of magnitudes than the rough step
+  var digitCountValue = new Decimal(10).pow(digitCount);
+  var stepRatio = roughStep.div(digitCountValue);
+  // When an integer and a float multiplied, the accuracy of result may be wrong
+  var stepRatioScale = digitCount !== 1 ? 0.05 : 0.1;
+  var amendStepRatio = new Decimal(Math.ceil(stepRatio.div(stepRatioScale).toNumber())).add(correctionFactor).mul(stepRatioScale);
+  var formatStep = amendStepRatio.mul(digitCountValue);
+  return allowDecimals ? new Decimal(formatStep.toNumber()) : new Decimal(Math.ceil(formatStep.toNumber()));
+};
+
+/**
+ * calculate the ticks when the minimum value equals to the maximum value
+ *
+ * @param  value         The minimum value which is also the maximum value
+ * @param  tickCount     The count of ticks
+ * @param  allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+export var getTickOfSingleValue = (value, tickCount, allowDecimals) => {
+  var step = new Decimal(1);
+  // calculate the middle value of ticks
+  var middle = new Decimal(value);
+  if (!middle.isint() && allowDecimals) {
+    var absVal = Math.abs(value);
+    if (absVal < 1) {
+      // The step should be a float number when the difference is smaller than 1
+      step = new Decimal(10).pow(getDigitCount(value) - 1);
+      middle = new Decimal(Math.floor(middle.div(step).toNumber())).mul(step);
+    } else if (absVal > 1) {
+      // Return the maximum integer which is smaller than 'value' when 'value' is greater than 1
+      middle = new Decimal(Math.floor(value));
+    }
+  } else if (value === 0) {
+    middle = new Decimal(Math.floor((tickCount - 1) / 2));
+  } else if (!allowDecimals) {
+    middle = new Decimal(Math.floor(value));
+  }
+  var middleIndex = Math.floor((tickCount - 1) / 2);
+  var ticks = [];
+  for (var i = 0; i < tickCount; i++) {
+    ticks.push(middle.add(new Decimal(i - middleIndex).mul(step)).toNumber());
+  }
+  return ticks;
+};
+
+/**
+ * Calculate the step
+ *
+ * @param  min              The minimum value of an interval
+ * @param  max              The maximum value of an interval
+ * @param  tickCount        The count of ticks
+ * @param  allowDecimals    Allow the ticks to be decimals or not
+ * @param  correctionFactor A correction factor
+ * @return The step, minimum value of ticks, maximum value of ticks
+ */
+var _calculateStep = function calculateStep(min, max, tickCount, allowDecimals) {
+  var correctionFactor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
+  // dirty hack (for recharts' test)
+  if (!Number.isFinite((max - min) / (tickCount - 1))) {
+    return {
+      step: new Decimal(0),
+      tickMin: new Decimal(0),
+      tickMax: new Decimal(0)
+    };
+  }
+
+  // The step which is easy to understand between two ticks
+  var step = getFormatStep(new Decimal(max).sub(min).div(tickCount - 1), allowDecimals, correctionFactor);
+
+  // A medial value of ticks
+  var middle;
+
+  // When 0 is inside the interval, 0 should be a tick
+  if (min <= 0 && max >= 0) {
+    middle = new Decimal(0);
+  } else {
+    // calculate the middle value
+    middle = new Decimal(min).add(max).div(2);
+    // minus modulo value
+    middle = middle.sub(new Decimal(middle).mod(step));
+  }
+  var belowCount = Math.ceil(middle.sub(min).div(step).toNumber());
+  var upCount = Math.ceil(new Decimal(max).sub(middle).div(step).toNumber());
+  var scaleCount = belowCount + upCount + 1;
+  if (scaleCount > tickCount) {
+    // When more ticks need to cover the interval, step should be bigger.
+    return _calculateStep(min, max, tickCount, allowDecimals, correctionFactor + 1);
+  }
+  if (scaleCount < tickCount) {
+    // When less ticks can cover the interval, we should add some additional ticks
+    upCount = max > 0 ? upCount + (tickCount - scaleCount) : upCount;
+    belowCount = max > 0 ? belowCount : belowCount + (tickCount - scaleCount);
+  }
+  return {
+    step,
+    tickMin: middle.sub(new Decimal(belowCount).mul(step)),
+    tickMax: middle.add(new Decimal(upCount).mul(step))
+  };
+};
+
+/**
+ * Calculate the ticks of an interval. Ticks can appear outside the interval
+ * if it makes them more rounded and nice.
+ *
+ * @param tuple of [min,max] min: The minimum value, max: The maximum value
+ * @param tickCount     The count of ticks
+ * @param allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+export { _calculateStep as calculateStep };
+export var getNiceTickValues = function getNiceTickValues(_ref2) {
+  var [min, max] = _ref2;
+  var tickCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;
+  var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  // More than two ticks should be return
+  var count = Math.max(tickCount, 2);
+  var [cormin, cormax] = getValidInterval([min, max]);
+  if (cormin === -Infinity || cormax === Infinity) {
+    var _values = cormax === Infinity ? [cormin, ...Array(tickCount - 1).fill(Infinity)] : [...Array(tickCount - 1).fill(-Infinity), cormax];
+    return min > max ? _values.reverse() : _values;
+  }
+  if (cormin === cormax) {
+    return getTickOfSingleValue(cormin, tickCount, allowDecimals);
+  }
+
+  // Get the step between two ticks
+  var {
+    step,
+    tickMin,
+    tickMax
+  } = _calculateStep(cormin, cormax, count, allowDecimals, 0);
+  var values = rangeStep(tickMin, tickMax.add(new Decimal(0.1).mul(step)), step);
+  return min > max ? values.reverse() : values;
+};
+
+/**
+ * Calculate the ticks of an interval.
+ * Ticks will be constrained to the interval [min, max] even if it makes them less rounded and nice.
+ *
+ * @param tuple of [min,max] min: The minimum value, max: The maximum value
+ * @param tickCount     The count of ticks. This function may return less than tickCount ticks if the interval is too small.
+ * @param allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+export var getTickValuesFixedDomain = function getTickValuesFixedDomain(_ref3, tickCount) {
+  var [min, max] = _ref3;
+  var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  // More than two ticks should be return
+  var [cormin, cormax] = getValidInterval([min, max]);
+  if (cormin === -Infinity || cormax === Infinity) {
+    return [min, max];
+  }
+  if (cormin === cormax) {
+    return [cormin];
+  }
+  var count = Math.max(tickCount, 2);
+  var step = getFormatStep(new Decimal(cormax).sub(cormin).div(count - 1), allowDecimals, 0);
+  var values = [...rangeStep(new Decimal(cormin), new Decimal(cormax), step), cormax];
+  if (allowDecimals === false) {
+    /*
+     * allowDecimals is false means that we want to have integer ticks.
+     * The step is guaranteed to be an integer in the code above which is great start
+     * but when the first step is not an integer, it will start stepping from a decimal value anyway.
+     * So we need to round all the values to integers after the fact.
+     */
+    values = values.map(value => Math.round(value));
+  }
+  return min > max ? values.reverse() : values;
+};
Index: node_modules/recharts/es6/util/scale/index.js
===================================================================
--- node_modules/recharts/es6/util/scale/index.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/scale/index.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export { getNiceTickValues, getTickValuesFixedDomain } from './getNiceTickValues';
Index: node_modules/recharts/es6/util/scale/util/arithmetic.js
===================================================================
--- node_modules/recharts/es6/util/scale/util/arithmetic.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/scale/util/arithmetic.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,49 @@
+/**
+ * @fileOverview Some common arithmetic methods
+ * @author xile611
+ * @date 2015-09-17
+ */
+import Decimal from 'decimal.js-light';
+
+/**
+ * Get the digit count of a number.
+ * If the absolute value is in the interval [0.1, 1), the result is 0.
+ * If the absolute value is in the interval [0.01, 0.1), the digit count is -1.
+ * If the absolute value is in the interval [0.001, 0.01), the digit count is -2.
+ *
+ * @param  {Number} value The number
+ * @return {Integer}      Digit count
+ */
+function getDigitCount(value) {
+  var result;
+  if (value === 0) {
+    result = 1;
+  } else {
+    result = Math.floor(new Decimal(value).abs().log(10).toNumber()) + 1;
+  }
+  return result;
+}
+
+/**
+ * Get the data in the interval [start, end) with a fixed step.
+ * Also handles JS calculation precision issues.
+ *
+ * @param  {Decimal} start Start point
+ * @param  {Decimal} end   End point, not included
+ * @param  {Decimal} step  Step size
+ * @return {Array}         Array of numbers
+ */
+function rangeStep(start, end, step) {
+  var num = new Decimal(start);
+  var i = 0;
+  var result = [];
+
+  // magic number to prevent infinite loop
+  while (num.lt(end) && i < 100000) {
+    result.push(num.toNumber());
+    num = num.add(step);
+    i++;
+  }
+  return result;
+}
+export { rangeStep, getDigitCount };
Index: node_modules/recharts/es6/util/stacks/getStackSeriesIdentifier.js
===================================================================
--- node_modules/recharts/es6/util/stacks/getStackSeriesIdentifier.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/stacks/getStackSeriesIdentifier.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,8 @@
+/**
+ * Returns identifier for stack series which is one individual graphical item in the stack.
+ * @param graphicalItem - The graphical item representing the series in the stack.
+ * @return The identifier for the series in the stack
+ */
+export function getStackSeriesIdentifier(graphicalItem) {
+  return graphicalItem === null || graphicalItem === void 0 ? void 0 : graphicalItem.id;
+}
Index: node_modules/recharts/es6/util/stacks/stackTypes.js
===================================================================
--- node_modules/recharts/es6/util/stacks/stackTypes.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/stacks/stackTypes.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/util/svgPropertiesAndEvents.js
===================================================================
--- node_modules/recharts/es6/util/svgPropertiesAndEvents.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/svgPropertiesAndEvents.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,50 @@
+import { isValidElement } from 'react';
+import { isEventKey } from './excludeEventProps';
+import { isDataAttribute, isSvgElementPropKey } from './svgPropertiesNoEvents';
+/**
+ * Filters an object to only include SVG properties, data attributes, and event handlers.
+ * @param obj - The object to filter.
+ * @returns A new object containing only valid SVG properties, data attributes, and event handlers.
+ */
+export function svgPropertiesAndEvents(obj) {
+  var result = {};
+  // for ... in loop is 10x faster than Object.entries + filter + Object.fromEntries in Chrome
+
+  for (var key in obj) {
+    if (Object.prototype.hasOwnProperty.call(obj, key)) {
+      if (isSvgElementPropKey(key) || isDataAttribute(key) || isEventKey(key)) {
+        result[key] = obj[key];
+      }
+    }
+  }
+  return result;
+}
+
+/**
+ * Function to filter SVG properties from various input types.
+ * The input types can be:
+ * - A record of string keys to any values, in which case it returns a record of only SVG properties
+ * - A React element, in which case it returns the props of the element filtered to only SVG properties
+ * - Anything else, in which case it returns null
+ *
+ * This function has a wide-open return type, because it will read and filter the props of an arbitrary React element.
+ * This can be SVG, HTML, whatnot, with arbitrary values, so we can't type it more specifically.
+ *
+ * If you wish to have a type-safe version, use svgPropertiesNoEvents directly with a typed object.
+ *
+ * @param input - The input to filter, which can be a record, a React element, or other types.
+ * @returns A record of SVG properties if the input is a record or React element, otherwise null.
+ */
+export function svgPropertiesAndEventsFromUnknown(input) {
+  if (input == null) {
+    return null;
+  }
+  if (/*#__PURE__*/isValidElement(input)) {
+    // @ts-expect-error we can't type this better because input can be any React element
+    return svgPropertiesAndEvents(input.props);
+  }
+  if (typeof input === 'object' && !Array.isArray(input)) {
+    return svgPropertiesAndEvents(input);
+  }
+  return null;
+}
Index: node_modules/recharts/es6/util/svgPropertiesNoEvents.js
===================================================================
--- node_modules/recharts/es6/util/svgPropertiesNoEvents.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/svgPropertiesNoEvents.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,74 @@
+import { isValidElement } from 'react';
+var SVGElementPropKeys = ['aria-activedescendant', 'aria-atomic', 'aria-autocomplete', 'aria-busy', 'aria-checked', 'aria-colcount', 'aria-colindex', 'aria-colspan', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-errormessage', 'aria-expanded', 'aria-flowto', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-level', 'aria-live', 'aria-modal', 'aria-multiline', 'aria-multiselectable', 'aria-orientation', 'aria-owns', 'aria-placeholder', 'aria-posinset', 'aria-pressed', 'aria-readonly', 'aria-relevant', 'aria-required', 'aria-roledescription', 'aria-rowcount', 'aria-rowindex', 'aria-rowspan', 'aria-selected', 'aria-setsize', 'aria-sort', 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-valuetext', 'className', 'color', 'height', 'id', 'lang', 'max', 'media', 'method', 'min', 'name', 'style',
+/*
+ * removed 'type' SVGElementPropKey because we do not currently use any SVG elements
+ * that can use it, and it conflicts with the recharts prop 'type'
+ * https://github.com/recharts/recharts/pull/3327
+ * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/type
+ */
+// 'type',
+'target', 'width', 'role', 'tabIndex', 'accentHeight', 'accumulate', 'additive', 'alignmentBaseline', 'allowReorder', 'alphabetic', 'amplitude', 'arabicForm', 'ascent', 'attributeName', 'attributeType', 'autoReverse', 'azimuth', 'baseFrequency', 'baselineShift', 'baseProfile', 'bbox', 'begin', 'bias', 'by', 'calcMode', 'capHeight', 'clip', 'clipPath', 'clipPathUnits', 'clipRule', 'colorInterpolation', 'colorInterpolationFilters', 'colorProfile', 'colorRendering', 'contentScriptType', 'contentStyleType', 'cursor', 'cx', 'cy', 'd', 'decelerate', 'descent', 'diffuseConstant', 'direction', 'display', 'divisor', 'dominantBaseline', 'dur', 'dx', 'dy', 'edgeMode', 'elevation', 'enableBackground', 'end', 'exponent', 'externalResourcesRequired', 'fill', 'fillOpacity', 'fillRule', 'filter', 'filterRes', 'filterUnits', 'floodColor', 'floodOpacity', 'focusable', 'fontFamily', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontWeight', 'format', 'from', 'fx', 'fy', 'g1', 'g2', 'glyphName', 'glyphOrientationHorizontal', 'glyphOrientationVertical', 'glyphRef', 'gradientTransform', 'gradientUnits', 'hanging', 'horizAdvX', 'horizOriginX', 'href', 'ideographic', 'imageRendering', 'in2', 'in', 'intercept', 'k1', 'k2', 'k3', 'k4', 'k', 'kernelMatrix', 'kernelUnitLength', 'kerning', 'keyPoints', 'keySplines', 'keyTimes', 'lengthAdjust', 'letterSpacing', 'lightingColor', 'limitingConeAngle', 'local', 'markerEnd', 'markerHeight', 'markerMid', 'markerStart', 'markerUnits', 'markerWidth', 'mask', 'maskContentUnits', 'maskUnits', 'mathematical', 'mode', 'numOctaves', 'offset', 'opacity', 'operator', 'order', 'orient', 'orientation', 'origin', 'overflow', 'overlinePosition', 'overlineThickness', 'paintOrder', 'panose1', 'pathLength', 'patternContentUnits', 'patternTransform', 'patternUnits', 'pointerEvents', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'preserveAlpha', 'preserveAspectRatio', 'primitiveUnits', 'r', 'radius', 'refX', 'refY', 'renderingIntent', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'result', 'rotate', 'rx', 'ry', 'seed', 'shapeRendering', 'slope', 'spacing', 'specularConstant', 'specularExponent', 'speed', 'spreadMethod', 'startOffset', 'stdDeviation', 'stemh', 'stemv', 'stitchTiles', 'stopColor', 'stopOpacity', 'strikethroughPosition', 'strikethroughThickness', 'string', 'stroke', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'surfaceScale', 'systemLanguage', 'tableValues', 'targetX', 'targetY', 'textAnchor', 'textDecoration', 'textLength', 'textRendering', 'to', 'transform', 'u1', 'u2', 'underlinePosition', 'underlineThickness', 'unicode', 'unicodeBidi', 'unicodeRange', 'unitsPerEm', 'vAlphabetic', 'values', 'vectorEffect', 'version', 'vertAdvY', 'vertOriginX', 'vertOriginY', 'vHanging', 'vIdeographic', 'viewTarget', 'visibility', 'vMathematical', 'widths', 'wordSpacing', 'writingMode', 'x1', 'x2', 'x', 'xChannelSelector', 'xHeight', 'xlinkActuate', 'xlinkArcrole', 'xlinkHref', 'xlinkRole', 'xlinkShow', 'xlinkTitle', 'xlinkType', 'xmlBase', 'xmlLang', 'xmlns', 'xmlnsXlink', 'xmlSpace', 'y1', 'y2', 'y', 'yChannelSelector', 'z', 'zoomAndPan', 'ref', 'key', 'angle'];
+var SVGElementPropKeySet = new Set(SVGElementPropKeys);
+export function isSvgElementPropKey(key) {
+  if (typeof key !== 'string') {
+    return false;
+  }
+  return SVGElementPropKeySet.has(key);
+}
+/**
+ * Checks if the property is a data attribute.
+ * @param key The property key.
+ * @returns True if the key starts with 'data-', false otherwise.
+ */
+export function isDataAttribute(key) {
+  return typeof key === 'string' && key.startsWith('data-');
+}
+
+/**
+ * Filters an object to only include SVG properties. Removes all event handlers too.
+ * @param obj - The object to filter
+ * @returns A new object containing only valid SVG properties, excluding event handlers.
+ */
+export function svgPropertiesNoEvents(obj) {
+  if (typeof obj !== 'object' || obj === null) {
+    return {};
+  }
+  var result = {};
+  for (var key in obj) {
+    if (Object.prototype.hasOwnProperty.call(obj, key)) {
+      if (isSvgElementPropKey(key) || isDataAttribute(key)) {
+        result[key] = obj[key];
+      }
+    }
+  }
+  return result;
+}
+
+/**
+ * Function to filter SVG properties from various input types.
+ * The input types can be:
+ * - A record of string keys to any values, in which case it returns a record of only SVG properties
+ * - A React element, in which case it returns the props of the element filtered to only SVG properties
+ * - Anything else, in which case it returns null
+ *
+ * This function has a wide-open return type, because it will read and filter the props of an arbitrary React element.
+ * This can be SVG, HTML, whatnot, with arbitrary values, so we can't type it more specifically.
+ *
+ * If you wish to have a type-safe version, use svgPropertiesNoEvents directly with a typed object.
+ *
+ * @param input - The input to filter, which can be a record, a React element, or other types.
+ * @returns A record of SVG properties if the input is a record or React element, otherwise null.
+ */
+export function svgPropertiesNoEventsFromUnknown(input) {
+  if (input == null) {
+    return null;
+  }
+  if (/*#__PURE__*/isValidElement(input) && typeof input.props === 'object' && input.props !== null) {
+    var p = input.props;
+    return svgPropertiesNoEvents(p);
+  }
+  if (typeof input === 'object' && !Array.isArray(input)) {
+    return svgPropertiesNoEvents(input);
+  }
+  return null;
+}
Index: node_modules/recharts/es6/util/tooltip/translate.js
===================================================================
--- node_modules/recharts/es6/util/tooltip/translate.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/tooltip/translate.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,124 @@
+import { clsx } from 'clsx';
+import { isNumber } from '../DataUtils';
+var CSS_CLASS_PREFIX = 'recharts-tooltip-wrapper';
+var TOOLTIP_HIDDEN = {
+  visibility: 'hidden'
+};
+export function getTooltipCSSClassName(_ref) {
+  var {
+    coordinate,
+    translateX,
+    translateY
+  } = _ref;
+  return clsx(CSS_CLASS_PREFIX, {
+    ["".concat(CSS_CLASS_PREFIX, "-right")]: isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX >= coordinate.x,
+    ["".concat(CSS_CLASS_PREFIX, "-left")]: isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX < coordinate.x,
+    ["".concat(CSS_CLASS_PREFIX, "-bottom")]: isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY >= coordinate.y,
+    ["".concat(CSS_CLASS_PREFIX, "-top")]: isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY < coordinate.y
+  });
+}
+export function getTooltipTranslateXY(_ref2) {
+  var {
+    allowEscapeViewBox,
+    coordinate,
+    key,
+    offset,
+    position,
+    reverseDirection,
+    tooltipDimension,
+    viewBox,
+    viewBoxDimension
+  } = _ref2;
+  if (position && isNumber(position[key])) {
+    return position[key];
+  }
+  var negative = coordinate[key] - tooltipDimension - (offset > 0 ? offset : 0);
+  var positive = coordinate[key] + offset;
+  if (allowEscapeViewBox[key]) {
+    return reverseDirection[key] ? negative : positive;
+  }
+  var viewBoxKey = viewBox[key];
+  if (viewBoxKey == null) {
+    return 0;
+  }
+  if (reverseDirection[key]) {
+    var _tooltipBoundary = negative;
+    var _viewBoxBoundary = viewBoxKey;
+    if (_tooltipBoundary < _viewBoxBoundary) {
+      return Math.max(positive, viewBoxKey);
+    }
+    return Math.max(negative, viewBoxKey);
+  }
+  if (viewBoxDimension == null) {
+    return 0;
+  }
+  var tooltipBoundary = positive + tooltipDimension;
+  var viewBoxBoundary = viewBoxKey + viewBoxDimension;
+  if (tooltipBoundary > viewBoxBoundary) {
+    return Math.max(negative, viewBoxKey);
+  }
+  return Math.max(positive, viewBoxKey);
+}
+export function getTransformStyle(_ref3) {
+  var {
+    translateX,
+    translateY,
+    useTranslate3d
+  } = _ref3;
+  return {
+    transform: useTranslate3d ? "translate3d(".concat(translateX, "px, ").concat(translateY, "px, 0)") : "translate(".concat(translateX, "px, ").concat(translateY, "px)")
+  };
+}
+export function getTooltipTranslate(_ref4) {
+  var {
+    allowEscapeViewBox,
+    coordinate,
+    offsetTop,
+    offsetLeft,
+    position,
+    reverseDirection,
+    tooltipBox,
+    useTranslate3d,
+    viewBox
+  } = _ref4;
+  var cssProperties, translateX, translateY;
+  if (tooltipBox.height > 0 && tooltipBox.width > 0 && coordinate) {
+    translateX = getTooltipTranslateXY({
+      allowEscapeViewBox,
+      coordinate,
+      key: 'x',
+      offset: offsetLeft,
+      position,
+      reverseDirection,
+      tooltipDimension: tooltipBox.width,
+      viewBox,
+      viewBoxDimension: viewBox.width
+    });
+    translateY = getTooltipTranslateXY({
+      allowEscapeViewBox,
+      coordinate,
+      key: 'y',
+      offset: offsetTop,
+      position,
+      reverseDirection,
+      tooltipDimension: tooltipBox.height,
+      viewBox,
+      viewBoxDimension: viewBox.height
+    });
+    cssProperties = getTransformStyle({
+      translateX,
+      translateY,
+      useTranslate3d
+    });
+  } else {
+    cssProperties = TOOLTIP_HIDDEN;
+  }
+  return {
+    cssProperties,
+    cssClasses: getTooltipCSSClassName({
+      translateX,
+      translateY,
+      coordinate
+    })
+  };
+}
Index: node_modules/recharts/es6/util/types.js
===================================================================
--- node_modules/recharts/es6/util/types.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/types.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,247 @@
+import { isValidElement } from 'react';
+import { isEventKey } from './excludeEventProps';
+
+/**
+ * Determines how values are stacked:
+ *
+ * - `none` is the default, it adds values on top of each other. No smarts. Negative values will overlap.
+ * - `expand` make it so that the values always add up to 1 - so the chart will look like a rectangle.
+ * - `wiggle` and `silhouette` tries to keep the chart centered.
+ * - `sign` stacks positive values above zero and negative values below zero. Similar to `none` but handles negatives.
+ * - `positive` ignores all negative values, and then behaves like \`none\`.
+ *
+ * @see {@link https://d3js.org/d3-shape/stack#stack-offsets}
+ * (note that the `diverging` offset in d3 is named `sign` in recharts)
+ *
+ * @inline
+ */
+
+/**
+ * @deprecated use either `CartesianLayout` or `PolarLayout` instead.
+ * Mixing both charts families leads to ambiguity in the type system.
+ * These two layouts share very few properties, so it is best to keep them separate.
+ */
+
+/**
+ * The type of axis.
+ *
+ * `category`: Treats data as distinct values.
+ * Each value is in the same distance from its neighbors, regardless of their actual numeric difference.
+ *
+ * `number`: Treats data as continuous range.
+ * Values that are numerically closer are placed closer together on the axis.
+ *
+ * `auto`: the type is inferred based on the chart layout.
+ *
+ * This is external type - users will provide this type in props.
+ * Internally we will evaluate it to either 'category' or 'number' based on the layout,
+ * before sending it to the store.
+ *
+ * @inline
+ */
+
+/**
+ * Individual axes are responsible for resolving the 'auto' type to either 'number' or 'category',
+ * based on the chart layout and axis kind. Then they can start using this type.
+ */
+
+/**
+ * Extracts values from data objects.
+ *
+ * @inline
+ */
+
+/**
+ * @inline
+ */
+
+/**
+ * @inline
+ */
+
+/**
+ * @deprecated do not use: too many properties, mixing too many concepts, cartesian and polar together, everything optional.
+ * Instead, use either `Coordinate` or `PolarCoordinate`.
+ */
+
+export var isPolarCoordinate = c => {
+  return 'radius' in c && 'startAngle' in c && 'endAngle' in c;
+};
+
+/**
+ * String shortcuts for scale types.
+ * In case none of these does what you want you can also provide your own scale function
+ * @see {@link CustomScaleDefinition}
+ */
+
+//
+// Event Handler Types -- Copied from @types/react/index.d.ts and adapted for Props.
+//
+
+/**
+ * The type of easing function to use for animations
+ *
+ * @inline
+ */
+
+/** Specifies the duration of animation, the unit of this option is ms. */
+
+/**
+ * This object defines the offset of the chart area and width and height and brush and ... it's a bit too much information all in one.
+ * We use it internally but let's not expose it to the outside world.
+ * If you are looking for this information, instead import `ChartOffset` or `PlotArea` from `recharts`.
+ */
+
+/**
+ * The domain of axis.
+ * This is the definition
+ *
+ * Numeric domain is always defined by an array of exactly two values, for the min and the max of the axis.
+ * Categorical domain is defined as array of all possible values.
+ *
+ * Can be specified in many ways:
+ * - array of numbers
+ * - with special strings like 'dataMin' and 'dataMax'
+ * - with special string math like 'dataMin - 100'
+ * - with keyword 'auto'
+ * - or a function
+ * - array of functions
+ * - or a combination of the above
+ */
+
+/**
+ * NumberDomain is an evaluated {@link AxisDomain}.
+ * Unlike {@link AxisDomain}, it has no variety - it's a tuple of two number.
+ * This is after all the keywords and functions were evaluated and what is left is [min, max].
+ *
+ * Know that the min, max values are not guaranteed to be nice numbers - values like -Infinity or NaN are possible.
+ *
+ * There are also `category` axes that have different things than numbers in their domain.
+ */
+
+/**
+ * Props shared in all renderable axes - meaning the ones that are drawn on the chart,
+ * can have ticks, axis line, etc.
+ */
+
+/** Defines how ticks are placed and whether / how tick collisions are handled.
+ * 'preserveStart' keeps the left tick on collision and ensures that the first tick is always shown.
+ * 'preserveEnd' keeps the right tick on collision and ensures that the last tick is always shown.
+ * 'preserveStartEnd' keeps the left tick on collision and ensures that the first and last ticks always show.
+ * 'equidistantPreserveStart' selects a number N such that every nTh tick will be shown without collision.
+ * 'equidistantPreserveEnd' selects a number N such that every nTh tick will be shown, ensuring the last tick is always visible.
+ */
+
+/**
+ * Ticks can be any type when the axis is the type of category.
+ *
+ * Ticks must be numbers when the axis is the type of number.
+ */
+
+/**
+ * @inline
+ */
+
+/**
+ * @inline
+ */
+
+export var adaptEventHandlers = (props, newHandler) => {
+  if (!props || typeof props === 'function' || typeof props === 'boolean') {
+    return null;
+  }
+  var inputProps = props;
+  if (/*#__PURE__*/isValidElement(props)) {
+    inputProps = props.props;
+  }
+  if (typeof inputProps !== 'object' && typeof inputProps !== 'function') {
+    return null;
+  }
+  var out = {};
+  Object.keys(inputProps).forEach(key => {
+    if (isEventKey(key)) {
+      out[key] = newHandler || (e => inputProps[key](inputProps, e));
+    }
+  });
+  return out;
+};
+var getEventHandlerOfChild = (originalHandler, data, index) => e => {
+  originalHandler(data, index, e);
+  return null;
+};
+export var adaptEventsOfChild = (props, data, index) => {
+  if (props === null || typeof props !== 'object' && typeof props !== 'function') {
+    return null;
+  }
+  var out = null;
+  Object.keys(props).forEach(key => {
+    var item = props[key];
+    if (isEventKey(key) && typeof item === 'function') {
+      if (!out) out = {};
+      out[key] = getEventHandlerOfChild(item, data, index);
+    }
+  });
+  return out;
+};
+
+/**
+ * 'axis' means that all graphical items belonging to this axis tick will be highlighted,
+ * and all will be present in the tooltip.
+ * Tooltip with 'axis' will display when hovering on the chart background.
+ *
+ * 'item' means only the one graphical item being hovered will show in the tooltip.
+ * Tooltip with 'item' will display when hovering over individual graphical items.
+ *
+ * This is calculated internally;
+ * charts have a `defaultTooltipEventType` and `validateTooltipEventTypes` options.
+ *
+ * Users then use <Tooltip shared={true} /> or <Tooltip shared={false} /> to control their preference,
+ * and charts will then see what is allowed and what is not.
+ */
+
+/**
+ * These are the props we are going to pass to an `activeDot` or `dot` if it is a function or a custom Component
+ */
+
+/**
+ * This is the type of `activeDot` prop on:
+ * - Area
+ * - Line
+ * - Radar
+ *
+ * @inline
+ */
+
+/**
+ * Inside the dot event handlers we provide extra information about the dot point
+ * that the Dot component itself does not need but users might find useful.
+ */
+
+/**
+ * This is the type of `dot` prop on:
+ * - Area
+ * - Line
+ * - Radar
+ *
+ * @inline
+ */
+
+/**
+ * Simplified version of the MouseEvent so that we don't have to mock the whole thing in tests.
+ *
+ * This is meant to represent the React.MouseEvent
+ * which is a wrapper on top of https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent
+ */
+
+/**
+ * Coordinates relative to the top-left corner of the chart.
+ * Also include scale which means that a chart that's scaled will return the same coordinates as a chart that's not scaled.
+ */
+
+/**
+ * Props shared with all charts.
+ */
+
+export var isNonEmptyArray = arr => {
+  return Array.isArray(arr) && arr.length > 0;
+};
Index: node_modules/recharts/es6/util/useAnimationId.js
===================================================================
--- node_modules/recharts/es6/util/useAnimationId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/useAnimationId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,27 @@
+import { useRef } from 'react';
+import { uniqueId } from './DataUtils';
+
+/**
+ * This hook returns a unique animation id for the object input.
+ * If input changes (as in, reference equality is different), the animation id will change.
+ * If input does not change, the animation id will not change.
+ *
+ * This is useful for animations. The Animate component
+ * does have a `shouldReAnimate` prop but that doesn't seem to be doing what the name implies.
+ * Also, we don't always want to re-animate on every render;
+ * we only want to re-animate when the input changes. Not the internal state (e.g. `isAnimating`).
+ *
+ * @param input The object to check for changes. Uses reference equality (=== operator)
+ * @param prefix Optional prefix to use for the animation id
+ * @returns A unique animation id
+ */
+export function useAnimationId(input) {
+  var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'animation-';
+  var animationId = useRef(uniqueId(prefix));
+  var prevProps = useRef(input);
+  if (prevProps.current !== input) {
+    animationId.current = uniqueId(prefix);
+    prevProps.current = input;
+  }
+  return animationId.current;
+}
Index: node_modules/recharts/es6/util/useElementOffset.js
===================================================================
--- node_modules/recharts/es6/util/useElementOffset.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/useElementOffset.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,47 @@
+import { useCallback, useState } from 'react';
+var EPS = 1;
+
+/**
+ * TODO this documentation does not reflect what this hook is doing, update it.
+ * Stores the `offsetHeight`, `offsetLeft`, `offsetTop`, and `offsetWidth` of a DOM element.
+ */
+
+/**
+ * Use this to listen to element layout changes.
+ *
+ * Very useful for reading actual sizes of DOM elements relative to the viewport.
+ *
+ * @param extraDependencies use this to trigger new DOM dimensions read when any of these change. Good for things like payload and label, that will re-render something down in the children array, but you want to read the layout box of a parent.
+ * @returns [lastElementOffset, updateElementOffset] most recent value, and setter. Pass the setter to a DOM element ref like this: `<div ref={updateElementOffset}>`
+ */
+export function useElementOffset() {
+  var extraDependencies = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+  var [lastBoundingBox, setLastBoundingBox] = useState({
+    height: 0,
+    left: 0,
+    top: 0,
+    width: 0
+  });
+  var updateBoundingBox = useCallback(node => {
+    if (node != null) {
+      var rect = node.getBoundingClientRect();
+      var box = {
+        height: rect.height,
+        left: rect.left,
+        top: rect.top,
+        width: rect.width
+      };
+      if (Math.abs(box.height - lastBoundingBox.height) > EPS || Math.abs(box.left - lastBoundingBox.left) > EPS || Math.abs(box.top - lastBoundingBox.top) > EPS || Math.abs(box.width - lastBoundingBox.width) > EPS) {
+        setLastBoundingBox({
+          height: box.height,
+          left: box.left,
+          top: box.top,
+          width: box.width
+        });
+      }
+    }
+  },
+  // eslint-disable-next-line react-hooks/exhaustive-deps
+  [lastBoundingBox.width, lastBoundingBox.height, lastBoundingBox.top, lastBoundingBox.left, ...extraDependencies]);
+  return [lastBoundingBox, updateBoundingBox];
+}
Index: node_modules/recharts/es6/util/useId.js
===================================================================
--- node_modules/recharts/es6/util/useId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/useId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,20 @@
+var _ref;
+import * as React from 'react';
+import { uniqueId } from './DataUtils';
+
+/**
+ * Fallback for React.useId() for versions prior to React 18.
+ * Generates a unique ID using a simple counter and a prefix.
+ *
+ * @returns A unique ID that remains consistent across renders.
+ */
+export var useIdFallback = () => {
+  var [id] = React.useState(() => uniqueId('uid-'));
+  return id;
+};
+
+/*
+ * This weird syntax is used to avoid a build-time error in React 17 and earlier when building with Webpack.
+ * See https://github.com/webpack/webpack/issues/14814
+ */
+export var useId = (_ref = React['useId'.toString()]) !== null && _ref !== void 0 ? _ref : useIdFallback;
Index: node_modules/recharts/es6/util/useReportScale.js
===================================================================
--- node_modules/recharts/es6/util/useReportScale.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/useReportScale.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,21 @@
+import { useEffect, useState } from 'react';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectContainerScale } from '../state/selectors/containerSelectors';
+import { setScale } from '../state/layoutSlice';
+import { isWellBehavedNumber } from './isWellBehavedNumber';
+export function useReportScale() {
+  var dispatch = useAppDispatch();
+  var [ref, setRef] = useState(null);
+  var scale = useAppSelector(selectContainerScale);
+  useEffect(() => {
+    if (ref == null) {
+      return;
+    }
+    var rect = ref.getBoundingClientRect();
+    var newScale = rect.width / ref.offsetWidth;
+    if (isWellBehavedNumber(newScale) && newScale !== scale) {
+      dispatch(setScale(newScale));
+    }
+  }, [ref, dispatch, scale]);
+  return setRef;
+}
Index: node_modules/recharts/es6/util/useUniqueId.js
===================================================================
--- node_modules/recharts/es6/util/useUniqueId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/util/useUniqueId.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,32 @@
+import { useId } from './useId';
+
+/**
+ * A hook that generates a unique ID. It uses React.useId() in React 18+ for SSR safety
+ * and falls back to a client-side-only unique ID generator for older versions.
+ *
+ * The ID will stay the same across renders, and you can optionally provide a prefix.
+ *
+ * @param [prefix] - An optional prefix for the generated ID.
+ * @param [customId] - An optional custom ID to override the generated one.
+ * @returns The unique ID.
+ */
+export function useUniqueId(prefix, customId) {
+  /*
+   * We have to call this hook here even if we don't use the result because
+   * rules of hooks demand that hooks are never called conditionally.
+   */
+  var generatedId = useId();
+
+  // If a custom ID is provided, it always takes precedence.
+  if (customId) {
+    return customId;
+  }
+
+  // Apply the prefix if one was provided.
+  return prefix ? "".concat(prefix, "-").concat(generatedId) : generatedId;
+}
+
+/**
+ * The useUniqueId hook returns a unique ID that is either reused from external props or generated internally.
+ * Either way the ID is now guaranteed to be present so no more nulls or undefined.
+ */
Index: node_modules/recharts/es6/zIndex/DefaultZIndexes.js
===================================================================
--- node_modules/recharts/es6/zIndex/DefaultZIndexes.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/zIndex/DefaultZIndexes.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,73 @@
+/**
+ * A collection of all default zIndex values used by Recharts.
+ *
+ * You can reuse these, or you can define your own.
+ */
+export var DefaultZIndexes = {
+  /**
+   * CartesianGrid and PolarGrid
+   */
+  grid: -100,
+  /**
+   * Background of Bar and RadialBar.
+   * This is not visible by default but can be enabled by setting background={true} on Bar or RadialBar.
+   */
+  barBackground: -50,
+  /*
+   * other chart elements or custom elements without specific zIndex
+   * render in here, at zIndex 0
+   */
+
+  /**
+   * Area, Pie, Radar, and ReferenceArea
+   */
+  area: 100,
+  /**
+   * Cursor is embedded inside Tooltip and controlled by it.
+   * The Tooltip itself has a separate portal and is not included in the zIndex system;
+   * Cursor is the decoration inside the chart area. CursorRectangle is a rectangle box.
+   * It renders below bar so that in a stacked bar chart the cursor rectangle does not hide the other bars.
+   */
+  cursorRectangle: 200,
+  /**
+   * Bar and RadialBar
+   */
+  bar: 300,
+  /**
+   * Line and ReferenceLine, and ErrorBor
+   */
+  line: 400,
+  /**
+   * XAxis and YAxis and PolarAngleAxis and PolarRadiusAxis ticks and lines and children
+   */
+  axis: 500,
+  /**
+   * Scatter and ReferenceDot,
+   * and Dots of Line and Area and Radar if they have dot=true
+   */
+  scatter: 600,
+  /**
+   * Hovering over a Bar or RadialBar renders a highlight rectangle
+   */
+  activeBar: 1000,
+  /**
+   * Cursor is embedded inside Tooltip and controlled by it.
+   * The Tooltip itself has a separate portal and is not included in the zIndex system;
+   * Cursor is the decoration inside the chart area, usually a cross or a box.
+   * CursorLine is a line cursor rendered in Line, Area, Scatter, Radar charts.
+   * It renders above the Line and Scatter so that it is always visible.
+   * It renders below active dot so that the dot is always visible and shows the current point.
+   * We're also assuming that the active dot is small enough that it does not fully cover the cursor line.
+   *
+   * This also applies to the radial cursor in RadialBarChart.
+   */
+  cursorLine: 1100,
+  /**
+   * Hovering over a Point in Line, Area, Scatter, Radar renders a highlight dot
+   */
+  activeDot: 1200,
+  /**
+   * LabelList and Label, including Axis labels
+   */
+  label: 2000
+};
Index: node_modules/recharts/es6/zIndex/ZIndexLayer.js
===================================================================
--- node_modules/recharts/es6/zIndex/ZIndexLayer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/zIndex/ZIndexLayer.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,79 @@
+import { useLayoutEffect } from 'react';
+import { createPortal } from 'react-dom';
+import { noop } from '../util/DataUtils';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectZIndexPortalElement } from './zIndexSelectors';
+import { registerZIndexPortal, unregisterZIndexPortal } from '../state/zIndexSlice';
+import { useIsInChartContext } from '../context/chartLayoutContext';
+import { useIsPanorama } from '../context/PanoramaContext';
+
+/**
+ * @since 3.4
+ */
+
+/**
+ * A layer that renders its children into a portal corresponding to the given zIndex.
+ * We can't use regular CSS `z-index` because SVG does not support it.
+ * So instead, we create separate DOM nodes for each zIndex layer
+ * and render the children into the corresponding DOM node using React portals.
+ *
+ * This component must be used inside a Chart component.
+ *
+ * @param zIndex numeric zIndex value, higher values are rendered on top of lower values
+ * @param children the content to render inside this zIndex layer
+ *
+ * @since 3.4
+ */
+export function ZIndexLayer(_ref) {
+  var {
+    zIndex,
+    children
+  } = _ref;
+  /*
+   * If we are outside of chart, then we can't rely on the zIndex portal state,
+   * so we just render normally.
+   */
+  var isInChartContext = useIsInChartContext();
+  /*
+   * If zIndex is undefined then we render normally without portals.
+   * Also, if zIndex is 0, we render normally without portals,
+   * because 0 is the default layer that does not need a portal.
+   */
+  var shouldRenderInPortal = isInChartContext && zIndex !== undefined && zIndex !== 0;
+  var isPanorama = useIsPanorama();
+  var dispatch = useAppDispatch();
+  useLayoutEffect(() => {
+    if (!shouldRenderInPortal) {
+      // Nothing to do. We have to call the hook because of the rules of hooks.
+      return noop;
+    }
+    /*
+     * Because zIndexes are dynamic (meaning, we're not working with a predefined set of layers,
+     * but we allow users to define any zIndex at any time), we need to register
+     * the requested zIndex in the global store. This way, the ZIndexPortals component
+     * can render the corresponding portals and only the requested ones.
+     */
+    dispatch(registerZIndexPortal({
+      zIndex
+    }));
+    return () => {
+      dispatch(unregisterZIndexPortal({
+        zIndex
+      }));
+    };
+  }, [dispatch, zIndex, shouldRenderInPortal]);
+  var portalElement = useAppSelector(state => selectZIndexPortalElement(state, zIndex, isPanorama));
+  if (!shouldRenderInPortal) {
+    // If no zIndex is provided or zIndex is 0, render normally without portals
+    return children;
+  }
+  if (!portalElement) {
+    /*
+     * If we don't have a portal element yet, this means that the registration
+     * has not been processed yet by the ZIndexPortals component.
+     * So here we render null and wait for the next render cycle.
+     */
+    return null;
+  }
+  return /*#__PURE__*/createPortal(children, portalElement);
+}
Index: node_modules/recharts/es6/zIndex/ZIndexPortal.js
===================================================================
--- node_modules/recharts/es6/zIndex/ZIndexPortal.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/zIndex/ZIndexPortal.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,55 @@
+import * as React from 'react';
+import { useLayoutEffect, useRef } from 'react';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { registerZIndexPortalElement, unregisterZIndexPortalElement } from '../state/zIndexSlice';
+import { selectAllRegisteredZIndexes } from './zIndexSelectors';
+function ZIndexSvgPortal(_ref) {
+  var {
+    zIndex,
+    isPanorama
+  } = _ref;
+  var ref = useRef(null);
+  var dispatch = useAppDispatch();
+  useLayoutEffect(() => {
+    if (ref.current) {
+      dispatch(registerZIndexPortalElement({
+        zIndex,
+        element: ref.current,
+        isPanorama
+      }));
+    }
+    return () => {
+      dispatch(unregisterZIndexPortalElement({
+        zIndex,
+        isPanorama
+      }));
+    };
+  }, [dispatch, zIndex, isPanorama]);
+  // these g elements should not be tabbable
+  return /*#__PURE__*/React.createElement("g", {
+    tabIndex: -1,
+    ref: ref
+  });
+}
+export function AllZIndexPortals(_ref2) {
+  var {
+    children,
+    isPanorama
+  } = _ref2;
+  var allRegisteredZIndexes = useAppSelector(selectAllRegisteredZIndexes);
+  if (!allRegisteredZIndexes || allRegisteredZIndexes.length === 0) {
+    return children;
+  }
+  var allNegativeZIndexes = allRegisteredZIndexes.filter(zIndex => zIndex < 0);
+  // We exclude zero on purpose - that is the default layer, and it doesn't need a portal.
+  var allPositiveZIndexes = allRegisteredZIndexes.filter(zIndex => zIndex > 0);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, allNegativeZIndexes.map(zIndex => /*#__PURE__*/React.createElement(ZIndexSvgPortal, {
+    key: zIndex,
+    zIndex: zIndex,
+    isPanorama: isPanorama
+  })), children, allPositiveZIndexes.map(zIndex => /*#__PURE__*/React.createElement(ZIndexSvgPortal, {
+    key: zIndex,
+    zIndex: zIndex,
+    isPanorama: isPanorama
+  })));
+}
Index: node_modules/recharts/es6/zIndex/getZIndexFromUnknown.js
===================================================================
--- node_modules/recharts/es6/zIndex/getZIndexFromUnknown.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/zIndex/getZIndexFromUnknown.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,7 @@
+import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
+export function getZIndexFromUnknown(input, defaultZIndex) {
+  if (input && typeof input === 'object' && 'zIndex' in input && typeof input.zIndex === 'number' && isWellBehavedNumber(input.zIndex)) {
+    return input.zIndex;
+  }
+  return defaultZIndex;
+}
Index: node_modules/recharts/es6/zIndex/zIndexSelectors.js
===================================================================
--- node_modules/recharts/es6/zIndex/zIndexSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
+++ node_modules/recharts/es6/zIndex/zIndexSelectors.js	(revision a762898ecd37a452c782821d4c2c4955c6ed2521)
@@ -0,0 +1,32 @@
+import { createSelector } from 'reselect';
+import { arrayContentsAreEqualCheck } from '../state/selectors/arrayEqualityCheck';
+import { DefaultZIndexes } from './DefaultZIndexes';
+
+/**
+ * Given a zIndex, returns the corresponding portal element reference.
+ * If no zIndex is provided or if the zIndex is not registered, returns undefined.
+ *
+ * It also returns undefined in case the z-index portal has not been rendered yet.
+ */
+export var selectZIndexPortalElement = createSelector(state => state.zIndex.zIndexMap, (_, zIndex) => zIndex, (_, _zIndex, isPanorama) => isPanorama, (zIndexMap, zIndex, isPanorama) => {
+  if (zIndex == null) {
+    return undefined;
+  }
+  var entry = zIndexMap[zIndex];
+  if (entry == null) {
+    return undefined;
+  }
+  if (isPanorama) {
+    return entry.panoramaElement;
+  }
+  return entry.element;
+});
+export var selectAllRegisteredZIndexes = createSelector(state => state.zIndex.zIndexMap, zIndexMap => {
+  var allNumbers = Object.keys(zIndexMap).map(zIndexStr => parseInt(zIndexStr, 10)).concat(Object.values(DefaultZIndexes));
+  var uniqueNumbers = Array.from(new Set(allNumbers));
+  return uniqueNumbers.sort((a, b) => a - b);
+}, {
+  memoizeOptions: {
+    resultEqualityCheck: arrayContentsAreEqualCheck
+  }
+});
