{"version":3,"file":"index-BmlSMAOJ.cjs","sources":["../node_modules/recharts/es6/state/selectors/areaSelectors.js","../node_modules/recharts/es6/cartesian/Area.js","../node_modules/recharts/es6/chart/AreaChart.js","../src/app/pages/SystemMetricsExplorerPage/index.jsx"],"sourcesContent":["import { createSelector } from 'reselect';\nimport { computeArea } from '../../cartesian/Area';\nimport { selectAxisWithScale, selectStackGroups, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems } from './axisSelectors';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';\nimport { getBandSizeOfAxis, getNormalizedStackId, isCategoricalAxis } from '../../util/ChartUtils';\nvar selectXAxisWithScale = (state, xAxisId, _yAxisId, isPanorama) => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);\nvar selectXAxisTicks = (state, xAxisId, _yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);\nvar selectYAxisWithScale = (state, _xAxisId, yAxisId, isPanorama) => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);\nvar selectYAxisTicks = (state, _xAxisId, yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);\nvar selectBandSize = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {\n  if (isCategoricalAxis(layout, 'xAxis')) {\n    return getBandSizeOfAxis(xAxis, xAxisTicks, false);\n  }\n  return getBandSizeOfAxis(yAxis, yAxisTicks, false);\n});\nvar selectGraphicalItemStackedData = (state, xAxisId, yAxisId, isPanorama, areaSettings) => {\n  var _stackGroups$stackId;\n  var layout = selectChartLayout(state);\n  var isXAxisCategorical = isCategoricalAxis(layout, 'xAxis');\n  var stackGroups;\n  if (isXAxisCategorical) {\n    stackGroups = selectStackGroups(state, 'yAxis', yAxisId, isPanorama);\n  } else {\n    stackGroups = selectStackGroups(state, 'xAxis', xAxisId, isPanorama);\n  }\n  if (stackGroups == null) {\n    return undefined;\n  }\n  var {\n    dataKey,\n    stackId\n  } = areaSettings;\n  if (stackId == null) {\n    return undefined;\n  }\n  var groups = (_stackGroups$stackId = stackGroups[stackId]) === null || _stackGroups$stackId === void 0 ? void 0 : _stackGroups$stackId.stackedData;\n  return groups === null || groups === void 0 ? void 0 : groups.find(v => v.key === dataKey);\n};\nvar pickAreaSettings = (_state, _xAxisId, _yAxisId, _isPanorama, areaSettings) => areaSettings;\n\n/*\n * There is a race condition problem because we read some data from props and some from the state.\n * The state is updated through a dispatch and is one render behind,\n * and so we have this weird one tick render where the displayedData in one selector have the old dataKey\n * but the new dataKey in another selector.\n *\n * A proper fix is to either move everything into the state, or read the dataKey always from props\n * - but this is a smaller change.\n */\nvar selectSynchronisedAreaSettings = createSelector([selectUnfilteredCartesianItems, pickAreaSettings], (graphicalItems, areaSettingsFromProps) => {\n  if (graphicalItems.some(cgis => cgis.type === 'area' && areaSettingsFromProps.dataKey === cgis.dataKey && getNormalizedStackId(areaSettingsFromProps.stackId) === cgis.stackId && areaSettingsFromProps.data === cgis.data)) {\n    /*\n     * now, at least one of the areas has the same dataKey as the one in props.\n     * Is this a perfect match? Maybe not because we could theoretically have two different Areas with the same dataKey\n     * and the same stackId and the same data but still different areas, yes,\n     * but the chances of that happening are ... lowish.\n     *\n     * A proper fix would be to store the areaSettings in a state too, and compare references directly instead of enumerating the properties.\n     */\n    return areaSettingsFromProps;\n  }\n  return undefined;\n});\nexport var selectArea = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectGraphicalItemStackedData, selectChartDataWithIndexesIfNotInPanorama, selectBandSize, selectSynchronisedAreaSettings], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks, stackedData, _ref, bandSize, areaSettings) => {\n  var {\n    chartData,\n    dataStartIndex,\n    dataEndIndex\n  } = _ref;\n  if (areaSettings == null || layout !== 'horizontal' && layout !== 'vertical' || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || xAxisTicks.length === 0 || yAxisTicks.length === 0 || bandSize == null) {\n    return undefined;\n  }\n  var {\n    data\n  } = areaSettings;\n  var displayedData;\n  if (data && data.length > 0) {\n    displayedData = data;\n  } else {\n    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);\n  }\n  if (displayedData == null) {\n    return undefined;\n  }\n\n  // Where is this supposed to come from? No charts have that as a prop.\n  var chartBaseValue = undefined;\n  return computeArea({\n    layout,\n    xAxis,\n    yAxis,\n    xAxisTicks,\n    yAxisTicks,\n    dataStartIndex,\n    areaSettings,\n    stackedData,\n    displayedData,\n    chartBaseValue,\n    bandSize\n  });\n});","var _excluded = [\"layout\", \"type\", \"stroke\", \"connectNulls\", \"isRange\"],\n  _excluded2 = [\"activeDot\", \"animationBegin\", \"animationDuration\", \"animationEasing\", \"connectNulls\", \"dot\", \"fill\", \"fillOpacity\", \"hide\", \"isAnimationActive\", \"legendType\", \"stroke\", \"xAxisId\", \"yAxisId\"];\nfunction _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; }\nfunction _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; }\nfunction 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; }\nfunction _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; }\nfunction _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; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _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); }\nfunction _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); }\n// eslint-disable-next-line max-classes-per-file\nimport * as React from 'react';\nimport { PureComponent, useCallback, useMemo, useRef, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { Curve } from '../shape/Curve';\nimport { Dot } from '../shape/Dot';\nimport { Layer } from '../container/Layer';\nimport { LabelList } from '../component/LabelList';\nimport { Global } from '../util/Global';\nimport { interpolate, isNan, isNullish, isNumber, uniqueId } from '../util/DataUtils';\nimport { getCateCoordinateOfLine, getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';\nimport { filterProps, isClipDot } from '../util/ReactUtils';\nimport { ActivePoints } from '../component/ActivePoints';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { CartesianGraphicalItemContext } from '../context/CartesianGraphicalItemContext';\nimport { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';\nimport { selectArea } from '../state/selectors/areaSelectors';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { useChartLayout, useOffset } from '../context/chartLayoutContext';\nimport { useChartName } from '../state/selectors/selectors';\nimport { SetLegendPayload } from '../state/SetLegendPayload';\nimport { useAppSelector } from '../state/hooks';\nimport { useAnimationId } from '../util/useAnimationId';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { isWellBehavedNumber } from '../util/isWellBehavedNumber';\nimport { Animate } from '../animation/Animate';\n\n/**\n * Internal props, combination of external props + defaultProps + private Recharts state\n */\n\n/**\n * External props, intended for end users to fill in\n */\n\n/**\n * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.\n */\n\nfunction getLegendItemColor(stroke, fill) {\n  return stroke && stroke !== 'none' ? stroke : fill;\n}\nvar computeLegendPayloadFromAreaData = props => {\n  var {\n    dataKey,\n    name,\n    stroke,\n    fill,\n    legendType,\n    hide\n  } = props;\n  return [{\n    inactive: hide,\n    dataKey,\n    type: legendType,\n    color: getLegendItemColor(stroke, fill),\n    value: getTooltipNameProp(name, dataKey),\n    payload: props\n  }];\n};\nfunction getTooltipEntrySettings(props) {\n  var {\n    dataKey,\n    data,\n    stroke,\n    strokeWidth,\n    fill,\n    name,\n    hide,\n    unit\n  } = props;\n  return {\n    dataDefinedOnItem: data,\n    positions: undefined,\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      dataKey,\n      nameKey: undefined,\n      name: getTooltipNameProp(name, dataKey),\n      hide,\n      type: props.tooltipType,\n      color: getLegendItemColor(stroke, fill),\n      unit\n    }\n  };\n}\nvar renderDotItem = (option, props) => {\n  var dotItem;\n  if (/*#__PURE__*/React.isValidElement(option)) {\n    dotItem = /*#__PURE__*/React.cloneElement(option, props);\n  } else if (typeof option === 'function') {\n    dotItem = option(props);\n  } else {\n    var className = clsx('recharts-area-dot', typeof option !== 'boolean' ? option.className : '');\n    dotItem = /*#__PURE__*/React.createElement(Dot, _extends({}, props, {\n      className: className\n    }));\n  }\n  return dotItem;\n};\nfunction shouldRenderDots(points, dot) {\n  if (points == null) {\n    return false;\n  }\n  if (dot) {\n    return true;\n  }\n  return points.length === 1;\n}\nfunction Dots(_ref) {\n  var {\n    clipPathId,\n    points,\n    props\n  } = _ref;\n  var {\n    needClip,\n    dot,\n    dataKey\n  } = props;\n  if (!shouldRenderDots(points, dot)) {\n    return null;\n  }\n  var clipDot = isClipDot(dot);\n  var areaProps = filterProps(props, false);\n  var customDotProps = filterProps(dot, true);\n  var dots = points.map((entry, i) => {\n    var dotProps = _objectSpread(_objectSpread(_objectSpread({\n      key: \"dot-\".concat(i),\n      r: 3\n    }, areaProps), customDotProps), {}, {\n      index: i,\n      cx: entry.x,\n      cy: entry.y,\n      dataKey,\n      value: entry.value,\n      payload: entry.payload,\n      points\n    });\n    return renderDotItem(dot, dotProps);\n  });\n  var dotsProps = {\n    clipPath: needClip ? \"url(#clipPath-\".concat(clipDot ? '' : 'dots-').concat(clipPathId, \")\") : undefined\n  };\n  return /*#__PURE__*/React.createElement(Layer, _extends({\n    className: \"recharts-area-dots\"\n  }, dotsProps), dots);\n}\nfunction StaticArea(_ref2) {\n  var {\n    points,\n    baseLine,\n    needClip,\n    clipPathId,\n    props,\n    showLabels\n  } = _ref2;\n  var {\n      layout,\n      type,\n      stroke,\n      connectNulls,\n      isRange\n    } = props,\n    others = _objectWithoutProperties(props, _excluded);\n  return /*#__PURE__*/React.createElement(React.Fragment, null, (points === null || points === void 0 ? void 0 : points.length) > 1 && /*#__PURE__*/React.createElement(Layer, {\n    clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : undefined\n  }, /*#__PURE__*/React.createElement(Curve, _extends({}, filterProps(others, true), {\n    points: points,\n    connectNulls: connectNulls,\n    type: type,\n    baseLine: baseLine,\n    layout: layout,\n    stroke: \"none\",\n    className: \"recharts-area-area\"\n  })), stroke !== 'none' && /*#__PURE__*/React.createElement(Curve, _extends({}, filterProps(props, false), {\n    className: \"recharts-area-curve\",\n    layout: layout,\n    type: type,\n    connectNulls: connectNulls,\n    fill: \"none\",\n    points: points\n  })), stroke !== 'none' && isRange && /*#__PURE__*/React.createElement(Curve, _extends({}, filterProps(props, false), {\n    className: \"recharts-area-curve\",\n    layout: layout,\n    type: type,\n    connectNulls: connectNulls,\n    fill: \"none\",\n    points: baseLine\n  }))), /*#__PURE__*/React.createElement(Dots, {\n    points: points,\n    props: props,\n    clipPathId: clipPathId\n  }), showLabels && LabelList.renderCallByParent(props, points));\n}\nfunction VerticalRect(_ref3) {\n  var {\n    alpha,\n    baseLine,\n    points,\n    strokeWidth\n  } = _ref3;\n  var startY = points[0].y;\n  var endY = points[points.length - 1].y;\n  if (!isWellBehavedNumber(startY) || !isWellBehavedNumber(endY)) {\n    return null;\n  }\n  var height = alpha * Math.abs(startY - endY);\n  var maxX = Math.max(...points.map(entry => entry.x || 0));\n  if (isNumber(baseLine)) {\n    maxX = Math.max(baseLine, maxX);\n  } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {\n    maxX = Math.max(...baseLine.map(entry => entry.x || 0), maxX);\n  }\n  if (isNumber(maxX)) {\n    return /*#__PURE__*/React.createElement(\"rect\", {\n      x: 0,\n      y: startY < endY ? startY : startY - height,\n      width: maxX + (strokeWidth ? parseInt(\"\".concat(strokeWidth), 10) : 1),\n      height: Math.floor(height)\n    });\n  }\n  return null;\n}\nfunction HorizontalRect(_ref4) {\n  var {\n    alpha,\n    baseLine,\n    points,\n    strokeWidth\n  } = _ref4;\n  var startX = points[0].x;\n  var endX = points[points.length - 1].x;\n  if (!isWellBehavedNumber(startX) || !isWellBehavedNumber(endX)) {\n    return null;\n  }\n  var width = alpha * Math.abs(startX - endX);\n  var maxY = Math.max(...points.map(entry => entry.y || 0));\n  if (isNumber(baseLine)) {\n    maxY = Math.max(baseLine, maxY);\n  } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {\n    maxY = Math.max(...baseLine.map(entry => entry.y || 0), maxY);\n  }\n  if (isNumber(maxY)) {\n    return /*#__PURE__*/React.createElement(\"rect\", {\n      x: startX < endX ? startX : startX - width,\n      y: 0,\n      width: width,\n      height: Math.floor(maxY + (strokeWidth ? parseInt(\"\".concat(strokeWidth), 10) : 1))\n    });\n  }\n  return null;\n}\nfunction ClipRect(_ref5) {\n  var {\n    alpha,\n    layout,\n    points,\n    baseLine,\n    strokeWidth\n  } = _ref5;\n  if (layout === 'vertical') {\n    return /*#__PURE__*/React.createElement(VerticalRect, {\n      alpha: alpha,\n      points: points,\n      baseLine: baseLine,\n      strokeWidth: strokeWidth\n    });\n  }\n  return /*#__PURE__*/React.createElement(HorizontalRect, {\n    alpha: alpha,\n    points: points,\n    baseLine: baseLine,\n    strokeWidth: strokeWidth\n  });\n}\nfunction AreaWithAnimation(_ref6) {\n  var {\n    needClip,\n    clipPathId,\n    props,\n    previousPointsRef,\n    previousBaselineRef\n  } = _ref6;\n  var {\n    points,\n    baseLine,\n    isAnimationActive,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    onAnimationStart,\n    onAnimationEnd\n  } = props;\n  var animationId = useAnimationId(props, 'recharts-area-');\n  var [isAnimating, setIsAnimating] = useState(true);\n  var handleAnimationEnd = useCallback(() => {\n    if (typeof onAnimationEnd === 'function') {\n      onAnimationEnd();\n    }\n    setIsAnimating(false);\n  }, [onAnimationEnd]);\n  var handleAnimationStart = useCallback(() => {\n    if (typeof onAnimationStart === 'function') {\n      onAnimationStart();\n    }\n    setIsAnimating(true);\n  }, [onAnimationStart]);\n  var prevPoints = previousPointsRef.current;\n  var prevBaseLine = previousBaselineRef.current;\n  return /*#__PURE__*/React.createElement(Animate, {\n    begin: animationBegin,\n    duration: animationDuration,\n    isActive: isAnimationActive,\n    easing: animationEasing,\n    from: {\n      t: 0\n    },\n    to: {\n      t: 1\n    },\n    onAnimationEnd: handleAnimationEnd,\n    onAnimationStart: handleAnimationStart,\n    key: animationId\n  }, _ref7 => {\n    var {\n      t\n    } = _ref7;\n    if (prevPoints) {\n      var prevPointsDiffFactor = prevPoints.length / points.length;\n      var stepPoints =\n      /*\n       * Here it is important that at the very end of the animation, on the last frame,\n       * we render the original points without any interpolation.\n       * This is needed because the code above is checking for reference equality to decide if the animation should run\n       * and if we create a new array instance (even if the numbers were the same)\n       * then we would break animations.\n       */\n      t === 1 ? points : points.map((entry, index) => {\n        var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n        if (prevPoints[prevPointIndex]) {\n          var prev = prevPoints[prevPointIndex];\n          return _objectSpread(_objectSpread({}, entry), {}, {\n            x: interpolate(prev.x, entry.x, t),\n            y: interpolate(prev.y, entry.y, t)\n          });\n        }\n        return entry;\n      });\n      var stepBaseLine;\n      if (isNumber(baseLine)) {\n        stepBaseLine = interpolate(prevBaseLine, baseLine, t);\n      } else if (isNullish(baseLine) || isNan(baseLine)) {\n        stepBaseLine = interpolate(prevBaseLine, 0, t);\n      } else {\n        stepBaseLine = baseLine.map((entry, index) => {\n          var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n          if (Array.isArray(prevBaseLine) && prevBaseLine[prevPointIndex]) {\n            var prev = prevBaseLine[prevPointIndex];\n            return _objectSpread(_objectSpread({}, entry), {}, {\n              x: interpolate(prev.x, entry.x, t),\n              y: interpolate(prev.y, entry.y, t)\n            });\n          }\n          return entry;\n        });\n      }\n      if (t > 0) {\n        /*\n         * We need to keep the refs in the parent component because we need to remember the last shape of the animation\n         * even if AreaWithAnimation is unmounted as that happens when changing props.\n         *\n         * And we need to update the refs here because here is where the interpolation is computed.\n         * Eslint doesn't like changing function arguments, but we need it so here is an eslint-disable.\n         */\n        // eslint-disable-next-line no-param-reassign\n        previousPointsRef.current = stepPoints;\n        // eslint-disable-next-line no-param-reassign\n        previousBaselineRef.current = stepBaseLine;\n      }\n      return /*#__PURE__*/React.createElement(StaticArea, {\n        points: stepPoints,\n        baseLine: stepBaseLine,\n        needClip: needClip,\n        clipPathId: clipPathId,\n        props: props,\n        showLabels: !isAnimating\n      });\n    }\n    if (t > 0) {\n      // eslint-disable-next-line no-param-reassign\n      previousPointsRef.current = points;\n      // eslint-disable-next-line no-param-reassign\n      previousBaselineRef.current = baseLine;\n    }\n    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n      id: \"animationClipPath-\".concat(clipPathId)\n    }, /*#__PURE__*/React.createElement(ClipRect, {\n      alpha: t,\n      points: points,\n      baseLine: baseLine,\n      layout: props.layout,\n      strokeWidth: props.strokeWidth\n    }))), /*#__PURE__*/React.createElement(Layer, {\n      clipPath: \"url(#animationClipPath-\".concat(clipPathId, \")\")\n    }, /*#__PURE__*/React.createElement(StaticArea, {\n      points: points,\n      baseLine: baseLine,\n      needClip: needClip,\n      clipPathId: clipPathId,\n      props: props,\n      showLabels: true\n    })));\n  });\n}\n\n/*\n * This components decides if the area should be animated or not.\n * It also holds the state of the animation.\n */\nfunction RenderArea(_ref8) {\n  var {\n    needClip,\n    clipPathId,\n    props\n  } = _ref8;\n  var {\n    points,\n    baseLine,\n    isAnimationActive\n  } = props;\n\n  /*\n   * These two must be refs, not state!\n   * Because we want to store the most recent shape of the animation in case we have to interrupt the animation;\n   * that happens when user initiates another animation before the current one finishes.\n   *\n   * If this was a useState, then every step in the animation would trigger a re-render.\n   * So, useRef it is.\n   */\n  var previousPointsRef = useRef(null);\n  var previousBaselineRef = useRef();\n  var prevPoints = previousPointsRef.current;\n  var prevBaseLine = previousBaselineRef.current;\n  if (isAnimationActive &&\n  /*\n   * Here it's important that we unmount of AreaWithAnimation in case points are undefined\n   * - this will make sure to interrupt the animation if it's running.\n   * We still get to keep the last shape of the animation in the refs above.\n   */\n  points && points.length && (prevPoints !== points || prevBaseLine !== baseLine)) {\n    return /*#__PURE__*/React.createElement(AreaWithAnimation, {\n      needClip: needClip,\n      clipPathId: clipPathId,\n      props: props,\n      previousPointsRef: previousPointsRef,\n      previousBaselineRef: previousBaselineRef\n    });\n  }\n  return /*#__PURE__*/React.createElement(StaticArea, {\n    points: points,\n    baseLine: baseLine,\n    needClip: needClip,\n    clipPathId: clipPathId,\n    props: props,\n    showLabels: true\n  });\n}\nclass AreaWithState extends PureComponent {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"id\", uniqueId('recharts-area-'));\n  }\n  render() {\n    var _filterProps;\n    var {\n      hide,\n      dot,\n      points,\n      className,\n      top,\n      left,\n      needClip,\n      xAxisId,\n      yAxisId,\n      width,\n      height,\n      id,\n      baseLine\n    } = this.props;\n    if (hide) {\n      return null;\n    }\n    var layerClass = clsx('recharts-area', className);\n    var clipPathId = isNullish(id) ? this.id : id;\n    var {\n      r = 3,\n      strokeWidth = 2\n    } = (_filterProps = filterProps(dot, false)) !== null && _filterProps !== void 0 ? _filterProps : {\n      r: 3,\n      strokeWidth: 2\n    };\n    var clipDot = isClipDot(dot);\n    var dotSize = r * 2 + strokeWidth;\n    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Layer, {\n      className: layerClass\n    }, needClip && /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(GraphicalItemClipPath, {\n      clipPathId: clipPathId,\n      xAxisId: xAxisId,\n      yAxisId: yAxisId\n    }), !clipDot && /*#__PURE__*/React.createElement(\"clipPath\", {\n      id: \"clipPath-dots-\".concat(clipPathId)\n    }, /*#__PURE__*/React.createElement(\"rect\", {\n      x: left - dotSize / 2,\n      y: top - dotSize / 2,\n      width: width + dotSize,\n      height: height + dotSize\n    }))), /*#__PURE__*/React.createElement(RenderArea, {\n      needClip: needClip,\n      clipPathId: clipPathId,\n      props: this.props\n    })), /*#__PURE__*/React.createElement(ActivePoints, {\n      points: points,\n      mainColor: getLegendItemColor(this.props.stroke, this.props.fill),\n      itemDataKey: this.props.dataKey,\n      activeDot: this.props.activeDot\n    }), this.props.isRange && Array.isArray(baseLine) && /*#__PURE__*/React.createElement(ActivePoints, {\n      points: baseLine,\n      mainColor: getLegendItemColor(this.props.stroke, this.props.fill),\n      itemDataKey: this.props.dataKey,\n      activeDot: this.props.activeDot\n    }));\n  }\n}\nvar defaultAreaProps = {\n  activeDot: true,\n  animationBegin: 0,\n  animationDuration: 1500,\n  animationEasing: 'ease',\n  connectNulls: false,\n  dot: false,\n  fill: '#3182bd',\n  fillOpacity: 0.6,\n  hide: false,\n  isAnimationActive: !Global.isSsr,\n  legendType: 'line',\n  stroke: '#3182bd',\n  xAxisId: 0,\n  yAxisId: 0\n};\nfunction AreaImpl(props) {\n  var _useAppSelector;\n  var _resolveDefaultProps = resolveDefaultProps(props, defaultAreaProps),\n    {\n      activeDot,\n      animationBegin,\n      animationDuration,\n      animationEasing,\n      connectNulls,\n      dot,\n      fill,\n      fillOpacity,\n      hide,\n      isAnimationActive,\n      legendType,\n      stroke,\n      xAxisId,\n      yAxisId\n    } = _resolveDefaultProps,\n    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded2);\n  var layout = useChartLayout();\n  var chartName = useChartName();\n  var {\n    needClip\n  } = useNeedsClip(xAxisId, yAxisId);\n  var isPanorama = useIsPanorama();\n  var areaSettings = useMemo(() => ({\n    baseValue: props.baseValue,\n    stackId: props.stackId,\n    connectNulls,\n    data: props.data,\n    dataKey: props.dataKey\n  }), [props.baseValue, props.stackId, connectNulls, props.data, props.dataKey]);\n  var {\n    points,\n    isRange,\n    baseLine\n  } = (_useAppSelector = useAppSelector(state => selectArea(state, xAxisId, yAxisId, isPanorama, areaSettings))) !== null && _useAppSelector !== void 0 ? _useAppSelector : {};\n  var {\n    height,\n    width,\n    left,\n    top\n  } = useOffset();\n  if (layout !== 'horizontal' && layout !== 'vertical') {\n    // Can't render Area in an unsupported layout\n    return null;\n  }\n  if (chartName !== 'AreaChart' && chartName !== 'ComposedChart') {\n    // There is nothing stopping us from rendering Area in other charts, except for historical reasons. Do we want to allow that?\n    return null;\n  }\n\n  /*\n   * It is important to NOT have this condition here,\n   * because we need the Animate inside to receive an empty state\n   * so that it can properly reset its internal state and start a new animation.\n   */\n  // if (!points || !points.length) {\n  //   return null;\n  // }\n\n  return /*#__PURE__*/React.createElement(AreaWithState, _extends({}, everythingElse, {\n    activeDot: activeDot,\n    animationBegin: animationBegin,\n    animationDuration: animationDuration,\n    animationEasing: animationEasing,\n    baseLine: baseLine,\n    connectNulls: connectNulls,\n    dot: dot,\n    fill: fill,\n    fillOpacity: fillOpacity,\n    height: height,\n    hide: hide,\n    layout: layout,\n    isAnimationActive: isAnimationActive,\n    isRange: isRange,\n    legendType: legendType,\n    needClip: needClip,\n    points: points,\n    stroke: stroke,\n    width: width,\n    left: left,\n    top: top,\n    xAxisId: xAxisId,\n    yAxisId: yAxisId\n  }));\n}\nexport var getBaseValue = (layout, chartBaseValue, itemBaseValue, xAxis, yAxis) => {\n  // The baseValue can be defined both on the AreaChart, and on the Area.\n  // The value for the item takes precedence.\n  var baseValue = itemBaseValue !== null && itemBaseValue !== void 0 ? itemBaseValue : chartBaseValue;\n  if (isNumber(baseValue)) {\n    return baseValue;\n  }\n  var numericAxis = layout === 'horizontal' ? yAxis : xAxis;\n  // @ts-expect-error d3scale .domain() returns unknown, Math.max expects number\n  var domain = numericAxis.scale.domain();\n  if (numericAxis.type === 'number') {\n    var domainMax = Math.max(domain[0], domain[1]);\n    var domainMin = Math.min(domain[0], domain[1]);\n    if (baseValue === 'dataMin') {\n      return domainMin;\n    }\n    if (baseValue === 'dataMax') {\n      return domainMax;\n    }\n    return domainMax < 0 ? domainMax : Math.max(Math.min(domain[0], domain[1]), 0);\n  }\n  if (baseValue === 'dataMin') {\n    return domain[0];\n  }\n  if (baseValue === 'dataMax') {\n    return domain[1];\n  }\n  return domain[0];\n};\nexport function computeArea(_ref9) {\n  var {\n    areaSettings: {\n      connectNulls,\n      baseValue: itemBaseValue,\n      dataKey\n    },\n    stackedData,\n    layout,\n    chartBaseValue,\n    xAxis,\n    yAxis,\n    displayedData,\n    dataStartIndex,\n    xAxisTicks,\n    yAxisTicks,\n    bandSize\n  } = _ref9;\n  var hasStack = stackedData && stackedData.length;\n  var baseValue = getBaseValue(layout, chartBaseValue, itemBaseValue, xAxis, yAxis);\n  var isHorizontalLayout = layout === 'horizontal';\n  var isRange = false;\n  var points = displayedData.map((entry, index) => {\n    var value;\n    if (hasStack) {\n      value = stackedData[dataStartIndex + index];\n    } else {\n      value = getValueByDataKey(entry, dataKey);\n      if (!Array.isArray(value)) {\n        value = [baseValue, value];\n      } else {\n        isRange = true;\n      }\n    }\n    var isBreakPoint = value[1] == null || hasStack && !connectNulls && getValueByDataKey(entry, dataKey) == null;\n    if (isHorizontalLayout) {\n      return {\n        // @ts-expect-error getCateCoordinateOfLine expects chart data to be an object, we allow unknown\n        x: getCateCoordinateOfLine({\n          axis: xAxis,\n          ticks: xAxisTicks,\n          bandSize,\n          entry,\n          index\n        }),\n        y: isBreakPoint ? null : yAxis.scale(value[1]),\n        value,\n        payload: entry\n      };\n    }\n    return {\n      x: isBreakPoint ? null : xAxis.scale(value[1]),\n      // @ts-expect-error getCateCoordinateOfLine expects chart data to be an object, we allow unknown\n      y: getCateCoordinateOfLine({\n        axis: yAxis,\n        ticks: yAxisTicks,\n        bandSize,\n        entry,\n        index\n      }),\n      value,\n      payload: entry\n    };\n  });\n  var baseLine;\n  if (hasStack || isRange) {\n    baseLine = points.map(entry => {\n      var x = Array.isArray(entry.value) ? entry.value[0] : null;\n      if (isHorizontalLayout) {\n        return {\n          x: entry.x,\n          y: x != null && entry.y != null ? yAxis.scale(x) : null\n        };\n      }\n      return {\n        x: x != null ? xAxis.scale(x) : null,\n        y: entry.y\n      };\n    });\n  } else {\n    baseLine = isHorizontalLayout ? yAxis.scale(baseValue) : xAxis.scale(baseValue);\n  }\n  return {\n    points,\n    baseLine,\n    isRange\n  };\n}\nexport class Area extends PureComponent {\n  render() {\n    // Report all props to Redux store first, before calling any hooks, to avoid circular dependencies.\n    return /*#__PURE__*/React.createElement(CartesianGraphicalItemContext, {\n      type: \"area\",\n      data: this.props.data,\n      dataKey: this.props.dataKey,\n      xAxisId: this.props.xAxisId,\n      yAxisId: this.props.yAxisId,\n      zAxisId: 0,\n      stackId: this.props.stackId,\n      hide: this.props.hide,\n      barSize: undefined\n    }, /*#__PURE__*/React.createElement(SetLegendPayload, {\n      legendPayload: computeLegendPayloadFromAreaData(this.props)\n    }), /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {\n      fn: getTooltipEntrySettings,\n      args: this.props\n    }), /*#__PURE__*/React.createElement(AreaImpl, this.props));\n  }\n}\n_defineProperty(Area, \"displayName\", 'Area');\n_defineProperty(Area, \"defaultProps\", defaultAreaProps);","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { CartesianChart } from './CartesianChart';\nvar allowedTooltipTypes = ['axis'];\nexport var AreaChart = /*#__PURE__*/forwardRef((props, ref) => {\n  return /*#__PURE__*/React.createElement(CartesianChart, {\n    chartName: \"AreaChart\",\n    defaultTooltipEventType: \"axis\",\n    validateTooltipEventTypes: allowedTooltipTypes,\n    tooltipPayloadSearcher: arrayTooltipSearcher,\n    categoricalChartProps: props,\n    ref: ref\n  });\n});","import { memo, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport Select from 'react-select';\nimport {\n  ResponsiveContainer,\n  LineChart,\n  Line,\n  AreaChart,\n  Area,\n  BarChart,\n  Bar,\n  CartesianGrid,\n  XAxis,\n  YAxis,\n  Tooltip,\n  Legend,\n} from 'recharts';\nimport DJClientContext from '../../providers/djclient';\nimport { DataJunctionAPI } from '../../services/DJService';\nimport './styles.css';\n\nconst PALETTE = [\n  '#3b51d6',\n  '#00C49F',\n  '#FFBB28',\n  '#FF91A3',\n  '#AA46BE',\n  '#0088FE',\n  '#FF8042',\n  '#82ca9d',\n];\n\n// Brighter cousins of the canonical DJ node-type colors\n// (the canonical ones in src/styles/index.css are tuned for badges on a\n// white background — they're too desaturated for chart series).\nconst NODE_TYPE_COLORS = {\n  source: '#22c55e', // bright emerald\n  transform: '#3b82f6', // bright blue\n  metric: '#f43f5e', // bright rose\n  dimension: '#f59e0b', // bright amber\n  cube: '#a855f7', // bright purple\n  tag: '#8b5cf6', // bright violet\n};\n\nconst colorForSeries = (label, fallback) => {\n  if (!label) return { color: fallback, opacity: 0.85 };\n  const key = String(label).toLowerCase();\n  if (NODE_TYPE_COLORS[key]) {\n    return { color: NODE_TYPE_COLORS[key], opacity: 0.85 };\n  }\n  return { color: fallback, opacity: 0.85 };\n};\n\nconst OPERATORS = [\n  { value: '=', label: '=' },\n  { value: '!=', label: '≠' },\n  { value: 'in', label: 'is one of' },\n  { value: '>', label: '>' },\n  { value: '<', label: '<' },\n  { value: '>=', label: '≥' },\n  { value: '<=', label: '≤' },\n];\n\nconst isTemporal = name =>\n  /(_date|_week|_month|_quarter|_year|_day|dateint|created_at)/i.test(name);\n\nexport const typeIcon = type => {\n  if (!type) return '#';\n  const t = String(type).toLowerCase();\n  if (/(bool)/.test(t)) return '✓';\n  if (/(date|time)/.test(t)) return '📅';\n  if (/(int|long|double|float|decimal|numeric|number)/.test(t)) return '123';\n  if (/(string|varchar|char|text)/.test(t)) return 'Aa';\n  if (/(list|array)/.test(t)) return '[ ]';\n  return '#';\n};\n\n// Shared react-select styles so options inside groups are visibly indented\n// under their group header, and the header has a tight, distinct look.\nconst groupedSelectStyles = {\n  groupHeading: base => ({\n    ...base,\n    fontSize: 10.5,\n    fontWeight: 600,\n    textTransform: 'uppercase',\n    letterSpacing: '0.04em',\n    color: '#64748b',\n    padding: '6px 12px 2px',\n  }),\n  option: (base, state) => ({\n    ...base,\n    paddingLeft: state.data && state.data.group ? 28 : base.paddingLeft,\n  }),\n  group: base => ({\n    ...base,\n    paddingTop: 4,\n    paddingBottom: 4,\n  }),\n};\n\n// Recharts tooltip that drops zero-valued series — when stacked breakdowns\n// have lots of empty cells (zero-filled for stacking), the default tooltip\n// fills the screen with \"X: 0\" rows that aren't useful.\nexport function NonZeroTooltip({ active, payload, label }) {\n  if (!active || !payload || !payload.length) return null;\n  const nonZero = payload.filter(p => p && p.value !== 0 && p.value != null);\n  if (!nonZero.length) return null;\n  return (\n    <div\n      style={{\n        background: '#fff',\n        border: '1px solid #e2e8f0',\n        borderRadius: 6,\n        padding: '8px 10px',\n        fontSize: 12,\n        boxShadow: '0 2px 8px rgba(0,0,0,0.08)',\n      }}\n    >\n      <div style={{ fontWeight: 600, marginBottom: 4, color: '#1e293b' }}>\n        {label}\n      </div>\n      {nonZero.map(p => (\n        <div\n          key={p.dataKey}\n          style={{\n            display: 'flex',\n            alignItems: 'center',\n            gap: 6,\n            color: '#334155',\n          }}\n        >\n          <span\n            style={{\n              display: 'inline-block',\n              width: 9,\n              height: 9,\n              background: p.color,\n              borderRadius: 2,\n            }}\n          />\n          <span>{p.name}</span>\n          <span\n            style={{ marginLeft: 'auto', fontVariantNumeric: 'tabular-nums' }}\n          >\n            {typeof p.value === 'number' ? p.value.toLocaleString() : p.value}\n          </span>\n        </div>\n      ))}\n    </div>\n  );\n}\n\nconst isNumericLike = v =>\n  typeof v === 'number' || (typeof v === 'string' && /^-?\\d+(\\.\\d+)?$/.test(v));\n\n// Recharts subtree, memoed so unrelated parent re-renders (e.g. URL syncs,\n// filter-input keystrokes) don't re-mount the chart's SVG paths.\nconst ChartView = memo(function ChartView({\n  chartData,\n  resolvedChartType,\n  startAtZero,\n}) {\n  const stacked = chartData.series.length > 1;\n  const isLine = resolvedChartType === 'line';\n  const isArea = resolvedChartType === 'area';\n  const ChartCmp = isArea ? AreaChart : isLine ? LineChart : BarChart;\n  return (\n    <div className=\"sme-chart-body\">\n      <ResponsiveContainer width=\"100%\" height=\"100%\">\n        <ChartCmp\n          data={chartData.data}\n          margin={{ top: 10, right: 30, left: 10, bottom: 20 }}\n        >\n          <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#eee\" />\n          <XAxis dataKey={chartData.xKey} tick={{ fontSize: 12 }} />\n          <YAxis\n            tick={{ fontSize: 12 }}\n            domain={startAtZero ? [0, 'auto'] : ['auto', 'auto']}\n          />\n          <Tooltip\n            content={<NonZeroTooltip />}\n            isAnimationActive={false}\n            cursor={{ fill: 'rgba(15, 23, 42, 0.04)' }}\n          />\n          {stacked ? <Legend /> : null}\n          {chartData.series.map((s, i) => {\n            const name = chartData.labels[s] || s;\n            const { color, opacity } = colorForSeries(\n              name,\n              PALETTE[i % PALETTE.length],\n            );\n            if (isArea) {\n              return (\n                <Area\n                  key={s}\n                  type=\"monotone\"\n                  dataKey={s}\n                  name={name}\n                  stackId={stacked ? '1' : undefined}\n                  stroke={color}\n                  fill={color}\n                  fillOpacity={opacity}\n                  isAnimationActive={false}\n                  activeDot={false}\n                />\n              );\n            }\n            if (isLine) {\n              return (\n                <Line\n                  key={s}\n                  type=\"monotone\"\n                  dataKey={s}\n                  name={name}\n                  stroke={color}\n                  strokeWidth={2}\n                  dot={false}\n                  isAnimationActive={false}\n                  activeDot={false}\n                />\n              );\n            }\n            return (\n              <Bar\n                key={s}\n                dataKey={s}\n                name={name}\n                fill={color}\n                fillOpacity={opacity}\n                stackId={stacked ? '1' : undefined}\n                isAnimationActive={false}\n                activeBar={false}\n              />\n            );\n          })}\n        </ChartCmp>\n      </ResponsiveContainer>\n    </div>\n  );\n});\n\n// Parse URL search params into the explorer's initial state.\nfunction parseSearch(search) {\n  const p = new URLSearchParams(search);\n  const filters = p\n    .getAll('filter')\n    .map(raw => {\n      const [dim = '', op = '=', ...rest] = raw.split('|');\n      return { dim, op, value: rest.join('|') };\n    })\n    .filter(f => f.dim);\n  return {\n    metric: p.get('metric') || null,\n    xAxis: p.get('x') || null,\n    compareBy: (p.get('by') || '').split(',').filter(Boolean),\n    filters,\n    view: p.get('view') === 'table' ? 'table' : 'chart',\n    chartType: ['line', 'area', 'bar', 'auto'].includes(p.get('chart'))\n      ? p.get('chart')\n      : 'auto',\n    startAtZero: p.get('zero') === '1',\n  };\n}\n\nexport function SystemMetricsExplorerPage() {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const location = useLocation();\n  const navigate = useNavigate();\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const initial = useMemo(() => parseSearch(location.search), []);\n\n  const [metricsList, setMetricsList] = useState([]);\n  const [metricSearch, setMetricSearch] = useState('');\n  const [dimSearch, setDimSearch] = useState('');\n\n  const [selectedMetric, setSelectedMetric] = useState(initial.metric);\n  const [availableDims, setAvailableDims] = useState([]); // [{name,type,path,label}]\n  const [xAxisDim, setXAxisDim] = useState(null);\n  const [compareBy, setCompareBy] = useState([]);\n  const [filters, setFilters] = useState(initial.filters);\n\n  // Pending selections from the URL that need to be resolved against\n  // availableDims once they load.\n  const pendingXAxis = useRef(initial.xAxis);\n  const pendingCompareBy = useRef(initial.compareBy);\n\n  const [rows, setRows] = useState(null);\n  const [columns, setColumns] = useState([]);\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState(null);\n\n  const [view, setView] = useState(initial.view);\n  const [chartType, setChartType] = useState(initial.chartType);\n  const [startAtZero, setStartAtZero] = useState(initial.startAtZero);\n\n  // Load system metrics\n  useEffect(() => {\n    let cancelled = false;\n    (async () => {\n      try {\n        const list = await djClient.system.list();\n        if (cancelled) return;\n        if (!Array.isArray(list)) {\n          setError(\n            `Unexpected response from /system/metrics: ${JSON.stringify(\n              list,\n            ).slice(0, 200)}`,\n          );\n          setMetricsList([]);\n          return;\n        }\n        // Endpoint may return either [\"name\", ...] (legacy) or\n        // [{name, display_name, description}, ...] (new). Normalize.\n        const normalized = list.map(item => {\n          if (typeof item === 'string') {\n            return {\n              name: item,\n              display_name: item,\n              description: '',\n              group: 'Other',\n              subgroup: 'Other',\n              suggestedCompareBy: [],\n            };\n          }\n          const meta = item.custom_metadata || {};\n          return {\n            name: item.name,\n            display_name: item.display_name || item.name,\n            description: item.description || '',\n            group: meta.group || 'Other',\n            subgroup: meta.subgroup || 'Other',\n            suggestedCompareBy: Array.isArray(meta.suggested_compare_by)\n              ? meta.suggested_compare_by\n              : [],\n          };\n        });\n        setMetricsList(normalized);\n        if (normalized.length && !selectedMetric)\n          setSelectedMetric(normalized[0].name);\n      } catch (e) {\n        if (!cancelled) setError(String(e));\n      }\n    })();\n    return () => {\n      cancelled = true;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [djClient]);\n\n  // Load dimensions for selected metric\n  useEffect(() => {\n    if (!selectedMetric) {\n      setAvailableDims([]);\n      return;\n    }\n    let cancelled = false;\n    setXAxisDim(null);\n    setCompareBy([]);\n    setRows(null);\n    setColumns([]);\n    setError(null);\n    (async () => {\n      try {\n        const dims = await djClient.commonDimensions([selectedMetric]);\n        if (cancelled) return;\n        const opts = (Array.isArray(dims) ? dims : []).map(d => {\n          // d.name is e.g. \"system.dj.date.dateint[created_at]\". Pull the\n          // role suffix out for the group header.\n          const roleMatch = d.name.match(/\\[([^\\]]+)\\]$/);\n          const role = roleMatch ? roleMatch[1] : null;\n          const baseName = role\n            ? d.name.slice(0, -roleMatch[0].length)\n            : d.name;\n          const segments = baseName.split('.');\n          const attr = segments[segments.length - 1];\n          const nodeDisplay =\n            d.node_display_name || segments.slice(0, -1).join('.');\n          const colDisplay = d.column_display_name || attr;\n          const group = role ? `${nodeDisplay} [${role}]` : nodeDisplay;\n          return {\n            value: d.name,\n            label: colDisplay,\n            // Combined label used in search and in some narrow contexts.\n            combinedLabel: `${group} · ${colDisplay}`,\n            attr,\n            nodeDisplay,\n            colDisplay,\n            role,\n            group,\n            path: d.path.join(' ▶ '),\n            type: d.type,\n          };\n        });\n        setAvailableDims(opts);\n\n        // Apply pending URL state first if present; otherwise default to a\n        // temporal X-axis. Pending state is one-shot — clear after applying.\n        if (pendingXAxis.current) {\n          const match = opts.find(o => o.value === pendingXAxis.current);\n          if (match) setXAxisDim(match);\n          pendingXAxis.current = null;\n        } else {\n          // Prefer a \"week\" temporal column; fall back to any temporal one.\n          const weekly = opts.find(o => /_week\\b/i.test(o.value));\n          const firstTemporal = weekly || opts.find(o => isTemporal(o.value));\n          if (firstTemporal) setXAxisDim(firstTemporal);\n        }\n        if (pendingCompareBy.current && pendingCompareBy.current.length) {\n          const matches = pendingCompareBy.current\n            .map(v => opts.find(o => o.value === v))\n            .filter(Boolean);\n          if (matches.length) setCompareBy(matches);\n          pendingCompareBy.current = null;\n        } else {\n          // Apply the metric's suggested compare-by defaults (from\n          // custom_metadata.suggested_compare_by). Only kicks in when the\n          // user has no pending compare-by from the URL.\n          const metric = metricsList.find(m => m.name === selectedMetric);\n          const suggested = (metric && metric.suggestedCompareBy) || [];\n          if (suggested.length) {\n            const matches = suggested\n              .map(v => opts.find(o => o.value === v))\n              .filter(Boolean);\n            if (matches.length) setCompareBy(matches);\n          }\n        }\n      } catch (e) {\n        if (!cancelled) setError(String(e));\n      }\n    })();\n    return () => {\n      cancelled = true;\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [selectedMetric, djClient]);\n\n  // Sync state back to URL so links are shareable.\n  useEffect(() => {\n    const p = new URLSearchParams();\n    if (selectedMetric) p.set('metric', selectedMetric);\n    if (xAxisDim) p.set('x', xAxisDim.value);\n    if (compareBy.length) p.set('by', compareBy.map(d => d.value).join(','));\n    filters.forEach(f => {\n      if (f.dim && f.op) {\n        p.append('filter', `${f.dim}|${f.op}|${f.value ?? ''}`);\n      }\n    });\n    if (view !== 'chart') p.set('view', view);\n    if (chartType !== 'auto') p.set('chart', chartType);\n    if (startAtZero) p.set('zero', '1');\n    const next = p.toString();\n    const current = window.location.search.replace(/^\\?/, '');\n    if (next !== current) {\n      navigate(\n        { pathname: window.location.pathname, search: next ? `?${next}` : '' },\n        { replace: true },\n      );\n    }\n  }, [\n    selectedMetric,\n    xAxisDim,\n    compareBy,\n    filters,\n    view,\n    chartType,\n    startAtZero,\n    navigate,\n  ]);\n\n  // Run query whenever the user changes inputs\n  useEffect(() => {\n    if (!selectedMetric) return;\n    let cancelled = false;\n    (async () => {\n      setLoading(true);\n      setError(null);\n      try {\n        const dimensions = [\n          ...(xAxisDim ? [xAxisDim.value] : []),\n          ...compareBy.map(d => d.value),\n        ];\n        const filterClauses = filters\n          .filter(f => f.dim && f.op && f.value !== '')\n          .map(f => {\n            if (f.op === 'in') {\n              const vals = f.value\n                .split(',')\n                .map(v => v.trim())\n                .filter(Boolean)\n                .map(v => (isNumericLike(v) ? v : `'${v.replace(/'/g, \"''\")}'`))\n                .join(', ');\n              return `${f.dim} IN (${vals})`;\n            }\n            const lhs = f.dim;\n            const rhs = isNumericLike(f.value)\n              ? f.value\n              : `'${String(f.value).replace(/'/g, \"''\")}'`;\n            return `${lhs} ${f.op} ${rhs}`;\n          });\n\n        const orderby = xAxisDim ? [xAxisDim.value] : [];\n\n        const result = await djClient.querySystemMetric({\n          metric: selectedMetric,\n          dimensions,\n          filters: filterClauses,\n          orderby,\n        });\n        if (cancelled) return;\n        // New compact shape: { columns: [...], rows: [[...], ...] }.\n        // Rows are already aligned to columns, no per-cell envelope.\n        setColumns(result.columns || []);\n        setRows(result.rows || []);\n      } catch (e) {\n        if (!cancelled) setError(String(e));\n        setRows(null);\n        setColumns([]);\n      } finally {\n        if (!cancelled) setLoading(false);\n      }\n    })();\n    return () => {\n      cancelled = true;\n    };\n  }, [selectedMetric, xAxisDim, compareBy, filters, djClient]);\n\n  const metricDisplay = useMemo(() => {\n    const map = {};\n    for (const m of metricsList) map[m.name] = m.display_name || m.name;\n    return map;\n  }, [metricsList]);\n\n  // Shape data for the chart.\n  // Recharts uses lodash-style get(obj, dataKey), so keys containing dots\n  // (like \"system.dj.number_of_nodes\") would be interpreted as nested\n  // paths and produce undefined. Flatten to safe keys (__x, s0, s1, ...)\n  // and keep a label map for tooltip/legend display.\n  const chartData = useMemo(() => {\n    const empty = { data: [], series: [], xKey: null, labels: {} };\n    if (!rows || !selectedMetric) return empty;\n    const xKey = xAxisDim?.value;\n    const breakdownKey = compareBy[0]?.value || null;\n    const metricCol = selectedMetric;\n    const metricIdx = columns.indexOf(metricCol);\n    if (metricIdx === -1) return empty;\n    const num = v => {\n      if (v === null || v === undefined) return 0;\n      const n = typeof v === 'number' ? v : parseFloat(v);\n      return Number.isFinite(n) ? n : 0;\n    };\n    const X = '__x';\n\n    // Strip rows (X buckets) where every series is 0/null and series that\n    // are 0/null at every X. Both flavors of \"empty\" are noise: an X bucket\n    // with no data adds an unused tick; a series with no data adds a legend\n    // entry and a phantom stack member.\n    const pruneEmpty = ({ data, series, labels, xKey: xk }) => {\n      const seriesWithValue = series.filter(s =>\n        data.some(r => r[s] !== 0 && r[s] != null),\n      );\n      const keptLabels = {};\n      for (const s of seriesWithValue) keptLabels[s] = labels[s];\n      const keptData = data\n        .map(r => {\n          const out = { [xk]: r[xk] };\n          for (const s of seriesWithValue) out[s] = r[s];\n          return out;\n        })\n        .filter(r => seriesWithValue.some(s => r[s] !== 0 && r[s] != null));\n      return {\n        data: keptData,\n        series: seriesWithValue,\n        labels: keptLabels,\n        xKey: xk,\n      };\n    };\n\n    if (!xKey) {\n      const bdIdx = breakdownKey ? columns.indexOf(breakdownKey) : -1;\n      const sKey = 's0';\n      const baseLabel =\n        metricDisplay[metricCol] || metricCol.replace(/^system\\.dj\\./, '');\n      if (bdIdx === -1) {\n        return {\n          data: [{ [X]: metricCol, [sKey]: num(rows[0]?.[metricIdx]) }],\n          series: [sKey],\n          xKey: X,\n          labels: { [sKey]: baseLabel },\n        };\n      }\n      return pruneEmpty({\n        data: rows.map(r => ({\n          [X]: String(r[bdIdx]),\n          [sKey]: num(r[metricIdx]),\n        })),\n        series: [sKey],\n        xKey: X,\n        labels: { [sKey]: baseLabel },\n      });\n    }\n\n    const xIdx = columns.indexOf(xKey);\n    if (xIdx === -1) return empty;\n\n    const baseLabel =\n      metricDisplay[metricCol] || metricCol.replace(/^system\\.dj\\./, '');\n\n    if (!breakdownKey) {\n      const sKey = 's0';\n      return pruneEmpty({\n        data: rows.map(r => ({\n          [X]: String(r[xIdx]),\n          [sKey]: num(r[metricIdx]),\n        })),\n        series: [sKey],\n        xKey: X,\n        labels: { [sKey]: baseLabel },\n      });\n    }\n\n    const bdIdx = columns.indexOf(breakdownKey);\n    const byX = new Map();\n    const seriesLabels = new Map(); // safeKey -> displayLabel\n    const seriesOrder = [];\n    for (const r of rows) {\n      const xVal = String(r[xIdx]);\n      const bdVal = String(r[bdIdx]);\n      if (!seriesLabels.has(bdVal)) {\n        const safe = `s${seriesLabels.size}`;\n        seriesLabels.set(bdVal, safe);\n        seriesOrder.push(safe);\n      }\n      const safe = seriesLabels.get(bdVal);\n      if (!byX.has(xVal)) byX.set(xVal, { [X]: xVal });\n      byX.get(xVal)[safe] = num(r[metricIdx]);\n    }\n    const labels = {};\n    seriesLabels.forEach((safe, orig) => {\n      labels[safe] = orig;\n    });\n    const filled = [];\n    byX.forEach(row => {\n      const out = { ...row };\n      for (const safe of seriesOrder) {\n        if (out[safe] === undefined || out[safe] === null) out[safe] = 0;\n      }\n      filled.push(out);\n    });\n    return pruneEmpty({\n      data: filled,\n      series: seriesOrder,\n      xKey: X,\n      labels,\n    });\n  }, [rows, columns, xAxisDim, compareBy, selectedMetric, metricDisplay]);\n\n  const filteredMetrics = useMemo(() => {\n    const q = metricSearch.toLowerCase();\n    return metricsList.filter(\n      m =>\n        m.name.toLowerCase().includes(q) ||\n        (m.display_name && m.display_name.toLowerCase().includes(q)),\n    );\n  }, [metricsList, metricSearch]);\n\n  // Two-level grouping: group > subgroup > metric[]. Preserves insertion\n  // order so the seed's intended ordering is honored.\n  // NOTE: avoid `[...map.entries()]` here — this bundle has a polyfill that\n  // breaks Map's iterator and silently produces empty arrays. forEach works.\n  const groupedMetrics = useMemo(() => {\n    const groupOrder = [];\n    const groupMap = {};\n    for (const m of filteredMetrics) {\n      const g = m.group || 'Other';\n      const sg = m.subgroup || 'Other';\n      if (!groupMap[g]) {\n        groupMap[g] = { subgroupOrder: [], subgroups: {} };\n        groupOrder.push(g);\n      }\n      if (!groupMap[g].subgroups[sg]) {\n        groupMap[g].subgroups[sg] = [];\n        groupMap[g].subgroupOrder.push(sg);\n      }\n      groupMap[g].subgroups[sg].push(m);\n    }\n    return groupOrder.map(group => ({\n      group,\n      subgroups: groupMap[group].subgroupOrder.map(subgroup => ({\n        subgroup,\n        metrics: groupMap[group].subgroups[subgroup],\n      })),\n    }));\n  }, [filteredMetrics]);\n\n  const selectedMetricDisplay = selectedMetric\n    ? metricDisplay[selectedMetric] ||\n      selectedMetric.replace(/^system\\.dj\\./, '')\n    : null;\n\n  const selectedMetricDescription = selectedMetric\n    ? (metricsList.find(m => m.name === selectedMetric) || {}).description || ''\n    : '';\n\n  const filteredDims = useMemo(() => {\n    const q = dimSearch.toLowerCase();\n    return availableDims.filter(\n      d =>\n        d.value.toLowerCase().includes(q) ||\n        d.combinedLabel.toLowerCase().includes(q),\n    );\n  }, [availableDims, dimSearch]);\n\n  // Group filtered dims by their parent dim node (+ role) for use in\n  // react-select option groups and in the rail's sectioned list.\n  const groupedDims = useMemo(() => {\n    const order = [];\n    const byGroup = new Map();\n    for (const d of filteredDims) {\n      if (!byGroup.has(d.group)) {\n        byGroup.set(d.group, []);\n        order.push(d.group);\n      }\n      byGroup.get(d.group).push(d);\n    }\n    return order.map(group => ({ label: group, options: byGroup.get(group) }));\n  }, [filteredDims]);\n\n  const resolvedChartType = useMemo(() => {\n    if (chartType !== 'auto') return chartType;\n    const temporal = xAxisDim && isTemporal(xAxisDim.value);\n    if (!temporal) return 'bar';\n    return compareBy.length > 0 ? 'area' : 'line';\n  }, [chartType, xAxisDim, compareBy]);\n\n  const addFilter = () =>\n    setFilters([...filters, { dim: '', op: '=', value: '' }]);\n\n  const updateFilter = (i, patch) =>\n    setFilters(filters.map((f, idx) => (idx === i ? { ...f, ...patch } : f)));\n\n  const removeFilter = i => setFilters(filters.filter((_, idx) => idx !== i));\n\n  const renderChart = () => {\n    if (loading)\n      return (\n        <div className=\"sme-empty\">\n          <span className=\"sme-spinner\" />\n          Loading…\n        </div>\n      );\n    if (!rows || rows.length === 0)\n      return (\n        <div className=\"sme-empty\">\n          <div className=\"sme-empty-icon\">📈</div>\n          No data.\n        </div>\n      );\n    return (\n      <ChartView\n        chartData={chartData}\n        resolvedChartType={resolvedChartType}\n        startAtZero={startAtZero}\n      />\n    );\n  };\n\n  const renderTable = () => {\n    if (loading)\n      return (\n        <div className=\"sme-empty\">\n          <span className=\"sme-spinner\" />\n          Loading…\n        </div>\n      );\n    if (!rows || rows.length === 0)\n      return <div className=\"sme-empty\">No data.</div>;\n    return (\n      <div className=\"sme-table-wrap\">\n        <table className=\"sme-table\">\n          <thead>\n            <tr>\n              {columns.map(c => (\n                <th key={c}>{c}</th>\n              ))}\n            </tr>\n          </thead>\n          <tbody>\n            {rows.map((row, i) => (\n              <tr key={`row-${i}`}>\n                {row.map((v, j) => (\n                  <td key={`${i}-${j}`}>\n                    {v === null || v === undefined ? '' : String(v)}\n                  </td>\n                ))}\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      </div>\n    );\n  };\n\n  return (\n    <div className=\"sme-page\">\n      {/* Left rail */}\n      <aside className=\"sme-rail\">\n        <div className=\"sme-rail-section grow\">\n          <div className=\"sme-rail-header\">\n            <span>System Metrics</span>\n            <span className=\"sme-rail-count\">{filteredMetrics.length}</span>\n          </div>\n          <input\n            className=\"sme-rail-search\"\n            placeholder=\"Search metrics\"\n            value={metricSearch}\n            onChange={e => setMetricSearch(e.target.value)}\n          />\n          <div className=\"sme-rail-list\">\n            {groupedMetrics.map(g => (\n              <div key={g.group} className=\"sme-rail-group\">\n                <div className=\"sme-rail-group-header\">{g.group}</div>\n                {g.subgroups.map(sg => (\n                  <div key={sg.subgroup} className=\"sme-rail-subgroup\">\n                    <div className=\"sme-rail-subgroup-header\">\n                      {sg.subgroup}\n                    </div>\n                    {sg.metrics.map(m => (\n                      <div\n                        key={m.name}\n                        className={`sme-rail-item indent${\n                          selectedMetric === m.name ? ' active' : ''\n                        }`}\n                        onClick={() => setSelectedMetric(m.name)}\n                        title={\n                          m.description\n                            ? `${m.name}\\n\\n${m.description}`\n                            : m.name\n                        }\n                      >\n                        <span className=\"sme-rail-icon\">Σ</span>\n                        {m.display_name || m.name.replace(/^system\\.dj\\./, '')}\n                      </div>\n                    ))}\n                  </div>\n                ))}\n              </div>\n            ))}\n          </div>\n        </div>\n\n        <div className=\"sme-rail-section grow\">\n          <div className=\"sme-rail-header\">\n            <span>Dimensions</span>\n            <span className=\"sme-rail-count\">{filteredDims.length}</span>\n          </div>\n          <input\n            className=\"sme-rail-search\"\n            placeholder=\"Search dimensions\"\n            value={dimSearch}\n            onChange={e => setDimSearch(e.target.value)}\n            disabled={!selectedMetric}\n          />\n          <div className=\"sme-rail-list\">\n            {groupedDims.map(group => (\n              <div key={group.label} className=\"sme-rail-group\">\n                <div className=\"sme-rail-group-header\">{group.label}</div>\n                {group.options.map(d => {\n                  const selected =\n                    compareBy.some(c => c.value === d.value) ||\n                    xAxisDim?.value === d.value;\n                  return (\n                    <div\n                      key={d.value}\n                      className={`sme-rail-item indent${\n                        selected ? ' active' : ''\n                      }`}\n                      title={`${d.value}\\n${d.path}\\nClick to toggle in Compare-by`}\n                      onClick={() => {\n                        if (xAxisDim?.value === d.value) return;\n                        setCompareBy(prev =>\n                          prev.some(c => c.value === d.value)\n                            ? prev.filter(c => c.value !== d.value)\n                            : [...prev, d],\n                        );\n                      }}\n                    >\n                      <span className=\"sme-rail-icon\">{typeIcon(d.type)}</span>\n                      {d.label}\n                    </div>\n                  );\n                })}\n              </div>\n            ))}\n          </div>\n        </div>\n      </aside>\n\n      {/* Main pane */}\n      <div className=\"sme-main\">\n        <div className=\"sme-toolbar\">\n          <div className=\"sme-row\">\n            <span className=\"sme-label\">X-axis</span>\n            <span className=\"sme-select-wide\">\n              <Select\n                isClearable\n                placeholder=\"Choose an X-axis dimension\"\n                options={groupedDims}\n                value={xAxisDim}\n                onChange={setXAxisDim}\n                isDisabled={!selectedMetric}\n                styles={groupedSelectStyles}\n              />\n            </span>\n          </div>\n          <div className=\"sme-row\">\n            <span className=\"sme-label\">Compare by</span>\n            <span className=\"sme-select-wide\">\n              <Select\n                isMulti\n                isClearable\n                placeholder=\"Break down by dimensions\"\n                options={groupedDims\n                  .map(g => ({\n                    ...g,\n                    options: g.options.filter(d => d.value !== xAxisDim?.value),\n                  }))\n                  .filter(g => g.options.length > 0)}\n                value={compareBy}\n                onChange={vals => setCompareBy(vals || [])}\n                isDisabled={!selectedMetric}\n                styles={groupedSelectStyles}\n              />\n            </span>\n          </div>\n          {filters.map((f, i) => (\n            <div className=\"sme-filter-row\" key={`f-${i}`}>\n              <span className=\"sme-label\">{i === 0 ? 'Filter' : 'and'}</span>\n              <span className=\"sme-select\">\n                <Select\n                  placeholder=\"Dimension\"\n                  options={groupedDims}\n                  value={availableDims.find(d => d.value === f.dim) || null}\n                  onChange={o => updateFilter(i, { dim: o?.value || '' })}\n                  styles={groupedSelectStyles}\n                />\n              </span>\n              <span style={{ minWidth: 140 }}>\n                <Select\n                  options={OPERATORS}\n                  value={OPERATORS.find(o => o.value === f.op)}\n                  onChange={o => updateFilter(i, { op: o.value })}\n                />\n              </span>\n              <input\n                className=\"sme-text-input\"\n                placeholder={f.op === 'in' ? 'comma-separated values' : 'value'}\n                value={f.value}\n                onChange={e => updateFilter(i, { value: e.target.value })}\n              />\n              <button\n                className=\"sme-remove-filter\"\n                onClick={() => removeFilter(i)}\n                aria-label=\"Remove filter\"\n              >\n                ×\n              </button>\n            </div>\n          ))}\n          <div className=\"sme-row\">\n            <button\n              className=\"sme-add-filter\"\n              onClick={addFilter}\n              disabled={!selectedMetric}\n            >\n              + Add filter\n            </button>\n          </div>\n        </div>\n\n        <div className=\"sme-content\">\n          <div className=\"sme-chart-controls\">\n            <div className=\"sme-view-toggle\">\n              <button\n                className={`sme-view-btn${view === 'chart' ? ' active' : ''}`}\n                onClick={() => setView('chart')}\n              >\n                📈 Chart\n              </button>\n              <button\n                className={`sme-view-btn${view === 'table' ? ' active' : ''}`}\n                onClick={() => setView('table')}\n              >\n                ▦ Table\n              </button>\n            </div>\n            {view === 'chart' ? (\n              <div className=\"sme-view-toggle\">\n                {[\n                  { key: 'auto', label: 'Auto' },\n                  { key: 'line', label: 'Line' },\n                  { key: 'area', label: 'Area' },\n                  { key: 'bar', label: 'Bar' },\n                ].map(t => (\n                  <button\n                    key={t.key}\n                    className={`sme-view-btn${\n                      chartType === t.key ? ' active' : ''\n                    }`}\n                    onClick={() => setChartType(t.key)}\n                  >\n                    {t.label}\n                  </button>\n                ))}\n              </div>\n            ) : null}\n            <div className=\"sme-options\">\n              <label>\n                <input\n                  type=\"checkbox\"\n                  checked={startAtZero}\n                  onChange={e => setStartAtZero(e.target.checked)}\n                />\n                Start scale at zero\n              </label>\n            </div>\n          </div>\n\n          <h2 className=\"sme-chart-title\">\n            {selectedMetric ? (\n              <a\n                href={`/nodes/${selectedMetric}`}\n                target=\"_blank\"\n                rel=\"noreferrer\"\n                title={`Open ${selectedMetric}`}\n                className=\"sme-chart-title-link\"\n              >\n                {selectedMetricDisplay}\n              </a>\n            ) : (\n              'Pick a system metric'\n            )}\n          </h2>\n          {selectedMetricDescription ? (\n            <p className=\"sme-chart-description\">{selectedMetricDescription}</p>\n          ) : null}\n\n          {error ? <div className=\"sme-error\">{error}</div> : null}\n\n          {view === 'chart' ? renderChart() : renderTable()}\n        </div>\n      </div>\n    </div>\n  );\n}\n\nSystemMetricsExplorerPage.defaultProps = {\n  djClient: DataJunctionAPI,\n};\n"],"names":["selectXAxisWithScale","state","xAxisId","_yAxisId","isPanorama","selectAxisWithScale","selectXAxisTicks","selectTicksOfGraphicalItem","selectYAxisWithScale","_xAxisId","yAxisId","selectYAxisTicks","selectBandSize","createSelector","selectChartLayout","layout","xAxis","yAxis","xAxisTicks","yAxisTicks","isCategoricalAxis","getBandSizeOfAxis","selectGraphicalItemStackedData","areaSettings","_stackGroups$stackId","isXAxisCategorical","stackGroups","selectStackGroups","dataKey","stackId","groups","v","pickAreaSettings","_state","_isPanorama","selectSynchronisedAreaSettings","selectUnfilteredCartesianItems","graphicalItems","areaSettingsFromProps","cgis","getNormalizedStackId","selectArea","selectChartDataWithIndexesIfNotInPanorama","stackedData","_ref","bandSize","chartData","dataStartIndex","dataEndIndex","data","displayedData","chartBaseValue","computeArea","_excluded","_excluded2","_objectWithoutProperties","o","i","_objectWithoutPropertiesLoose","n","r","e","t","ownKeys","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","_extends","getLegendItemColor","stroke","fill","computeLegendPayloadFromAreaData","props","name","legendType","hide","getTooltipNameProp","getTooltipEntrySettings","strokeWidth","unit","renderDotItem","option","dotItem","React","className","clsx","Dot","shouldRenderDots","points","dot","Dots","clipPathId","needClip","clipDot","isClipDot","areaProps","filterProps","customDotProps","dots","entry","dotProps","dotsProps","Layer","StaticArea","_ref2","baseLine","showLabels","type","connectNulls","isRange","others","Curve","LabelList","VerticalRect","_ref3","alpha","startY","endY","isWellBehavedNumber","height","maxX","isNumber","HorizontalRect","_ref4","startX","endX","width","maxY","ClipRect","_ref5","AreaWithAnimation","_ref6","previousPointsRef","previousBaselineRef","isAnimationActive","animationBegin","animationDuration","animationEasing","onAnimationStart","onAnimationEnd","animationId","useAnimationId","isAnimating","setIsAnimating","useState","handleAnimationEnd","useCallback","handleAnimationStart","prevPoints","prevBaseLine","Animate","_ref7","prevPointsDiffFactor","stepPoints","index","prevPointIndex","prev","interpolate","stepBaseLine","isNullish","isNan","RenderArea","_ref8","useRef","AreaWithState","PureComponent","uniqueId","_filterProps","top","left","id","layerClass","dotSize","GraphicalItemClipPath","ActivePoints","defaultAreaProps","Global","AreaImpl","_useAppSelector","_resolveDefaultProps","resolveDefaultProps","activeDot","fillOpacity","everythingElse","useChartLayout","chartName","useChartName","useNeedsClip","useIsPanorama","useMemo","useAppSelector","useOffset","getBaseValue","itemBaseValue","baseValue","numericAxis","domain","domainMax","domainMin","_ref9","hasStack","isHorizontalLayout","value","getValueByDataKey","isBreakPoint","getCateCoordinateOfLine","x","Area","CartesianGraphicalItemContext","SetLegendPayload","SetTooltipEntrySettings","allowedTooltipTypes","AreaChart","forwardRef","ref","CartesianChart","arrayTooltipSearcher","PALETTE","NODE_TYPE_COLORS","colorForSeries","label","fallback","key","OPERATORS","isTemporal","typeIcon","groupedSelectStyles","base","NonZeroTooltip","active","payload","nonZero","p","jsxs","jsx","isNumericLike","ChartView","memo","resolvedChartType","startAtZero","stacked","isLine","isArea","ChartCmp","LineChart","BarChart","ResponsiveContainer","CartesianGrid","XAxis","YAxis","Tooltip","Legend","s","color","opacity","Line","Bar","parseSearch","search","filters","raw","dim","op","rest","f","SystemMetricsExplorerPage","djClient","useContext","DJClientContext","location","useLocation","navigate","useNavigate","initial","metricsList","setMetricsList","metricSearch","setMetricSearch","dimSearch","setDimSearch","selectedMetric","setSelectedMetric","availableDims","setAvailableDims","xAxisDim","setXAxisDim","compareBy","setCompareBy","setFilters","pendingXAxis","pendingCompareBy","rows","setRows","columns","setColumns","loading","setLoading","error","setError","view","setView","chartType","setChartType","setStartAtZero","useEffect","cancelled","list","normalized","item","meta","dims","opts","roleMatch","role","segments","attr","nodeDisplay","colDisplay","group","match","firstTemporal","matches","metric","m","suggested","next","current","dimensions","d","filterClauses","vals","lhs","rhs","orderby","result","metricDisplay","map","empty","xKey","breakdownKey","_a","metricCol","metricIdx","num","X","pruneEmpty","series","labels","xk","seriesWithValue","keptLabels","out","bdIdx","sKey","baseLabel","_b","xIdx","byX","seriesLabels","seriesOrder","xVal","bdVal","safe","orig","filled","row","filteredMetrics","q","groupedMetrics","groupOrder","groupMap","g","sg","subgroup","selectedMetricDisplay","selectedMetricDescription","filteredDims","groupedDims","order","byGroup","addFilter","updateFilter","patch","idx","removeFilter","_","renderChart","renderTable","c","j","selected","Select","DataJunctionAPI"],"mappings":"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","x_google_ignoreList":[0,1,2]}