@cere/cere-design-system 0.0.21 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -7353,8 +7353,307 @@ var MetricsChart = ({ history = [] }) => {
7353
7353
  ] });
7354
7354
  };
7355
7355
 
7356
+ // src/components/charts/TimeSeriesGraph/TimeSeriesGraph.tsx
7357
+ import { useCallback as useCallback6, useMemo as useMemo2, useState as useState10 } from "react";
7358
+ import {
7359
+ Box as Box24,
7360
+ Card as Card3,
7361
+ CardHeader as CardHeader3,
7362
+ CardMedia as CardMedia2,
7363
+ CircularProgress as CircularProgress7,
7364
+ Divider as Divider8,
7365
+ Stack as Stack7,
7366
+ Typography as Typography21,
7367
+ styled as styled45,
7368
+ useTheme as useTheme5
7369
+ } from "@mui/material";
7370
+ import { LineChart as LineChart3 } from "@mui/x-charts";
7371
+ import { format as format3 } from "date-fns";
7372
+
7373
+ // src/components/charts/TimeSeriesGraph/TimeRangeSelect.tsx
7374
+ import { MenuItem as MenuItem4, TextField as TextField5 } from "@mui/material";
7375
+ import { jsx as jsx87 } from "react/jsx-runtime";
7376
+ var TimeRangeSelect = ({ options: options2, value, onChange }) => /* @__PURE__ */ jsx87(
7377
+ TextField5,
7378
+ {
7379
+ select: true,
7380
+ size: "small",
7381
+ value: value ?? (options2.length > 0 ? options2[0].value : ""),
7382
+ onChange: (e) => onChange?.(e.target.value),
7383
+ "aria-label": "Time range selector",
7384
+ sx: { minWidth: 120 },
7385
+ children: options2.map((option) => /* @__PURE__ */ jsx87(MenuItem4, { value: option.value, children: option.label }, option.value))
7386
+ }
7387
+ );
7388
+
7389
+ // src/components/charts/TimeSeriesGraph/SummaryStats.tsx
7390
+ import { Stack as Stack6, Typography as Typography20 } from "@mui/material";
7391
+ import { jsx as jsx88, jsxs as jsxs40 } from "react/jsx-runtime";
7392
+ var formatSummaryValue = (value, unit) => {
7393
+ const displayValue = typeof value === "number" ? value.toLocaleString() : value;
7394
+ return unit ? `${displayValue} ${unit}` : displayValue;
7395
+ };
7396
+ var SummaryStats = ({ items }) => {
7397
+ if (items.length === 0) {
7398
+ return null;
7399
+ }
7400
+ return /* @__PURE__ */ jsx88(
7401
+ Stack6,
7402
+ {
7403
+ direction: "row",
7404
+ spacing: 3,
7405
+ padding: 2,
7406
+ flexWrap: "wrap",
7407
+ useFlexGap: true,
7408
+ role: "list",
7409
+ "aria-label": "Summary statistics",
7410
+ children: items.map((item) => /* @__PURE__ */ jsxs40(
7411
+ Stack6,
7412
+ {
7413
+ direction: "row",
7414
+ alignItems: "center",
7415
+ spacing: 1,
7416
+ role: "listitem",
7417
+ children: [
7418
+ /* @__PURE__ */ jsx88(Typography20, { variant: "body2", color: "text.secondary", children: item.label }),
7419
+ /* @__PURE__ */ jsx88(Typography20, { variant: "h5", fontWeight: 600, children: formatSummaryValue(item.value, item.unit) })
7420
+ ]
7421
+ },
7422
+ item.label
7423
+ ))
7424
+ }
7425
+ );
7426
+ };
7427
+
7428
+ // src/components/charts/TimeSeriesGraph/TimeSeriesGraph.tsx
7429
+ import { Fragment as Fragment13, jsx as jsx89, jsxs as jsxs41 } from "react/jsx-runtime";
7430
+ var ChartContainer = styled45(Box24)({
7431
+ position: "relative",
7432
+ height: 320
7433
+ });
7434
+ var LoadingOverlay = styled45(Box24)(({ theme: theme2 }) => ({
7435
+ position: "absolute",
7436
+ inset: 0,
7437
+ display: "flex",
7438
+ alignItems: "center",
7439
+ justifyContent: "center",
7440
+ backgroundColor: "rgba(255, 255, 255, 0.7)",
7441
+ zIndex: 1,
7442
+ borderRadius: theme2.shape.borderRadius
7443
+ }));
7444
+ var LegendDot = styled45(Box24, {
7445
+ shouldForwardProp: (prop) => prop !== "dotColor"
7446
+ })(({ dotColor }) => ({
7447
+ width: 14,
7448
+ height: 14,
7449
+ borderRadius: 4,
7450
+ backgroundColor: dotColor,
7451
+ flexShrink: 0
7452
+ }));
7453
+ var formatYAxisValue = (value) => {
7454
+ const absValue = Math.abs(value);
7455
+ if (absValue >= 1e9) {
7456
+ return `${(value / 1e9).toFixed(absValue % 1e9 === 0 ? 0 : 1)}B`;
7457
+ }
7458
+ if (absValue >= 1e6) {
7459
+ return `${(value / 1e6).toFixed(absValue % 1e6 === 0 ? 0 : 1)}M`;
7460
+ }
7461
+ if (absValue >= 1e3) {
7462
+ return `${(value / 1e3).toFixed(absValue % 1e3 === 0 ? 0 : 1)}K`;
7463
+ }
7464
+ return String(value);
7465
+ };
7466
+ var buildDataset = (series, hiddenSeries) => {
7467
+ const timestampMap = /* @__PURE__ */ new Map();
7468
+ series.forEach((s) => {
7469
+ if (hiddenSeries.has(s.name)) return;
7470
+ s.data.forEach((dp) => {
7471
+ const ts = dp.timestamp.getTime();
7472
+ if (!timestampMap.has(ts)) {
7473
+ timestampMap.set(ts, { timestamp: dp.timestamp });
7474
+ }
7475
+ timestampMap.get(ts)[s.name] = dp.value;
7476
+ });
7477
+ });
7478
+ return Array.from(timestampMap.values()).sort(
7479
+ (a, b) => a.timestamp.getTime() - b.timestamp.getTime()
7480
+ );
7481
+ };
7482
+ var TimeSeriesGraph = ({
7483
+ title,
7484
+ series,
7485
+ timeRangeOptions,
7486
+ selectedTimeRange,
7487
+ onTimeRangeChange,
7488
+ summaryItems,
7489
+ showSummary = true,
7490
+ headerAction,
7491
+ loading = false
7492
+ }) => {
7493
+ const theme2 = useTheme5();
7494
+ const [hiddenSeries, setHiddenSeries] = useState10(/* @__PURE__ */ new Set());
7495
+ const dataset = useMemo2(() => buildDataset(series, hiddenSeries), [series, hiddenSeries]);
7496
+ const visibleSeries = useMemo2(
7497
+ () => series.filter((s) => !hiddenSeries.has(s.name)),
7498
+ [series, hiddenSeries]
7499
+ );
7500
+ const chartColors = useMemo2(() => visibleSeries.map((s) => s.color), [visibleSeries]);
7501
+ const handleLegendToggle = useCallback6((seriesName) => {
7502
+ setHiddenSeries((prev) => {
7503
+ const next = new Set(prev);
7504
+ if (next.has(seriesName)) {
7505
+ next.delete(seriesName);
7506
+ } else {
7507
+ next.add(seriesName);
7508
+ }
7509
+ return next;
7510
+ });
7511
+ }, []);
7512
+ const timeBounds = useMemo2(() => {
7513
+ if (dataset.length === 0) return { min: void 0, max: void 0 };
7514
+ const timestamps = dataset.map((row) => row.timestamp.getTime());
7515
+ return {
7516
+ min: new Date(Math.min(...timestamps)),
7517
+ max: new Date(Math.max(...timestamps))
7518
+ };
7519
+ }, [dataset]);
7520
+ const hasData = dataset.length > 0;
7521
+ const shouldShowSummary = showSummary && summaryItems && summaryItems.length > 0;
7522
+ const headerActionElement = /* @__PURE__ */ jsxs41(Stack7, { direction: "row", spacing: 1, alignItems: "center", children: [
7523
+ headerAction,
7524
+ timeRangeOptions && timeRangeOptions.length > 0 && /* @__PURE__ */ jsx89(
7525
+ TimeRangeSelect,
7526
+ {
7527
+ options: timeRangeOptions,
7528
+ value: selectedTimeRange,
7529
+ onChange: onTimeRangeChange
7530
+ }
7531
+ )
7532
+ ] });
7533
+ const showHeader = !!title || !!headerAction || timeRangeOptions && timeRangeOptions.length > 0;
7534
+ return /* @__PURE__ */ jsxs41(
7535
+ Card3,
7536
+ {
7537
+ "aria-label": title ? `Line chart showing ${title}` : "Line chart",
7538
+ role: "figure",
7539
+ children: [
7540
+ showHeader && /* @__PURE__ */ jsx89(
7541
+ CardHeader3,
7542
+ {
7543
+ title,
7544
+ titleTypographyProps: {
7545
+ variant: "subtitle1",
7546
+ fontWeight: 500
7547
+ },
7548
+ action: headerActionElement
7549
+ }
7550
+ ),
7551
+ /* @__PURE__ */ jsxs41(CardMedia2, { children: [
7552
+ /* @__PURE__ */ jsxs41(ChartContainer, { children: [
7553
+ loading && /* @__PURE__ */ jsx89(LoadingOverlay, { role: "status", "aria-label": "Loading chart data", children: /* @__PURE__ */ jsx89(CircularProgress7, { size: 40 }) }),
7554
+ /* @__PURE__ */ jsx89(
7555
+ LineChart3,
7556
+ {
7557
+ dataset,
7558
+ axisHighlight: { x: "line", y: "none" },
7559
+ grid: { horizontal: true, vertical: false },
7560
+ margin: { top: 10, right: 20, bottom: 40, left: 50 },
7561
+ colors: chartColors.length > 0 ? chartColors : [theme2.palette.primary.main],
7562
+ slots: {
7563
+ noDataOverlay: () => null
7564
+ },
7565
+ tooltip: { trigger: hasData ? "axis" : "none" },
7566
+ yAxis: [
7567
+ {
7568
+ disableLine: true,
7569
+ disableTicks: true,
7570
+ min: hasData ? void 0 : 0,
7571
+ max: hasData ? void 0 : 100,
7572
+ tickNumber: hasData ? void 0 : 5,
7573
+ valueFormatter: (value) => formatYAxisValue(value || 0),
7574
+ tickLabelStyle: {
7575
+ fontSize: 10
7576
+ }
7577
+ }
7578
+ ],
7579
+ xAxis: [
7580
+ {
7581
+ dataKey: "timestamp",
7582
+ scaleType: "time",
7583
+ min: timeBounds.min,
7584
+ max: timeBounds.max,
7585
+ disableLine: true,
7586
+ disableTicks: true,
7587
+ valueFormatter: (date) => format3(date, "do MMM"),
7588
+ tickLabelStyle: {
7589
+ fontSize: 10
7590
+ }
7591
+ }
7592
+ ],
7593
+ series: visibleSeries.map((s) => ({
7594
+ curve: "linear",
7595
+ dataKey: s.name,
7596
+ label: s.name,
7597
+ showMark: false,
7598
+ connectNulls: false
7599
+ })),
7600
+ slotProps: {
7601
+ legend: { hidden: true }
7602
+ }
7603
+ }
7604
+ )
7605
+ ] }),
7606
+ series.length > 0 && /* @__PURE__ */ jsx89(
7607
+ Stack7,
7608
+ {
7609
+ direction: "row",
7610
+ spacing: 2,
7611
+ justifyContent: "center",
7612
+ paddingY: 1,
7613
+ flexWrap: "wrap",
7614
+ useFlexGap: true,
7615
+ role: "list",
7616
+ "aria-label": "Chart legend",
7617
+ children: series.map((s) => {
7618
+ const isHidden = hiddenSeries.has(s.name);
7619
+ return /* @__PURE__ */ jsxs41(
7620
+ Stack7,
7621
+ {
7622
+ direction: "row",
7623
+ spacing: 1,
7624
+ alignItems: "center",
7625
+ role: "listitem",
7626
+ onClick: () => handleLegendToggle(s.name),
7627
+ sx: {
7628
+ cursor: "pointer",
7629
+ opacity: isHidden ? 0.4 : 1,
7630
+ transition: "opacity 0.2s ease",
7631
+ userSelect: "none"
7632
+ },
7633
+ "aria-pressed": !isHidden,
7634
+ "aria-label": `Toggle ${s.name} visibility`,
7635
+ children: [
7636
+ /* @__PURE__ */ jsx89(LegendDot, { dotColor: s.color }),
7637
+ /* @__PURE__ */ jsx89(Typography21, { variant: "body2", children: s.name })
7638
+ ]
7639
+ },
7640
+ s.name
7641
+ );
7642
+ })
7643
+ }
7644
+ )
7645
+ ] }),
7646
+ shouldShowSummary && /* @__PURE__ */ jsxs41(Fragment13, { children: [
7647
+ /* @__PURE__ */ jsx89(Divider8, {}),
7648
+ /* @__PURE__ */ jsx89(SummaryStats, { items: summaryItems })
7649
+ ] })
7650
+ ]
7651
+ }
7652
+ );
7653
+ };
7654
+
7356
7655
  // src/components/third-party/FlowEditor.tsx
