@cere/cere-design-system 0.1.0 → 0.2.0
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/README.md +76 -0
- package/dist/buttons.d.mts +27 -22
- package/dist/buttons.d.ts +27 -22
- package/dist/buttons.js +5 -5
- package/dist/buttons.mjs +4 -4
- package/dist/charts.d.mts +1 -23
- package/dist/charts.d.ts +1 -23
- package/dist/charts.js +2 -9
- package/dist/charts.js.map +1 -1
- package/dist/charts.mjs +1 -8
- package/dist/{chunk-THQKYTQE.js → chunk-2KDN37PQ.js} +28 -32
- package/dist/chunk-2KDN37PQ.js.map +1 -0
- package/dist/{chunk-3WCMINE5.mjs → chunk-34LFXT6C.mjs} +25 -29
- package/dist/chunk-34LFXT6C.mjs.map +1 -0
- package/dist/chunk-3KCXCVOX.mjs +411 -0
- package/dist/chunk-3KCXCVOX.mjs.map +1 -0
- package/dist/{chunk-NXTVJ6PY.js → chunk-4OKTICU5.js} +10 -10
- package/dist/chunk-4OKTICU5.js.map +1 -0
- package/dist/{chunk-FN5YL4BK.js → chunk-72TQ56EP.js} +47 -45
- package/dist/chunk-72TQ56EP.js.map +1 -0
- package/dist/{chunk-QYYQYZHV.js → chunk-7KXKK2RE.js} +3 -5
- package/dist/chunk-7KXKK2RE.js.map +1 -0
- package/dist/{chunk-CCN6M4LI.js → chunk-ARSCL4ZZ.js} +18 -10
- package/dist/chunk-ARSCL4ZZ.js.map +1 -0
- package/dist/chunk-AWVNEU6R.mjs +1478 -0
- package/dist/chunk-AWVNEU6R.mjs.map +1 -0
- package/dist/{chunk-CUCKULYC.mjs → chunk-BH4FNZKK.mjs} +74 -1260
- package/dist/chunk-BH4FNZKK.mjs.map +1 -0
- package/dist/{chunk-FFZ5S7PQ.mjs → chunk-BOQPWZIB.mjs} +6 -5
- package/dist/chunk-BOQPWZIB.mjs.map +1 -0
- package/dist/chunk-BT7XUTT5.mjs +392 -0
- package/dist/chunk-BT7XUTT5.mjs.map +1 -0
- package/dist/{chunk-ATIFLPH6.mjs → chunk-D7D25O6E.mjs} +4 -2
- package/dist/{chunk-ATIFLPH6.mjs.map → chunk-D7D25O6E.mjs.map} +1 -1
- package/dist/{chunk-JS4IB5IU.mjs → chunk-DRGMEIPT.mjs} +2 -2
- package/dist/chunk-DRGMEIPT.mjs.map +1 -0
- package/dist/{chunk-KF2Y7HO3.js → chunk-DZXNYLVG.js} +43 -246
- package/dist/chunk-DZXNYLVG.js.map +1 -0
- package/dist/{chunk-IE6GCHDI.mjs → chunk-GR52ENYI.mjs} +26 -29
- package/dist/chunk-GR52ENYI.mjs.map +1 -0
- package/dist/chunk-GTBKQXXI.js +1472 -0
- package/dist/chunk-GTBKQXXI.js.map +1 -0
- package/dist/{chunk-463SRKKD.js → chunk-HJ24WKU4.js} +14 -5
- package/dist/chunk-HJ24WKU4.js.map +1 -0
- package/dist/{chunk-EOF3QNPF.js → chunk-KKIKOIMP.js} +140 -1028
- package/dist/chunk-KKIKOIMP.js.map +1 -0
- package/dist/{chunk-MNM6HE72.js → chunk-LVJSKRX3.js} +16 -15
- package/dist/chunk-LVJSKRX3.js.map +1 -0
- package/dist/{chunk-KPDYKK3V.js → chunk-PFZZJZ64.js} +8 -8
- package/dist/{chunk-KPDYKK3V.js.map → chunk-PFZZJZ64.js.map} +1 -1
- package/dist/{chunk-KVBMZNWT.mjs → chunk-POCAW2G4.mjs} +18 -10
- package/dist/chunk-POCAW2G4.mjs.map +1 -0
- package/dist/{chunk-L2TIGA7I.js → chunk-QCFLZ7X3.js} +39 -42
- package/dist/chunk-QCFLZ7X3.js.map +1 -0
- package/dist/{chunk-6EUAU67C.mjs → chunk-SG2TD7FQ.mjs} +8 -8
- package/dist/chunk-SG2TD7FQ.mjs.map +1 -0
- package/dist/{chunk-QY65OUAC.mjs → chunk-SSFALO6S.mjs} +13 -4
- package/dist/chunk-SSFALO6S.mjs.map +1 -0
- package/dist/{chunk-PWF2NJDB.mjs → chunk-WC2TCWXK.mjs} +82 -14
- package/dist/chunk-WC2TCWXK.mjs.map +1 -0
- package/dist/{chunk-ZGCN5WCG.js → chunk-XZZZ4MZV.js} +83 -15
- package/dist/chunk-XZZZ4MZV.js.map +1 -0
- package/dist/chunk-YCDCQSYH.js +411 -0
- package/dist/chunk-YCDCQSYH.js.map +1 -0
- package/dist/{chunk-CWJ4OU6W.mjs → chunk-ZDAZYIXB.mjs} +2 -4
- package/dist/chunk-ZDAZYIXB.mjs.map +1 -0
- package/dist/feedback.d.mts +20 -8
- package/dist/feedback.d.ts +20 -8
- package/dist/feedback.js +5 -5
- package/dist/feedback.mjs +4 -4
- package/dist/fonts/HumanSans-BlackOblique.otf +0 -0
- package/dist/fonts/HumanSans-Thin.otf +0 -0
- package/dist/fonts/HumanSans-ThinOblique.otf +0 -0
- package/dist/fonts/human-sans-font.css +88 -0
- package/dist/fonts/human-sans.css +3 -0
- package/dist/fonts/inter.css +3 -0
- package/dist/icons.d.mts +2 -3
- package/dist/icons.d.ts +2 -3
- package/dist/icons.js +2 -2
- package/dist/icons.mjs +1 -1
- package/dist/index.d.mts +37 -8
- package/dist/index.d.ts +37 -8
- package/dist/index.js +23 -90
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +46 -113
- package/dist/index.mjs.map +1 -1
- package/dist/inputs.d.mts +23 -3
- package/dist/inputs.d.ts +23 -3
- package/dist/inputs.js +5 -5
- package/dist/inputs.js.map +1 -1
- package/dist/inputs.mjs +15 -15
- package/dist/layout.d.mts +37 -283
- package/dist/layout.d.ts +37 -283
- package/dist/layout.js +8 -32
- package/dist/layout.js.map +1 -1
- package/dist/layout.mjs +16 -40
- package/dist/navigation.d.mts +9 -114
- package/dist/navigation.d.ts +9 -114
- package/dist/navigation.js +5 -9
- package/dist/navigation.js.map +1 -1
- package/dist/navigation.mjs +6 -10
- package/dist/third-party.d.mts +3 -527
- package/dist/third-party.d.ts +3 -527
- package/dist/third-party.js +2 -40
- package/dist/third-party.js.map +1 -1
- package/dist/third-party.mjs +3 -41
- package/dist/tokens.css +45 -71
- package/dist/utilities.js +2 -4
- package/dist/utilities.js.map +1 -1
- package/dist/utilities.mjs +2 -4
- package/package.json +23 -9
- package/dist/WorkflowNode-BnxXO6t_.d.mts +0 -46
- package/dist/WorkflowNode-BnxXO6t_.d.ts +0 -46
- package/dist/chunk-27JEWSWA.mjs +0 -233
- package/dist/chunk-27JEWSWA.mjs.map +0 -1
- package/dist/chunk-3WCMINE5.mjs.map +0 -1
- package/dist/chunk-463SRKKD.js.map +0 -1
- package/dist/chunk-6EUAU67C.mjs.map +0 -1
- package/dist/chunk-AIY6222Q.js +0 -11
- package/dist/chunk-AIY6222Q.js.map +0 -1
- package/dist/chunk-AJBM7IE6.mjs +0 -2366
- package/dist/chunk-AJBM7IE6.mjs.map +0 -1
- package/dist/chunk-CCN6M4LI.js.map +0 -1
- package/dist/chunk-CUCKULYC.mjs.map +0 -1
- package/dist/chunk-CWJ4OU6W.mjs.map +0 -1
- package/dist/chunk-EOF3QNPF.js.map +0 -1
- package/dist/chunk-FFZ5S7PQ.mjs.map +0 -1
- package/dist/chunk-FN5YL4BK.js.map +0 -1
- package/dist/chunk-HLH2VWXL.js +0 -2658
- package/dist/chunk-HLH2VWXL.js.map +0 -1
- package/dist/chunk-IE6GCHDI.mjs.map +0 -1
- package/dist/chunk-JS4IB5IU.mjs.map +0 -1
- package/dist/chunk-KF2Y7HO3.js.map +0 -1
- package/dist/chunk-KVBMZNWT.mjs.map +0 -1
- package/dist/chunk-L2TIGA7I.js.map +0 -1
- package/dist/chunk-MNM6HE72.js.map +0 -1
- package/dist/chunk-NXTVJ6PY.js.map +0 -1
- package/dist/chunk-PWF2NJDB.mjs.map +0 -1
- package/dist/chunk-QD6RLAO2.mjs +0 -11
- package/dist/chunk-QD6RLAO2.mjs.map +0 -1
- package/dist/chunk-QY65OUAC.mjs.map +0 -1
- package/dist/chunk-QYYQYZHV.js.map +0 -1
- package/dist/chunk-T7LPABOL.mjs +0 -595
- package/dist/chunk-T7LPABOL.mjs.map +0 -1
- package/dist/chunk-THQKYTQE.js.map +0 -1
- package/dist/chunk-X7E6GMFL.js +0 -233
- package/dist/chunk-X7E6GMFL.js.map +0 -1
- package/dist/chunk-XF66WQZE.mjs +0 -1535
- package/dist/chunk-XF66WQZE.mjs.map +0 -1
- package/dist/chunk-YQOZPLTY.js +0 -1535
- package/dist/chunk-YQOZPLTY.js.map +0 -1
- package/dist/chunk-ZGCN5WCG.js.map +0 -1
- package/dist/index.css +0 -79
- package/dist/index.css.map +0 -1
- /package/dist/{HumanSans-Black-C4YJONK7.otf → fonts/HumanSans-Black.otf} +0 -0
- /package/dist/{HumanSans-Bold-4EAJ3L3T.otf → fonts/HumanSans-Bold.otf} +0 -0
- /package/dist/{HumanSans-BoldOblique-4D325T4F.otf → fonts/HumanSans-BoldOblique.otf} +0 -0
- /package/dist/{HumanSans-ExtraLight-VL7DEKQ4.otf → fonts/HumanSans-ExtraLight.otf} +0 -0
- /package/dist/{HumanSans-ExtraLightOblique-VK2JTUXF.otf → fonts/HumanSans-ExtraLightOblique.otf} +0 -0
- /package/dist/{HumanSans-Light-YV7AFKRB.otf → fonts/HumanSans-Light.otf} +0 -0
- /package/dist/{HumanSans-LightOblique-VIXV7QA6.otf → fonts/HumanSans-LightOblique.otf} +0 -0
- /package/dist/{HumanSans-Medium-UULJ3PIR.otf → fonts/HumanSans-Medium.otf} +0 -0
- /package/dist/{HumanSans-MediumOblique-M7FHDZRS.otf → fonts/HumanSans-MediumOblique.otf} +0 -0
- /package/dist/{HumanSans-Regular-QMFEP3F6.otf → fonts/HumanSans-Regular.otf} +0 -0
- /package/dist/{HumanSans-RegularOblique-YPKQJAAM.otf → fonts/HumanSans-RegularOblique.otf} +0 -0
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var _chunkFN5YL4BKjs = require('./chunk-FN5YL4BK.js');
|
|
7
|
-
|
|
8
|
-
// src/components/charts/ChartWidget/ChartWidget.tsx
|
|
9
|
-
var _material = require('@mui/material');
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/components/charts/ChartWidget/ChartWidget.tsx
|
|
2
|
+
var _Box = require('@mui/material/Box'); var _Box2 = _interopRequireDefault(_Box);
|
|
3
|
+
var _Stack = require('@mui/material/Stack'); var _Stack2 = _interopRequireDefault(_Stack);
|
|
4
|
+
var _Typography = require('@mui/material/Typography'); var _Typography2 = _interopRequireDefault(_Typography);
|
|
5
|
+
var _styles = require('@mui/material/styles');
|
|
10
6
|
var _xcharts = require('@mui/x-charts');
|
|
11
7
|
var _bytesize = require('byte-size'); var _bytesize2 = _interopRequireDefault(_bytesize);
|
|
12
8
|
var _datefns = require('date-fns');
|
|
13
9
|
var _jsxruntime = require('react/jsx-runtime');
|
|
14
|
-
var Chart =
|
|
10
|
+
var Chart = _styles.styled.call(void 0, (0, _Box2.default))(() => ({
|
|
15
11
|
height: 200
|
|
16
12
|
}));
|
|
17
13
|
var ChartWidget = ({
|
|
@@ -20,10 +16,10 @@ var ChartWidget = ({
|
|
|
20
16
|
history,
|
|
21
17
|
formatValue = (value2) => _bytesize2.default.call(void 0, value2 || 0).toString()
|
|
22
18
|
}) => {
|
|
23
|
-
const theme =
|
|
24
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
25
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
26
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
19
|
+
const theme = _styles.useTheme.call(void 0, );
|
|
20
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _Stack2.default, { spacing: 1, children: [
|
|
21
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Typography2.default, { variant: "caption", color: "text.secondary", children: title }),
|
|
22
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Typography2.default, { fontWeight: "bold", children: value }),
|
|
27
23
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, Chart, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
28
24
|
_xcharts.LineChart,
|
|
29
25
|
{
|
|
@@ -78,213 +74,14 @@ var ChartWidget = ({
|
|
|
78
74
|
] });
|
|
79
75
|
};
|
|
80
76
|
|
|
81
|
-
// src/components/charts/MetricsChart/MetricsChart.tsx
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
var _hooks = require('@mui/x-charts/hooks');
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
// src/components/charts/MetricsChart/PeriodSelect.tsx
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
var options = [
|
|
91
|
-
/**
|
|
92
|
-
* TODO: Enable the options below when the backend supports them
|
|
93
|
-
*/
|
|
94
|
-
// { value: 'hour', label: 'Last hour' },
|
|
95
|
-
// { value: 'day', label: '24 hours' },
|
|
96
|
-
{ value: "week", label: "1 week" },
|
|
97
|
-
{ value: "month", label: "1 month" }
|
|
98
|
-
];
|
|
99
|
-
var PeriodSelect = ({ value, onChange }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
100
|
-
_material.TextField,
|
|
101
|
-
{
|
|
102
|
-
select: true,
|
|
103
|
-
size: "small",
|
|
104
|
-
value,
|
|
105
|
-
defaultValue: options[0].value,
|
|
106
|
-
onChange: (e) => _optionalChain([onChange, 'optionalCall', _4 => _4(e.target.value)]),
|
|
107
|
-
children: options.map(({ value: value2, label }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.MenuItem, { value: value2, children: label }, value2))
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
// src/components/charts/MetricsChart/MetricsChart.tsx
|
|
112
|
-
var _react = require('react');
|
|
113
|
-
|
|
114
|
-
var mapPeriodToFromDate = (period = "month") => {
|
|
115
|
-
const date = /* @__PURE__ */ new Date();
|
|
116
|
-
if (period === "hour") {
|
|
117
|
-
return _datefns.subHours.call(void 0, date, 1);
|
|
118
|
-
}
|
|
119
|
-
if (period === "day") {
|
|
120
|
-
return _datefns.subHours.call(void 0, date, 24);
|
|
121
|
-
}
|
|
122
|
-
if (period === "week") {
|
|
123
|
-
return _datefns.startOfDay.call(void 0, _datefns.subWeeks.call(void 0, date, 1));
|
|
124
|
-
}
|
|
125
|
-
return _datefns.startOfDay.call(void 0, _datefns.subMonths.call(void 0, date, 1));
|
|
126
|
-
};
|
|
127
|
-
var Chart2 = _material.styled.call(void 0, (0, _xcharts.LineChart))({
|
|
128
|
-
height: 320,
|
|
129
|
-
marginBottom: 16
|
|
130
|
-
});
|
|
131
|
-
var NoDataRect = _material.styled.call(void 0, "rect")({
|
|
132
|
-
fill: _chunkFN5YL4BKjs.deploymentSurfaceTokens.highlightBg
|
|
133
|
-
});
|
|
134
|
-
var LoadingText = _material.styled.call(void 0, "text")(({ theme }) => ({
|
|
135
|
-
stroke: "none",
|
|
136
|
-
fill: theme.palette.text.primary,
|
|
137
|
-
shapeRendering: "crispEdges",
|
|
138
|
-
textAnchor: "middle",
|
|
139
|
-
dominantBaseline: "middle"
|
|
140
|
-
}));
|
|
141
|
-
var MetricsChart = ({ history = [] }) => {
|
|
142
|
-
const theme = _material.useTheme.call(void 0, );
|
|
143
|
-
const [period, setPeriod] = _react.useState.call(void 0, "week");
|
|
144
|
-
const periodFrom = _react.useMemo.call(void 0, () => mapPeriodToFromDate(period), [period]);
|
|
145
|
-
const periodHistory = _react.useMemo.call(void 0,
|
|
146
|
-
() => history.filter((record) => record.recordTime > periodFrom),
|
|
147
|
-
[history, periodFrom]
|
|
148
|
-
);
|
|
149
|
-
const total = _react.useMemo.call(void 0,
|
|
150
|
-
() => periodHistory.reduce(
|
|
151
|
-
(acc, record) => ({
|
|
152
|
-
gets: acc.gets + record.gets,
|
|
153
|
-
puts: acc.puts + record.puts,
|
|
154
|
-
storedBytes: acc.storedBytes + record.storedBytes,
|
|
155
|
-
transferredBytes: acc.transferredBytes + record.transferredBytes
|
|
156
|
-
}),
|
|
157
|
-
{ gets: 0, puts: 0, storedBytes: 0, transferredBytes: 0 }
|
|
158
|
-
),
|
|
159
|
-
[periodHistory]
|
|
160
|
-
);
|
|
161
|
-
const NoDataOverlay = () => {
|
|
162
|
-
const yScale = _hooks.useYScale.call(void 0, );
|
|
163
|
-
const { left, width, height } = _hooks.useDrawingArea.call(void 0, );
|
|
164
|
-
const [, top] = yScale.range();
|
|
165
|
-
const padding = { top: 8, bottom: 8, left: 20, right: 20 };
|
|
166
|
-
const text = "No data for selected period";
|
|
167
|
-
const textWidth = 211;
|
|
168
|
-
const textHeight = 24;
|
|
169
|
-
const backgroundWidth = textWidth + padding.left + padding.right;
|
|
170
|
-
const backgroundHeight = textHeight + padding.top + padding.bottom;
|
|
171
|
-
const rectX = left + (width - backgroundWidth) / 2;
|
|
172
|
-
const rectY = top + (height - backgroundHeight) / 2;
|
|
173
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "g", { children: [
|
|
174
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, NoDataRect, { x: rectX, y: rectY, width: backgroundWidth, height: backgroundHeight }),
|
|
175
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, LoadingText, { style: { ...theme.typography.subtitle1 }, x: left + width / 2, y: top + height / 2, children: text })
|
|
176
|
-
] });
|
|
177
|
-
};
|
|
178
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Card, { children: [
|
|
179
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CardHeader, { title: "GET / PUT Requests", action: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PeriodSelect, { value: period, onChange: setPeriod }) }),
|
|
180
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.CardMedia, { children: [
|
|
181
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
182
|
-
Chart2,
|
|
183
|
-
{
|
|
184
|
-
skipAnimation: true,
|
|
185
|
-
dataset: periodHistory || [],
|
|
186
|
-
axisHighlight: { x: "none", y: "none" },
|
|
187
|
-
grid: { horizontal: true, vertical: false },
|
|
188
|
-
margin: { top: 10, right: 20, bottom: 40, left: 40 },
|
|
189
|
-
colors: [theme.palette.primary.main, theme.palette.success.main],
|
|
190
|
-
slots: {
|
|
191
|
-
noDataOverlay: NoDataOverlay
|
|
192
|
-
},
|
|
193
|
-
slotProps: {
|
|
194
|
-
noDataOverlay: {
|
|
195
|
-
style: {
|
|
196
|
-
...theme.typography.h4
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
yAxis: periodHistory.length ? [
|
|
201
|
-
{
|
|
202
|
-
min: periodHistory.length ? void 0 : 0,
|
|
203
|
-
max: periodHistory.length ? void 0 : 100,
|
|
204
|
-
tickNumber: periodHistory.length ? void 0 : 5,
|
|
205
|
-
disableLine: true,
|
|
206
|
-
disableTicks: true,
|
|
207
|
-
tickLabelStyle: {
|
|
208
|
-
fontSize: 10
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
] : [],
|
|
212
|
-
xAxis: [
|
|
213
|
-
{
|
|
214
|
-
dataKey: "recordTime",
|
|
215
|
-
min: periodFrom,
|
|
216
|
-
max: /* @__PURE__ */ new Date(),
|
|
217
|
-
disableLine: false,
|
|
218
|
-
disableTicks: false,
|
|
219
|
-
valueFormatter: (date) => _datefns.format.call(void 0, date, "do MMM"),
|
|
220
|
-
tickMinStep: 3600 * 1e3 * 24,
|
|
221
|
-
// min step: 24h
|
|
222
|
-
tickLabelStyle: {
|
|
223
|
-
fontSize: 10,
|
|
224
|
-
transform: "translate(-16px, 16px) rotate(-30deg)"
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
],
|
|
228
|
-
series: [
|
|
229
|
-
{
|
|
230
|
-
curve: "linear",
|
|
231
|
-
dataKey: "gets",
|
|
232
|
-
showMark: false
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
curve: "linear",
|
|
236
|
-
dataKey: "puts",
|
|
237
|
-
showMark: false
|
|
238
|
-
}
|
|
239
|
-
]
|
|
240
|
-
}
|
|
241
|
-
),
|
|
242
|
-
periodHistory.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", spacing: 2, marginY: 3, justifyContent: "center", children: [
|
|
243
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", spacing: 1, alignItems: "center", children: [
|
|
244
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Box, { sx: { width: 14, height: 14, borderRadius: "4px", backgroundColor: theme.palette.primary.main } }),
|
|
245
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "body2", children: "Get" })
|
|
246
|
-
] }),
|
|
247
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", spacing: 1, alignItems: "center", children: [
|
|
248
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Box, { sx: { width: 14, height: 14, borderRadius: "4px", backgroundColor: theme.palette.success.main } }),
|
|
249
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "body2", children: "Put" })
|
|
250
|
-
] })
|
|
251
|
-
] })
|
|
252
|
-
] }),
|
|
253
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.CardMedia, { children: [
|
|
254
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Divider, { flexItem: true }),
|
|
255
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", spacing: 2, padding: 2, children: [
|
|
256
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", alignItems: "center", spacing: 1, children: [
|
|
257
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "body2", color: "secondary", children: "GET Requests per account" }),
|
|
258
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "h3", children: total.gets })
|
|
259
|
-
] }),
|
|
260
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", alignItems: "center", spacing: 1, children: [
|
|
261
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "body2", color: "secondary", children: "PUT Requests per account" }),
|
|
262
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "h3", children: total.puts })
|
|
263
|
-
] }),
|
|
264
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", alignItems: "center", spacing: 1, children: [
|
|
265
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "body2", color: "secondary", children: "Total Consumed per account" }),
|
|
266
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "h3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAIY6222Qjs.BytesSize, { bytes: total.transferredBytes }) })
|
|
267
|
-
] }),
|
|
268
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", alignItems: "center", spacing: 1, children: [
|
|
269
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "body2", color: "secondary", children: "Total Stored per account" }),
|
|
270
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "h3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAIY6222Qjs.BytesSize, { bytes: total.storedBytes }) })
|
|
271
|
-
] })
|
|
272
|
-
] })
|
|
273
|
-
] })
|
|
274
|
-
] });
|
|
275
|
-
};
|
|
276
|
-
|
|
277
77
|
// src/components/charts/TimeSeriesGraph/TimeSeriesGraph.tsx
|
|
78
|
+
var _react = require('react');
|
|
278
79
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
80
|
+
var _Card = require('@mui/material/Card'); var _Card2 = _interopRequireDefault(_Card);
|
|
81
|
+
var _CardHeader = require('@mui/material/CardHeader'); var _CardHeader2 = _interopRequireDefault(_CardHeader);
|
|
82
|
+
var _CardMedia = require('@mui/material/CardMedia'); var _CardMedia2 = _interopRequireDefault(_CardMedia);
|
|
83
|
+
var _CircularProgress = require('@mui/material/CircularProgress'); var _CircularProgress2 = _interopRequireDefault(_CircularProgress);
|
|
84
|
+
var _Divider = require('@mui/material/Divider'); var _Divider2 = _interopRequireDefault(_Divider);
|
|
288
85
|
|
|
289
86
|
|
|
290
87
|
|
|
@@ -292,24 +89,26 @@ var MetricsChart = ({ history = [] }) => {
|
|
|
292
89
|
|
|
293
90
|
|
|
294
91
|
// src/components/charts/TimeSeriesGraph/TimeRangeSelect.tsx
|
|
92
|
+
var _MenuItem = require('@mui/material/MenuItem'); var _MenuItem2 = _interopRequireDefault(_MenuItem);
|
|
93
|
+
var _TextField = require('@mui/material/TextField'); var _TextField2 = _interopRequireDefault(_TextField);
|
|
295
94
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
_material.TextField,
|
|
95
|
+
var TimeRangeSelect = ({ options, value, onChange }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
96
|
+
_TextField2.default,
|
|
299
97
|
{
|
|
300
98
|
select: true,
|
|
301
99
|
size: "small",
|
|
302
|
-
value: _nullishCoalesce(value, () => ( (
|
|
303
|
-
onChange: (e) => _optionalChain([onChange, 'optionalCall',
|
|
100
|
+
value: _nullishCoalesce(value, () => ( (options.length > 0 ? options[0].value : ""))),
|
|
101
|
+
onChange: (e) => _optionalChain([onChange, 'optionalCall', _4 => _4(e.target.value)]),
|
|
304
102
|
"aria-label": "Time range selector",
|
|
305
103
|
sx: { minWidth: 120 },
|
|
306
|
-
children:
|
|
104
|
+
children: options.map((option) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _MenuItem2.default, { value: option.value, children: option.label }, option.value))
|
|
307
105
|
}
|
|
308
106
|
);
|
|
309
107
|
|
|
310
108
|
// src/components/charts/TimeSeriesGraph/SummaryStats.tsx
|
|
311
109
|
|
|
312
110
|
|
|
111
|
+
|
|
313
112
|
var formatSummaryValue = (value, unit) => {
|
|
314
113
|
const displayValue = typeof value === "number" ? value.toLocaleString() : value;
|
|
315
114
|
return unit ? `${displayValue} ${unit}` : displayValue;
|
|
@@ -319,7 +118,7 @@ var SummaryStats = ({ items }) => {
|
|
|
319
118
|
return null;
|
|
320
119
|
}
|
|
321
120
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
322
|
-
|
|
121
|
+
_Stack2.default,
|
|
323
122
|
{
|
|
324
123
|
direction: "row",
|
|
325
124
|
spacing: 3,
|
|
@@ -329,15 +128,15 @@ var SummaryStats = ({ items }) => {
|
|
|
329
128
|
role: "list",
|
|
330
129
|
"aria-label": "Summary statistics",
|
|
331
130
|
children: items.map((item) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
332
|
-
|
|
131
|
+
_Stack2.default,
|
|
333
132
|
{
|
|
334
133
|
direction: "row",
|
|
335
134
|
alignItems: "center",
|
|
336
135
|
spacing: 1,
|
|
337
136
|
role: "listitem",
|
|
338
137
|
children: [
|
|
339
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
340
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
138
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Typography2.default, { variant: "body2", color: "text.secondary", children: item.label }),
|
|
139
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Typography2.default, { variant: "h5", fontWeight: 600, children: formatSummaryValue(item.value, item.unit) })
|
|
341
140
|
]
|
|
342
141
|
},
|
|
343
142
|
item.label
|
|
@@ -348,11 +147,11 @@ var SummaryStats = ({ items }) => {
|
|
|
348
147
|
|
|
349
148
|
// src/components/charts/TimeSeriesGraph/TimeSeriesGraph.tsx
|
|
350
149
|
|
|
351
|
-
var ChartContainer =
|
|
150
|
+
var ChartContainer = _styles.styled.call(void 0, (0, _Box2.default))({
|
|
352
151
|
position: "relative",
|
|
353
152
|
height: 320
|
|
354
153
|
});
|
|
355
|
-
var LoadingOverlay =
|
|
154
|
+
var LoadingOverlay = _styles.styled.call(void 0, (0, _Box2.default))(({ theme }) => ({
|
|
356
155
|
position: "absolute",
|
|
357
156
|
inset: 0,
|
|
358
157
|
display: "flex",
|
|
@@ -362,7 +161,7 @@ var LoadingOverlay = _material.styled.call(void 0, (0, _material.Box))(({ theme
|
|
|
362
161
|
zIndex: 1,
|
|
363
162
|
borderRadius: theme.shape.borderRadius
|
|
364
163
|
}));
|
|
365
|
-
var LegendDot =
|
|
164
|
+
var LegendDot = _styles.styled.call(void 0, _Box2.default, {
|
|
366
165
|
shouldForwardProp: (prop) => prop !== "dotColor"
|
|
367
166
|
})(({ dotColor }) => ({
|
|
368
167
|
width: 14,
|
|
@@ -418,7 +217,7 @@ var TimeSeriesGraph = ({
|
|
|
418
217
|
loading = false,
|
|
419
218
|
xAxisFormat
|
|
420
219
|
}) => {
|
|
421
|
-
const theme =
|
|
220
|
+
const theme = _styles.useTheme.call(void 0, );
|
|
422
221
|
const [hiddenSeries, setHiddenSeries] = _react.useState.call(void 0, /* @__PURE__ */ new Set());
|
|
423
222
|
const dataset = _react.useMemo.call(void 0, () => buildDataset(series, hiddenSeries), [series, hiddenSeries]);
|
|
424
223
|
const visibleSeries = _react.useMemo.call(void 0,
|
|
@@ -451,7 +250,7 @@ var TimeSeriesGraph = ({
|
|
|
451
250
|
);
|
|
452
251
|
const hasData = dataset.length > 0;
|
|
453
252
|
const shouldShowSummary = showSummary && summaryItems && summaryItems.length > 0;
|
|
454
|
-
const headerActionElement = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
253
|
+
const headerActionElement = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _Stack2.default, { direction: "row", spacing: 1, alignItems: "center", children: [
|
|
455
254
|
headerAction,
|
|
456
255
|
timeRangeOptions && timeRangeOptions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
457
256
|
TimeRangeSelect,
|
|
@@ -464,13 +263,13 @@ var TimeSeriesGraph = ({
|
|
|
464
263
|
] });
|
|
465
264
|
const showHeader = !!title || !!headerAction || timeRangeOptions && timeRangeOptions.length > 0;
|
|
466
265
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
467
|
-
|
|
266
|
+
_Card2.default,
|
|
468
267
|
{
|
|
469
268
|
"aria-label": title ? `Line chart showing ${title}` : "Line chart",
|
|
470
269
|
role: "figure",
|
|
471
270
|
children: [
|
|
472
271
|
showHeader && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
473
|
-
|
|
272
|
+
_CardHeader2.default,
|
|
474
273
|
{
|
|
475
274
|
title,
|
|
476
275
|
titleTypographyProps: {
|
|
@@ -480,9 +279,9 @@ var TimeSeriesGraph = ({
|
|
|
480
279
|
action: headerActionElement
|
|
481
280
|
}
|
|
482
281
|
),
|
|
483
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
282
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _CardMedia2.default, { children: [
|
|
484
283
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, ChartContainer, { children: [
|
|
485
|
-
loading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LoadingOverlay, { role: "status", "aria-label": "Loading chart data", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
284
|
+
loading && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LoadingOverlay, { role: "status", "aria-label": "Loading chart data", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _CircularProgress2.default, { size: 40 }) }),
|
|
486
285
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
487
286
|
_xcharts.LineChart,
|
|
488
287
|
{
|
|
@@ -536,7 +335,7 @@ var TimeSeriesGraph = ({
|
|
|
536
335
|
)
|
|
537
336
|
] }),
|
|
538
337
|
series.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
539
|
-
|
|
338
|
+
_Stack2.default,
|
|
540
339
|
{
|
|
541
340
|
direction: "row",
|
|
542
341
|
spacing: 2,
|
|
@@ -549,7 +348,7 @@ var TimeSeriesGraph = ({
|
|
|
549
348
|
children: series.map((s) => {
|
|
550
349
|
const isHidden = hiddenSeries.has(s.name);
|
|
551
350
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
552
|
-
|
|
351
|
+
_Stack2.default,
|
|
553
352
|
{
|
|
554
353
|
direction: "row",
|
|
555
354
|
spacing: 1,
|
|
@@ -566,7 +365,7 @@ var TimeSeriesGraph = ({
|
|
|
566
365
|
"aria-label": `Toggle ${s.name} visibility`,
|
|
567
366
|
children: [
|
|
568
367
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, LegendDot, { dotColor: s.color }),
|
|
569
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
368
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Typography2.default, { variant: "body2", children: s.name })
|
|
570
369
|
]
|
|
571
370
|
},
|
|
572
371
|
s.name
|
|
@@ -576,7 +375,7 @@ var TimeSeriesGraph = ({
|
|
|
576
375
|
)
|
|
577
376
|
] }),
|
|
578
377
|
shouldShowSummary && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
579
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
378
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Divider2.default, {}),
|
|
580
379
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, SummaryStats, { items: summaryItems })
|
|
581
380
|
] })
|
|
582
381
|
]
|
|
@@ -589,7 +388,5 @@ var TimeSeriesGraph = ({
|
|
|
589
388
|
|
|
590
389
|
|
|
591
390
|
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
exports.ChartWidget = ChartWidget; exports.PeriodSelect = PeriodSelect; exports.MetricsChart = MetricsChart; exports.TimeRangeSelect = TimeRangeSelect; exports.SummaryStats = SummaryStats; exports.TimeSeriesGraph = TimeSeriesGraph;
|
|
595
|
-
//# sourceMappingURL=chunk-KF2Y7HO3.js.map
|
|
391
|
+
exports.ChartWidget = ChartWidget; exports.TimeRangeSelect = TimeRangeSelect; exports.SummaryStats = SummaryStats; exports.TimeSeriesGraph = TimeSeriesGraph;
|
|
392
|
+
//# sourceMappingURL=chunk-DZXNYLVG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/chunk-DZXNYLVG.js","../src/components/charts/ChartWidget/ChartWidget.tsx","../src/components/charts/TimeSeriesGraph/TimeSeriesGraph.tsx","../src/components/charts/TimeSeriesGraph/TimeRangeSelect.tsx","../src/components/charts/TimeSeriesGraph/SummaryStats.tsx"],"names":["value","jsx","Stack","styled","useTheme","LineChart"],"mappings":"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","file":"/home/runner/work/cere-design-system/cere-design-system/dist/chunk-DZXNYLVG.js","sourcesContent":[null,"import { ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { styled, useTheme } from '@mui/material/styles';\nimport { LineChart } from '@mui/x-charts';\nimport size from 'byte-size';\nimport { format } from 'date-fns';\n\ntype ChartWidgetHistoryRecord = {\n date: Date;\n value: number;\n};\n\nexport type ChartWidgetProps = {\n title: string;\n value?: ReactNode;\n history?: ChartWidgetHistoryRecord[];\n formatValue?: (value: number) => string;\n};\n\nconst Chart = styled(Box)(() => ({\n height: 200,\n}));\n\nexport const ChartWidget = ({\n title,\n value,\n history,\n formatValue = (value) => size(value || 0).toString(),\n}: ChartWidgetProps) => {\n const theme = useTheme();\n\n return (\n <Stack spacing={1}>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {title}\n </Typography>\n <Typography fontWeight=\"bold\">{value}</Typography>\n\n <Chart>\n <LineChart\n dataset={history || []}\n axisHighlight={{ x: 'none', y: 'none' }}\n grid={{ horizontal: true, vertical: false }}\n margin={{ top: 10, right: 20, bottom: 40, left: 40 }}\n colors={[theme.palette.primary.main]}\n slots={{\n noDataOverlay: () => null,\n }}\n yAxis={[\n {\n dataKey: 'value',\n disableLine: true,\n disableTicks: true,\n min: history?.length ? undefined : 0,\n max: history?.length ? undefined : 100,\n tickNumber: history?.length ? undefined : 5,\n valueFormatter: (value) => formatValue(value || 0),\n tickLabelStyle: {\n fontSize: 10,\n },\n },\n ]}\n xAxis={[\n {\n dataKey: 'date',\n min: history && Math.min(...history.map((record) => +record.date)),\n max: history && Math.max(...history.map((record) => +record.date)),\n disableLine: true,\n disableTicks: true,\n valueFormatter: (date) => format(date, 'do MMM'),\n tickPlacement: 'end',\n tickNumber: 1,\n\n tickLabelStyle: {\n fontSize: 10,\n transform: 'translate(-16px, 16px) rotate(-30deg)',\n },\n },\n ]}\n series={[\n {\n curve: 'linear',\n dataKey: 'value',\n showMark: false,\n valueFormatter: (value) => formatValue(value || 0),\n },\n ]}\n />\n </Chart>\n </Stack>\n );\n};\n","import { ReactNode, useCallback, useMemo, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardHeader from '@mui/material/CardHeader';\nimport CardMedia from '@mui/material/CardMedia';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { styled, useTheme } from '@mui/material/styles';\nimport { LineChart } from '@mui/x-charts';\nimport { format } from 'date-fns';\n\nimport { TimeRangeSelect, type TimeRangeOption } from './TimeRangeSelect';\nimport { SummaryStats, type SummaryItem } from './SummaryStats';\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\n/**\n * A single data point in a time series.\n * Use `null` for the value to represent missing/gap data — the line will break.\n */\nexport interface DataPoint {\n /** Timestamp of the observation */\n timestamp: Date;\n /** Numeric value, or `null` to indicate a gap in the data */\n value: number | null;\n}\n\n/**\n * Represents one line on the graph (a named data series).\n */\nexport interface DataSeries {\n /** Unique display name for this series (shown in legend) */\n name: string;\n /** CSS color string for the line and legend indicator */\n color: string;\n /** Ordered array of data points */\n data: DataPoint[];\n}\n\nexport interface TimeSeriesGraphProps {\n /** Optional title displayed at the top-left of the graph card */\n title?: string;\n /**\n * Array of data series to render. Each series becomes one line on the graph.\n * There is no hardcoded limit on the number of series.\n */\n series: DataSeries[];\n /**\n * Configurable time range options for the dropdown selector.\n * When omitted, the time range dropdown is not rendered.\n */\n timeRangeOptions?: TimeRangeOption[];\n /** Currently selected time range value (controlled) */\n selectedTimeRange?: string;\n /** Callback invoked when the user picks a different time range */\n onTimeRangeChange?: (value: string) => void;\n /**\n * Optional array of summary statistics displayed below the graph.\n * When omitted or empty, the summary section is hidden.\n */\n summaryItems?: SummaryItem[];\n /**\n * Whether to show the summary statistics section.\n * Defaults to `true`. Set to `false` to explicitly hide, even when `summaryItems` are provided.\n */\n showSummary?: boolean;\n /**\n * Optional header action element rendered to the right of the title\n * (e.g., a secondary dropdown or filter control).\n */\n headerAction?: ReactNode;\n /**\n * When `true`, shows a loading overlay (spinner) over the graph area\n * while the header remains visible and interactive.\n */\n loading?: boolean;\n /**\n * Override the x-axis date format string (date-fns format tokens).\n * When omitted, the format is auto-detected from the data's time span:\n * - <= 24 hours → `'HH:mm'`\n * - > 24 hours → `'do MMM'`\n */\n xAxisFormat?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Styled helpers\n// ---------------------------------------------------------------------------\n\nconst ChartContainer = styled(Box)({\n position: 'relative',\n height: 320,\n});\n\nconst LoadingOverlay = styled(Box)(({ theme }) => ({\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.7)',\n zIndex: 1,\n borderRadius: theme.shape.borderRadius,\n}));\n\nconst LegendDot = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'dotColor',\n})<{ dotColor: string }>(({ dotColor }) => ({\n width: 14,\n height: 14,\n borderRadius: 4,\n backgroundColor: dotColor,\n flexShrink: 0,\n}));\n\n// ---------------------------------------------------------------------------\n// Utility functions\n// ---------------------------------------------------------------------------\n\n/**\n * Formats large Y-axis values into shorthand notation.\n * 1,000 → 1K, 1,000,000 → 1M, 1,000,000,000 → 1B\n */\nconst formatYAxisValue = (value: number): string => {\n const absValue = Math.abs(value);\n if (absValue >= 1_000_000_000) {\n return `${(value / 1_000_000_000).toFixed(absValue % 1_000_000_000 === 0 ? 0 : 1)}B`;\n }\n if (absValue >= 1_000_000) {\n return `${(value / 1_000_000).toFixed(absValue % 1_000_000 === 0 ? 0 : 1)}M`;\n }\n if (absValue >= 1_000) {\n return `${(value / 1_000).toFixed(absValue % 1_000 === 0 ? 0 : 1)}K`;\n }\n return String(value);\n};\n\nconst TWENTY_FOUR_HOURS_MS = 24 * 60 * 60 * 1000;\n\n/**\n * Infers the appropriate x-axis date format string based on the time span of the data.\n * - Span <= 24 hours → `'HH:mm'` (e.g., \"14:30\")\n * - Span > 24 hours → `'do MMM'` (e.g., \"2nd Jan\")\n */\nexport const inferXAxisFormat = (\n min: Date | undefined,\n max: Date | undefined,\n): string => {\n if (!min || !max) return 'do MMM';\n const spanMs = max.getTime() - min.getTime();\n return spanMs <= TWENTY_FOUR_HOURS_MS ? 'HH:mm' : 'do MMM';\n};\n\n/** A single row in the chart dataset — timestamp plus one field per series. */\ntype DatasetRow = Record<string, string | number | Date | null | undefined>;\n\n/**\n * Builds the unified dataset array that MUI X-Charts expects.\n * Each row is keyed by timestamp with one field per series.\n */\nconst buildDataset = (\n series: DataSeries[],\n hiddenSeries: Set<string>,\n): DatasetRow[] => {\n // Collect all unique timestamps across all visible series\n const timestampMap = new Map<number, DatasetRow>();\n\n series.forEach((s) => {\n if (hiddenSeries.has(s.name)) return;\n s.data.forEach((dp) => {\n const ts = dp.timestamp.getTime();\n if (!timestampMap.has(ts)) {\n timestampMap.set(ts, { timestamp: dp.timestamp } as DatasetRow);\n }\n timestampMap.get(ts)![s.name] = dp.value;\n });\n });\n\n // Sort by timestamp ascending\n return Array.from(timestampMap.values()).sort(\n (a, b) => (a.timestamp as Date).getTime() - (b.timestamp as Date).getTime(),\n );\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * A reusable time series graph component that displays one or more data lines\n * over a shared time axis. Supports configurable time range selection,\n * optional summary statistics, interactive legend toggling, crosshair tooltips,\n * and a loading state.\n *\n * Built on `@mui/x-charts` LineChart and the Cere Design System theme.\n *\n * @example\n * ```tsx\n * <TimeSeriesGraph\n * title=\"Engagement over time\"\n * series={[\n * { name: 'Engagements', color: '#6750A4', data: engagementData },\n * { name: 'Unique Streams', color: '#4caf50', data: streamData },\n * ]}\n * timeRangeOptions={[\n * { label: 'Last hour', value: 'hour' },\n * { label: '24 hours', value: 'day' },\n * { label: '1 week', value: 'week' },\n * { label: '1 month', value: 'month' },\n * ]}\n * selectedTimeRange=\"week\"\n * onTimeRangeChange={(range) => fetchData(range)}\n * summaryItems={[\n * { label: 'Total Engagements', value: 11372 },\n * { label: 'Daily Engagements', value: 156 },\n * ]}\n * />\n * ```\n *\n * Figma reference: [ROB Design - Node 162:1172](https://www.figma.com/design/xky11VbkkFcgZLwZE8BdCN/ROB?node-id=162-1172&m=dev)\n */\nexport const TimeSeriesGraph = ({\n title,\n series,\n timeRangeOptions,\n selectedTimeRange,\n onTimeRangeChange,\n summaryItems,\n showSummary = true,\n headerAction,\n loading = false,\n xAxisFormat,\n}: TimeSeriesGraphProps) => {\n const theme = useTheme();\n const [hiddenSeries, setHiddenSeries] = useState<Set<string>>(new Set());\n\n // Build the MUI X-Charts dataset from visible series\n const dataset = useMemo(() => buildDataset(series, hiddenSeries), [series, hiddenSeries]);\n\n // Visible series (exclude hidden)\n const visibleSeries = useMemo(\n () => series.filter((s) => !hiddenSeries.has(s.name)),\n [series, hiddenSeries],\n );\n\n // Colors array matching the order of visible series\n const chartColors = useMemo(() => visibleSeries.map((s) => s.color), [visibleSeries]);\n\n // Toggle a series' visibility\n const handleLegendToggle = useCallback((seriesName: string) => {\n setHiddenSeries((prev) => {\n const next = new Set(prev);\n if (next.has(seriesName)) {\n next.delete(seriesName);\n } else {\n next.add(seriesName);\n }\n return next;\n });\n }, []);\n\n // Compute time bounds for the X-axis from visible data\n const timeBounds = useMemo(() => {\n if (dataset.length === 0) return { min: undefined, max: undefined };\n const timestamps = dataset.map((row) => (row.timestamp as Date).getTime());\n return {\n min: new Date(Math.min(...timestamps)),\n max: new Date(Math.max(...timestamps)),\n };\n }, [dataset]);\n\n // Resolve the x-axis date format: explicit prop wins, otherwise auto-detect\n const resolvedXAxisFormat = useMemo(\n () => xAxisFormat ?? inferXAxisFormat(timeBounds.min, timeBounds.max),\n [xAxisFormat, timeBounds.min, timeBounds.max],\n );\n\n // Determine whether we have data to display\n const hasData = dataset.length > 0;\n\n // Whether to render the summary section\n const shouldShowSummary = showSummary && summaryItems && summaryItems.length > 0;\n\n // Build the header action area (time range + optional custom action)\n const headerActionElement = (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n {headerAction}\n {timeRangeOptions && timeRangeOptions.length > 0 && (\n <TimeRangeSelect\n options={timeRangeOptions}\n value={selectedTimeRange}\n onChange={onTimeRangeChange}\n />\n )}\n </Stack>\n );\n\n // Determine whether to show the header at all\n const showHeader = !!title || !!headerAction || (timeRangeOptions && timeRangeOptions.length > 0);\n\n return (\n <Card\n aria-label={title ? `Line chart showing ${title}` : 'Line chart'}\n role=\"figure\"\n >\n {showHeader && (\n <CardHeader\n title={title}\n titleTypographyProps={{\n variant: 'subtitle1',\n fontWeight: 500,\n }}\n action={headerActionElement}\n />\n )}\n\n <CardMedia>\n <ChartContainer>\n {loading && (\n <LoadingOverlay role=\"status\" aria-label=\"Loading chart data\">\n <CircularProgress size={40} />\n </LoadingOverlay>\n )}\n\n <LineChart\n dataset={dataset}\n axisHighlight={{ x: 'line', y: 'none' }}\n grid={{ horizontal: true, vertical: false }}\n margin={{ top: 10, right: 20, bottom: 40, left: 50 }}\n colors={chartColors.length > 0 ? chartColors : [theme.palette.primary.main]}\n slots={{\n noDataOverlay: () => null,\n }}\n tooltip={{ trigger: hasData ? 'axis' : 'none' }}\n yAxis={[\n {\n disableLine: true,\n disableTicks: true,\n min: hasData ? undefined : 0,\n max: hasData ? undefined : 100,\n tickNumber: hasData ? undefined : 5,\n valueFormatter: (value: number) => formatYAxisValue(value || 0),\n tickLabelStyle: {\n fontSize: 10,\n },\n },\n ]}\n xAxis={[\n {\n dataKey: 'timestamp',\n scaleType: 'time',\n min: timeBounds.min,\n max: timeBounds.max,\n disableLine: true,\n disableTicks: true,\n valueFormatter: (date: Date) => format(date, resolvedXAxisFormat),\n tickLabelStyle: {\n fontSize: 10,\n },\n },\n ]}\n series={visibleSeries.map((s) => ({\n curve: 'linear' as const,\n dataKey: s.name,\n label: s.name,\n showMark: false,\n connectNulls: false,\n }))}\n // Hide the built-in legend — we render a custom one below\n slotProps={{\n legend: { hidden: true },\n }}\n />\n </ChartContainer>\n\n {/* Custom interactive legend */}\n {series.length > 0 && (\n <Stack\n direction=\"row\"\n spacing={2}\n justifyContent=\"center\"\n paddingY={1}\n flexWrap=\"wrap\"\n useFlexGap\n role=\"list\"\n aria-label=\"Chart legend\"\n >\n {series.map((s) => {\n const isHidden = hiddenSeries.has(s.name);\n return (\n <Stack\n key={s.name}\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n role=\"listitem\"\n onClick={() => handleLegendToggle(s.name)}\n sx={{\n cursor: 'pointer',\n opacity: isHidden ? 0.4 : 1,\n transition: 'opacity 0.2s ease',\n userSelect: 'none',\n }}\n aria-pressed={!isHidden}\n aria-label={`Toggle ${s.name} visibility`}\n >\n <LegendDot dotColor={s.color} />\n <Typography variant=\"body2\">{s.name}</Typography>\n </Stack>\n );\n })}\n </Stack>\n )}\n </CardMedia>\n\n {/* Summary statistics */}\n {shouldShowSummary && (\n <>\n <Divider />\n <SummaryStats items={summaryItems!} />\n </>\n )}\n </Card>\n );\n};\n","import MenuItem from '@mui/material/MenuItem';\nimport TextField from '@mui/material/TextField';\n\n/**\n * Represents a single time range option in the dropdown.\n */\nexport interface TimeRangeOption {\n /** Display label shown in the dropdown (e.g., \"1 week\") */\n label: string;\n /** Value identifier passed to the callback on selection */\n value: string;\n}\n\nexport interface TimeRangeSelectProps {\n /** Available time range options */\n options: TimeRangeOption[];\n /** Currently selected time range value */\n value?: string;\n /** Callback invoked when user selects a different time range */\n onChange?: (value: string) => void;\n}\n\n/**\n * Configurable time range dropdown selector.\n * Renders a compact select field with the provided time range options.\n *\n * @example\n * ```tsx\n * <TimeRangeSelect\n * options={[\n * { label: 'Last hour', value: 'hour' },\n * { label: '24 hours', value: 'day' },\n * { label: '1 week', value: 'week' },\n * ]}\n * value=\"week\"\n * onChange={(value) => console.log(value)}\n * />\n * ```\n */\nexport const TimeRangeSelect = ({ options, value, onChange }: TimeRangeSelectProps) => (\n <TextField\n select\n size=\"small\"\n value={value ?? (options.length > 0 ? options[0].value : '')}\n onChange={(e) => onChange?.(e.target.value)}\n aria-label=\"Time range selector\"\n sx={{ minWidth: 120 }}\n >\n {options.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n);\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\n/**\n * Represents a single summary statistic item displayed below the graph.\n */\nexport interface SummaryItem {\n /** Descriptive label (e.g., \"Total Engagements\") */\n label: string;\n /** Numeric or string value (e.g., \"13.72\" or 11372) */\n value: string | number;\n /** Optional unit suffix (e.g., \"K\", \"GB\", \"%\") */\n unit?: string;\n}\n\nexport interface SummaryStatsProps {\n /** Array of summary items to display */\n items: SummaryItem[];\n}\n\n/**\n * Formats a summary value with its optional unit.\n */\nconst formatSummaryValue = (value: string | number, unit?: string): string => {\n const displayValue = typeof value === 'number' ? value.toLocaleString() : value;\n return unit ? `${displayValue} ${unit}` : displayValue;\n};\n\n/**\n * Renders a horizontal row of summary statistics below the graph.\n * Each item shows a label with its corresponding value and optional unit.\n *\n * Matches the Figma design layout with label in secondary text color\n * and value in bold heading typography.\n *\n * @example\n * ```tsx\n * <SummaryStats\n * items={[\n * { label: 'Total Engagements', value: 11372 },\n * { label: 'Total Consumed', value: '156.91', unit: 'GB' },\n * ]}\n * />\n * ```\n */\nexport const SummaryStats = ({ items }: SummaryStatsProps) => {\n if (items.length === 0) {\n return null;\n }\n\n return (\n <Stack\n direction=\"row\"\n spacing={3}\n padding={2}\n flexWrap=\"wrap\"\n useFlexGap\n role=\"list\"\n aria-label=\"Summary statistics\"\n >\n {items.map((item) => (\n <Stack\n key={item.label}\n direction=\"row\"\n alignItems=\"center\"\n spacing={1}\n role=\"listitem\"\n >\n <Typography variant=\"body2\" color=\"text.secondary\">\n {item.label}\n </Typography>\n <Typography variant=\"h5\" fontWeight={600}>\n {formatSummaryValue(item.value, item.unit)}\n </Typography>\n </Stack>\n ))}\n </Stack>\n );\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fontFamilyMono
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WC2TCWXK.mjs";
|
|
4
4
|
|
|
5
5
|
// src/components/feedback/Chip.tsx
|
|
6
6
|
import React from "react";
|
|
@@ -78,8 +78,9 @@ var StyledChip = styled(MuiChip, {
|
|
|
78
78
|
"&:hover": { backgroundColor: hoverBackgroundColor }
|
|
79
79
|
};
|
|
80
80
|
});
|
|
81
|
-
var Chip = React.forwardRef(function Chip2({ variant
|
|
82
|
-
|
|
81
|
+
var Chip = React.forwardRef(function Chip2({ variant, tone = "default", ...props }, ref) {
|
|
82
|
+
const resolvedVariant = tone === "onGradient" ? "default" : variant ?? "default";
|
|
83
|
+
return /* @__PURE__ */ jsx(StyledChip, { ref, dsVariant: resolvedVariant, dsTone: tone, ...props });
|
|
83
84
|
});
|
|
84
85
|
|
|
85
86
|
// src/components/feedback/StatusDot.tsx
|
|
@@ -258,11 +259,9 @@ var Tooltip2 = React5.forwardRef(function Tooltip3(props, ref) {
|
|
|
258
259
|
});
|
|
259
260
|
|
|
260
261
|
// src/components/feedback/Progress.tsx
|
|
261
|
-
import
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
styled as styled4
|
|
265
|
-
} from "@mui/material";
|
|
262
|
+
import LinearProgress from "@mui/material/LinearProgress";
|
|
263
|
+
import CircularProgress from "@mui/material/CircularProgress";
|
|
264
|
+
import { styled as styled4 } from "@mui/material/styles";
|
|
266
265
|
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
267
266
|
var StyledLinearProgress = styled4(LinearProgress)(({ theme }) => ({
|
|
268
267
|
height: 4,
|
|
@@ -297,7 +296,7 @@ var Progress = ({
|
|
|
297
296
|
// src/components/feedback/Alert.tsx
|
|
298
297
|
import React6 from "react";
|
|
299
298
|
import MuiAlert from "@mui/material/Alert";
|
|
300
|
-
import
|
|
299
|
+
import MuiAlertTitle from "@mui/material/AlertTitle";
|
|
301
300
|
import MuiSnackbar from "@mui/material/Snackbar";
|
|
302
301
|
import { styled as styled5 } from "@mui/material/styles";
|
|
303
302
|
import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
@@ -314,18 +313,13 @@ var Alert = React6.forwardRef(function Alert2({ severity = "info", title, childr
|
|
|
314
313
|
] });
|
|
315
314
|
});
|
|
316
315
|
var StyledSnackbar = styled5(MuiSnackbar)({});
|
|
317
|
-
var
|
|
318
|
-
(
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
}
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
);
|
|
328
|
-
StableFadeTransition.displayName = "StableFadeTransition";
|
|
316
|
+
var StableNoTransition = React6.forwardRef(({ in: inProp, onExited, children }, ref) => {
|
|
317
|
+
React6.useEffect(() => {
|
|
318
|
+
if (inProp === false) onExited?.(null);
|
|
319
|
+
}, [inProp, onExited]);
|
|
320
|
+
return React6.cloneElement(children, { ref });
|
|
321
|
+
});
|
|
322
|
+
StableNoTransition.displayName = "StableNoTransition";
|
|
329
323
|
var Snackbar = React6.forwardRef(function Snackbar2({
|
|
330
324
|
message,
|
|
331
325
|
severity = "info",
|
|
@@ -370,7 +364,7 @@ var Snackbar = React6.forwardRef(function Snackbar2({
|
|
|
370
364
|
}
|
|
371
365
|
// Prevent scroll issues
|
|
372
366
|
},
|
|
373
|
-
TransitionComponent:
|
|
367
|
+
TransitionComponent: StableNoTransition,
|
|
374
368
|
...props,
|
|
375
369
|
children: content
|
|
376
370
|
}
|
|
@@ -379,7 +373,8 @@ var Snackbar = React6.forwardRef(function Snackbar2({
|
|
|
379
373
|
|
|
380
374
|
// src/components/feedback/EmptyState.tsx
|
|
381
375
|
import React7 from "react";
|
|
382
|
-
import
|
|
376
|
+
import Box3 from "@mui/material/Box";
|
|
377
|
+
import Typography2 from "@mui/material/Typography";
|
|
383
378
|
import { jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
384
379
|
var EmptyState = React7.forwardRef(function EmptyState2({ title = "No items found", description, icon, action }, ref) {
|
|
385
380
|
return /* @__PURE__ */ jsxs4(
|
|
@@ -417,7 +412,9 @@ var EmptyState = React7.forwardRef(function EmptyState2({ title = "No items foun
|
|
|
417
412
|
|
|
418
413
|
// src/components/feedback/Loading.tsx
|
|
419
414
|
import React8 from "react";
|
|
420
|
-
import
|
|
415
|
+
import Box4 from "@mui/material/Box";
|
|
416
|
+
import CircularProgress2 from "@mui/material/CircularProgress";
|
|
417
|
+
import Typography3 from "@mui/material/Typography";
|
|
421
418
|
import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
422
419
|
var Loading = React8.forwardRef(function Loading2({ message = "Loading...", size = 40, fullScreen = false }, ref) {
|
|
423
420
|
const content = /* @__PURE__ */ jsxs5(
|
|
@@ -453,7 +450,9 @@ var Loading = React8.forwardRef(function Loading2({ message = "Loading...", size
|
|
|
453
450
|
});
|
|
454
451
|
|
|
455
452
|
// src/components/feedback/AppLoading.tsx
|
|
456
|
-
import
|
|
453
|
+
import Box5 from "@mui/material/Box";
|
|
454
|
+
import CircularProgress3 from "@mui/material/CircularProgress";
|
|
455
|
+
import Typography4 from "@mui/material/Typography";
|
|
457
456
|
import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
458
457
|
var AppLoading = ({
|
|
459
458
|
message = "Loading...",
|
|
@@ -502,9 +501,7 @@ var AppLoading = ({
|
|
|
502
501
|
|
|
503
502
|
// src/components/feedback/CircularProgress.tsx
|
|
504
503
|
import React9 from "react";
|
|
505
|
-
import
|
|
506
|
-
CircularProgress as MuiCircularProgress
|
|
507
|
-
} from "@mui/material";
|
|
504
|
+
import MuiCircularProgress from "@mui/material/CircularProgress";
|
|
508
505
|
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
509
506
|
var CircularProgress4 = React9.forwardRef(
|
|
510
507
|
function CircularProgress5({ size = 40, thickness = 4, ...props }, ref) {
|
|
@@ -527,4 +524,4 @@ export {
|
|
|
527
524
|
AppLoading,
|
|
528
525
|
CircularProgress4 as CircularProgress
|
|
529
526
|
};
|
|
530
|
-
//# sourceMappingURL=chunk-
|
|
527
|
+
//# sourceMappingURL=chunk-GR52ENYI.mjs.map
|