7357
- import { useCallback as useCallback6 } from "react";
7656
+ import { useCallback as useCallback7 } from "react";
7358
7657
  import ReactFlow, {
7359
7658
  Background,
7360
7659
  Controls,
@@ -7363,10 +7662,10 @@ import ReactFlow, {
7363
7662
  BackgroundVariant,
7364
7663
  ConnectionLineType
7365
7664
  } from "reactflow";
7366
- import { Box as Box24 } from "@mui/material";
7367
- import { useTheme as useTheme5 } from "@mui/material/styles";
7665
+ import { Box as Box25 } from "@mui/material";
7666
+ import { useTheme as useTheme6 } from "@mui/material/styles";
7368
7667
  import { Background as Background2, Controls as Controls2, MiniMap as MiniMap2, Panel, BackgroundVariant as BackgroundVariant2, ConnectionLineType as ConnectionLineType2 } from "reactflow";
7369
- import { jsx as jsx87, jsxs as jsxs40 } from "react/jsx-runtime";
7668
+ import { jsx as jsx90, jsxs as jsxs42 } from "react/jsx-runtime";
7370
7669
  var FlowEditor = ({
7371
7670
  nodes,
7372
7671
  edges,
@@ -7383,8 +7682,8 @@ var FlowEditor = ({
7383
7682
  onInit,
7384
7683
  ...reactFlowProps
7385
7684
  }) => {
7386
- const theme2 = useTheme5();
7387
- const handleInit = useCallback6(
7685
+ const theme2 = useTheme6();
7686
+ const handleInit = useCallback7(
7388
7687
  (instance) => {
7389
7688
  if (onInit) {
7390
7689
  onInit(instance);
@@ -7392,8 +7691,8 @@ var FlowEditor = ({
7392
7691
  },
7393
7692
  [onInit]
7394
7693
  );
7395
- return /* @__PURE__ */ jsx87(ReactFlowProvider, { children: /* @__PURE__ */ jsx87(
7396
- Box24,
7694
+ return /* @__PURE__ */ jsx90(ReactFlowProvider, { children: /* @__PURE__ */ jsx90(
7695
+ Box25,
7397
7696
  {
7398
7697
  sx: {
7399
7698
  width: "100%",
@@ -7405,7 +7704,7 @@ var FlowEditor = ({
7405
7704
  ...containerProps?.sx
7406
7705
  },
7407
7706
  ...containerProps,
7408
- children: /* @__PURE__ */ jsxs40(
7707
+ children: /* @__PURE__ */ jsxs42(
7409
7708
  ReactFlow,
7410
7709
  {
7411
7710
  nodes,
@@ -7427,7 +7726,7 @@ var FlowEditor = ({
7427
7726
  },
7428
7727
  ...reactFlowProps,
7429
7728
  children: [
7430
- showBackground && /* @__PURE__ */ jsx87(
7729
+ showBackground && /* @__PURE__ */ jsx90(
7431
7730
  Background,
7432
7731
  {
7433
7732
  variant: backgroundVariant,
@@ -7436,8 +7735,8 @@ var FlowEditor = ({
7436
7735
  color: theme2.palette.divider
7437
7736
  }
7438
7737
  ),
7439
- showControls && /* @__PURE__ */ jsx87(Controls, {}),
7440
- showMinimap && /* @__PURE__ */ jsx87(
7738
+ showControls && /* @__PURE__ */ jsx90(Controls, {}),
7739
+ showMinimap && /* @__PURE__ */ jsx90(
7441
7740
  MiniMap,
7442
7741
  {
7443
7742
  nodeColor: (node) => {
@@ -7460,15 +7759,15 @@ var FlowEditor = ({
7460
7759
  };
7461
7760
 
7462
7761
  // src/components/third-party/CodeEditor.tsx
7463
- import { useCallback as useCallback7, useEffect as useEffect2, useState as useState10, useRef as useRef2 } from "react";
7762
+ import { useCallback as useCallback8, useEffect as useEffect2, useState as useState11, useRef as useRef2 } from "react";
7464
7763
  import Editor from "@monaco-editor/react";
7465
- import { Box as Box25, IconButton as IconButton11, Tooltip as Tooltip7 } from "@mui/material";
7764
+ import { Box as Box26, IconButton as IconButton11, Tooltip as Tooltip7 } from "@mui/material";
7466
7765
  import FullscreenIcon from "@mui/icons-material/Fullscreen";
7467
7766
  import FullscreenExitIcon from "@mui/icons-material/FullscreenExit";
7468
7767
  import ErrorOutlineIcon from "@mui/icons-material/ErrorOutline";
7469
7768
  import ExpandMoreIcon3 from "@mui/icons-material/ExpandMore";
7470
7769
  import ExpandLessIcon from "@mui/icons-material/ExpandLess";
7471
- import { jsx as jsx88, jsxs as jsxs41 } from "react/jsx-runtime";
7770
+ import { jsx as jsx91, jsxs as jsxs43 } from "react/jsx-runtime";
7472
7771
  var configureTypeScript = (monaco) => {
7473
7772
  monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
7474
7773
  target: monaco.languages.typescript.ScriptTarget.ES2020,
@@ -7512,15 +7811,15 @@ var CodeEditor = ({
7512
7811
  containerProps,
7513
7812
  typeDefinitions
7514
7813
  }) => {
7515
- const [isEditorReady, setIsEditorReady] = useState10(false);
7516
- const [validationErrors, setValidationErrors] = useState10([]);
7517
- const [isFullscreen, setIsFullscreen] = useState10(false);
7518
- const [tsCode, setTsCode] = useState10(value);
7519
- const [actualHeight, setActualHeight] = useState10(
7814
+ const [isEditorReady, setIsEditorReady] = useState11(false);
7815
+ const [validationErrors, setValidationErrors] = useState11([]);
7816
+ const [isFullscreen, setIsFullscreen] = useState11(false);
7817
+ const [tsCode, setTsCode] = useState11(value);
7818
+ const [actualHeight, setActualHeight] = useState11(
7520
7819
  typeof height === "number" ? `${height}px` : height
7521
7820
  );
7522
- const [showProblems, setShowProblems] = useState10(false);
7523
- const [hasUserToggledProblems, setHasUserToggledProblems] = useState10(false);
7821
+ const [showProblems, setShowProblems] = useState11(false);
7822
+ const [hasUserToggledProblems, setHasUserToggledProblems] = useState11(false);
7524
7823
  useEffect2(() => {
7525
7824
  if (hasUserToggledProblems) return;
7526
7825
  if (validationErrors.length > 0) {
@@ -7540,14 +7839,14 @@ var CodeEditor = ({
7540
7839
  setActualHeight(typeof height === "number" ? `${height}px` : height);
7541
7840
  }
7542
7841
  }, [height, isFullscreen]);
7543
- const toggleFullscreen = useCallback7(() => {
7842
+ const toggleFullscreen = useCallback8(() => {
7544
7843
  const newFullscreenState = !isFullscreen;
7545
7844
  setIsFullscreen(newFullscreenState);
7546
7845
  if (onFullscreenChange) {
7547
7846
  onFullscreenChange(newFullscreenState);
7548
7847
  }
7549
7848
  }, [isFullscreen, onFullscreenChange]);
7550
- const gotoMarker = useCallback7(
7849
+ const gotoMarker = useCallback8(
7551
7850
  (marker) => {
7552
7851
  const ed = finalEditorRef?.current;
7553
7852
  if (!ed) return;
@@ -7579,7 +7878,7 @@ var CodeEditor = ({
7579
7878
  window.removeEventListener("keydown", escapeHandler, { capture: true });
7580
7879
  };
7581
7880
  }, [isFullscreen, onFullscreenChange]);
7582
- const handleEditorDidMount = useCallback7(
7881
+ const handleEditorDidMount = useCallback8(
7583
7882
  (editor, monaco) => {
7584
7883
  console.log("CodeEditor: onMount called", { editor: !!editor, monaco: !!monaco });
7585
7884
  try {
@@ -7680,8 +7979,8 @@ var CodeEditor = ({
7680
7979
  theme: themeProp || "vs",
7681
7980
  ...options2
7682
7981
  };
7683
- return /* @__PURE__ */ jsx88(
7684
- Box25,
7982
+ return /* @__PURE__ */ jsx91(
7983
+ Box26,
7685
7984
  {
7686
7985
  sx: {
7687
7986
  display: "flex",
@@ -7701,8 +8000,8 @@ var CodeEditor = ({
7701
8000
  pb: isFullscreen ? 2 : 0,
7702
8001
  overflow: isFullscreen ? "hidden" : "visible"
7703
8002
  },
7704
- children: /* @__PURE__ */ jsxs41(
7705
- Box25,
8003
+ children: /* @__PURE__ */ jsxs43(
8004
+ Box26,
7706
8005
  {
7707
8006
  sx: {
7708
8007
  flex: 1,
@@ -7717,7 +8016,7 @@ var CodeEditor = ({
7717
8016
  },
7718
8017
  ...containerProps,
7719
8018
  children: [
7720
- /* @__PURE__ */ jsx88(Tooltip7, { title: isFullscreen ? "Exit Fullscreen" : "Fullscreen", children: /* @__PURE__ */ jsx88(
8019
+ /* @__PURE__ */ jsx91(Tooltip7, { title: isFullscreen ? "Exit Fullscreen" : "Fullscreen", children: /* @__PURE__ */ jsx91(
7721
8020
  IconButton11,
7722
8021
  {
7723
8022
  onClick: toggleFullscreen,
@@ -7735,11 +8034,11 @@ var CodeEditor = ({
7735
8034
  },
7736
8035
  boxShadow: 1
7737
8036
  },
7738
- children: isFullscreen ? /* @__PURE__ */ jsx88(FullscreenExitIcon, { fontSize: "small" }) : /* @__PURE__ */ jsx88(FullscreenIcon, { fontSize: "small" })
8037
+ children: isFullscreen ? /* @__PURE__ */ jsx91(FullscreenExitIcon, { fontSize: "small" }) : /* @__PURE__ */ jsx91(FullscreenIcon, { fontSize: "small" })
7739
8038
  }
7740
8039
  ) }),
7741
- /* @__PURE__ */ jsx88(
7742
- Box25,
8040
+ /* @__PURE__ */ jsx91(
8041
+ Box26,
7743
8042
  {
7744
8043
  sx: {
7745
8044
  flex: 1,
@@ -7750,7 +8049,7 @@ var CodeEditor = ({
7750
8049
  position: "relative",
7751
8050
  height: isFullscreen ? "100%" : actualHeight
7752
8051
  },
7753
- children: /* @__PURE__ */ jsx88(
8052
+ children: /* @__PURE__ */ jsx91(
7754
8053
  Editor,
7755
8054
  {
7756
8055
  height: "100%",
@@ -7761,7 +8060,7 @@ var CodeEditor = ({
7761
8060
  onMount: handleEditorDidMount,
7762
8061
  theme: themeProp || "vs",
7763
8062
  options: defaultOptions,
7764
- loading: /* @__PURE__ */ jsx88(Box25, { sx: { p: 2, textAlign: "center" }, children: "Loading Monaco Editor..." }),
8063
+ loading: /* @__PURE__ */ jsx91(Box26, { sx: { p: 2, textAlign: "center" }, children: "Loading Monaco Editor..." }),
7765
8064
  beforeMount: (monaco) => {
7766
8065
  console.log("CodeEditor: beforeMount called", { monaco: !!monaco });
7767
8066
  }
@@ -7769,8 +8068,8 @@ var CodeEditor = ({
7769
8068
  )
7770
8069
  }
7771
8070
  ),
7772
- validationErrors.length > 0 && /* @__PURE__ */ jsxs41(
7773
- Box25,
8071
+ validationErrors.length > 0 && /* @__PURE__ */ jsxs43(
8072
+ Box26,
7774
8073
  {
7775
8074
  sx: {
7776
8075
  borderTop: 1,
@@ -7783,8 +8082,8 @@ var CodeEditor = ({
7783
8082
  transition: "max-height 0.2s ease"
7784
8083
  },
7785
8084
  children: [
7786
- /* @__PURE__ */ jsxs41(
7787
- Box25,
8085
+ /* @__PURE__ */ jsxs43(
8086
+ Box26,
7788
8087
  {
7789
8088
  sx: {
7790
8089
  display: "flex",
@@ -7798,15 +8097,15 @@ var CodeEditor = ({
7798
8097
  color: "text.secondary"
7799
8098
  },
7800
8099
  children: [
7801
- /* @__PURE__ */ jsx88(ErrorOutlineIcon, { color: "error", fontSize: "small" }),
7802
- /* @__PURE__ */ jsx88(Box25, { sx: { fontWeight: 600, color: "text.primary" }, children: "Problems" }),
7803
- /* @__PURE__ */ jsxs41(Box25, { sx: { ml: 1 }, children: [
8100
+ /* @__PURE__ */ jsx91(ErrorOutlineIcon, { color: "error", fontSize: "small" }),
8101
+ /* @__PURE__ */ jsx91(Box26, { sx: { fontWeight: 600, color: "text.primary" }, children: "Problems" }),
8102
+ /* @__PURE__ */ jsxs43(Box26, { sx: { ml: 1 }, children: [
7804
8103
  validationErrors.length,
7805
8104
  " error",
7806
8105
  validationErrors.length > 1 ? "s" : ""
7807
8106
  ] }),
7808
- /* @__PURE__ */ jsx88(Box25, { sx: { flex: 1 } }),
7809
- /* @__PURE__ */ jsx88(
8107
+ /* @__PURE__ */ jsx91(Box26, { sx: { flex: 1 } }),
8108
+ /* @__PURE__ */ jsx91(
7810
8109
  IconButton11,
7811
8110
  {
7812
8111
  size: "small",
@@ -7815,14 +8114,14 @@ var CodeEditor = ({
7815
8114
  setHasUserToggledProblems(true);
7816
8115
  setShowProblems((s) => !s);
7817
8116
  },
7818
- children: showProblems ? /* @__PURE__ */ jsx88(ExpandMoreIcon3, { fontSize: "small" }) : /* @__PURE__ */ jsx88(ExpandLessIcon, { fontSize: "small" })
8117
+ children: showProblems ? /* @__PURE__ */ jsx91(ExpandMoreIcon3, { fontSize: "small" }) : /* @__PURE__ */ jsx91(ExpandLessIcon, { fontSize: "small" })
7819
8118
  }
7820
8119
  )
7821
8120
  ]
7822
8121
  }
7823
8122
  ),
7824
- showProblems && /* @__PURE__ */ jsx88(Box25, { sx: { overflow: "auto" }, children: validationErrors.map((error, index) => /* @__PURE__ */ jsxs41(
7825
- Box25,
8123
+ showProblems && /* @__PURE__ */ jsx91(Box26, { sx: { overflow: "auto" }, children: validationErrors.map((error, index) => /* @__PURE__ */ jsxs43(
8124
+ Box26,
7826
8125
  {
7827
8126
  onClick: () => gotoMarker(error),
7828
8127
  sx: {
@@ -7838,12 +8137,12 @@ var CodeEditor = ({
7838
8137
  fontSize: "0.85rem"
7839
8138
  },
7840
8139
  children: [
7841
- /* @__PURE__ */ jsx88(ErrorOutlineIcon, { color: "error", sx: { fontSize: 18 } }),
7842
- /* @__PURE__ */ jsxs41(Box25, { sx: { color: "text.secondary", width: 64 }, children: [
8140
+ /* @__PURE__ */ jsx91(ErrorOutlineIcon, { color: "error", sx: { fontSize: 18 } }),
8141
+ /* @__PURE__ */ jsxs43(Box26, { sx: { color: "text.secondary", width: 64 }, children: [
7843
8142
  "Line ",
7844
8143
  error.startLineNumber
7845
8144
  ] }),
7846
- /* @__PURE__ */ jsx88(Box25, { sx: { color: "text.primary", flex: 1, minWidth: 0 }, children: error.message })
8145
+ /* @__PURE__ */ jsx91(Box26, { sx: { color: "text.primary", flex: 1, minWidth: 0 }, children: error.message })
7847
8146
  ]
7848
8147
  },
7849
8148
  `${error.startLineNumber}-${error.startColumn}-${index}`
@@ -7968,11 +8267,14 @@ export {
7968
8267
  StepLabel,
7969
8268
  Stepper,
7970
8269
  StorageAppIcon,
8270
+ SummaryStats,
7971
8271
  Switch,
7972
8272
  Tab,
7973
8273
  Table,
7974
8274
  TableHeader,
7975
8275
  TextField,
8276
+ TimeRangeSelect,
8277
+ TimeSeriesGraph,
7976
8278
  ToggleButton,
7977
8279
  ToggleButtonGroup,
7978
8280
  Toolbar,