@zac-apps/helium 1.3.0-beta.4 → 1.3.0-beta.6

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.
Files changed (2) hide show
  1. package/dist/index.js +120 -74
  2. package/package.json +15 -15
package/dist/index.js CHANGED
@@ -33,6 +33,7 @@ import { LineChart, Line, CartesianGrid, XAxis, Label, YAxis, ReferenceLine, Ref
33
33
  import ButtonGroup from '@mui/material/ButtonGroup';
34
34
  import Switch from '@mui/material/Switch';
35
35
  import regression from 'regression';
36
+ import { mean, sqrt, sum } from 'mathjs';
36
37
 
37
38
  function NumField(_ref) {
38
39
  var input = _ref.input,
@@ -377,8 +378,8 @@ function SelectSpecs(_ref) {
377
378
  });
378
379
  }
379
380
 
380
- function ownKeys$5(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; }
381
- function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
381
+ function ownKeys$4(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; }
382
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
382
383
 
383
384
  // Admonition colors
384
385
 
@@ -441,7 +442,7 @@ function HePrognosisSum(_ref2) {
441
442
  var boilOff = heliumLookupData.boilOff;
442
443
  var boilData = {};
443
444
  Object.keys(heliumData).map(function (spec) {
444
- boilData = _objectSpread$5(_objectSpread$5({}, boilData), {}, _defineProperty({}, spec, Math.round(heliumData[spec] + days * boilOff[spec])));
445
+ boilData = _objectSpread$4(_objectSpread$4({}, boilData), {}, _defineProperty({}, spec, Math.round(heliumData[spec] + days * boilOff[spec])));
445
446
  return null;
446
447
  });
447
448
  var toMaxSum = Object.keys(boilData).reduce(function (total, current) {
@@ -610,7 +611,7 @@ function HePrognosis(_ref6) {
610
611
  var specDefault = {};
611
612
  var specList = Object.keys(heliumData.helium);
612
613
  specList.map(function (spec) {
613
- return specDefault = _objectSpread$5(_objectSpread$5({}, specDefault), {}, _defineProperty({}, spec, true));
614
+ return specDefault = _objectSpread$4(_objectSpread$4({}, specDefault), {}, _defineProperty({}, spec, true));
614
615
  });
615
616
  var _useImmer = useImmer(specDefault),
616
617
  _useImmer2 = _slicedToArray(_useImmer, 2),
@@ -624,13 +625,13 @@ function HePrognosis(_ref6) {
624
625
  Object.keys(specs).filter(function (spec) {
625
626
  return specs[spec];
626
627
  }).map(function (spec) {
627
- return currHeliumData = _objectSpread$5(_objectSpread$5({}, currHeliumData), {}, _defineProperty({}, spec, heliumData.helium[spec]));
628
+ return currHeliumData = _objectSpread$4(_objectSpread$4({}, currHeliumData), {}, _defineProperty({}, spec, heliumData.helium[spec]));
628
629
  });
629
630
  var dates = {};
630
631
  for (var i in increments) {
631
632
  var d = new Date();
632
633
  d.setDate(d.getDate() + increments[i]);
633
- dates = _objectSpread$5(_objectSpread$5({}, dates), {}, _defineProperty({}, increments[i], moment(d).format("ll")));
634
+ dates = _objectSpread$4(_objectSpread$4({}, dates), {}, _defineProperty({}, increments[i], moment(d).format("ll")));
634
635
  }
635
636
  return /*#__PURE__*/jsxs(Grid, {
636
637
  container: true,
@@ -921,8 +922,8 @@ function FindTriple(_ref2) {
921
922
  return minTriple;
922
923
  }
923
924
 
924
- function ownKeys$4(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; }
925
- function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
925
+ function ownKeys$3(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; }
926
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
926
927
  function TupleResult(_ref) {
927
928
  var children = _ref.children,
928
929
  title = _ref.title;
@@ -1007,7 +1008,7 @@ function PairWizard(_ref4) {
1007
1008
  var boilOff = heliumLookupData.boilOff;
1008
1009
  var defaultSpecs = {};
1009
1010
  Object.keys(boilOff).map(function (spec) {
1010
- return defaultSpecs = _objectSpread$4(_objectSpread$4({}, defaultSpecs), {}, _defineProperty({}, spec, true));
1011
+ return defaultSpecs = _objectSpread$3(_objectSpread$3({}, defaultSpecs), {}, _defineProperty({}, spec, true));
1011
1012
  });
1012
1013
  var _useImmer = useImmer(defaultSpecs),
1013
1014
  _useImmer2 = _slicedToArray(_useImmer, 2),
@@ -1024,13 +1025,13 @@ function PairWizard(_ref4) {
1024
1025
  _useState4 = _slicedToArray(_useState3, 2),
1025
1026
  limit = _useState4[0],
1026
1027
  SetLimit = _useState4[1];
1027
- var minPair = FindPair(_objectSpread$4({}, {
1028
+ var minPair = FindPair(_objectSpread$3({}, {
1028
1029
  currSpecs: currSpecs,
1029
1030
  heliumData: heliumData,
1030
1031
  boilOff: boilOff,
1031
1032
  limit: limit
1032
1033
  }));
1033
- var minTriple = FindTriple(_objectSpread$4({}, {
1034
+ var minTriple = FindTriple(_objectSpread$3({}, {
1034
1035
  currSpecs: currSpecs,
1035
1036
  heliumData: heliumData,
1036
1037
  boilOff: boilOff,
@@ -1236,8 +1237,8 @@ function FillTarget(_ref) {
1236
1237
  });
1237
1238
  }
1238
1239
 
1239
- function ownKeys$3(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; }
1240
- function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1240
+ function ownKeys$2(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; }
1241
+ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1241
1242
  function EstimateConsumption() {
1242
1243
  // Get data
1243
1244
 
@@ -1263,7 +1264,7 @@ function EstimateConsumption() {
1263
1264
  // Calculate consumption per day, month, year from values above
1264
1265
 
1265
1266
  specCons = specCons.map(function (spec) {
1266
- return _objectSpread$3(_objectSpread$3({}, spec), {}, {
1267
+ return _objectSpread$2(_objectSpread$2({}, spec), {}, {
1267
1268
  perDay: spec.liters / spec.days,
1268
1269
  perMonth: (spec.liters / spec.days * 30).toFixed(1),
1269
1270
  perYear: (spec.liters / spec.days * 365).toFixed(1)
@@ -1331,31 +1332,101 @@ function EstimateConsumption() {
1331
1332
  });
1332
1333
  }
1333
1334
 
1335
+ function ShowEstimate(_ref) {
1336
+ var spec = _ref.spec,
1337
+ estimatedBoiloff = _ref.estimatedBoiloff,
1338
+ estimatedError = _ref.estimatedError;
1339
+ var heliumLookupData = useContext(LookupContext);
1340
+
1341
+ // Get stored data
1342
+
1343
+ var storedBoiloff = heliumLookupData.boilOff[spec].toFixed(3) || "N/A";
1344
+
1345
+ // Round values from props
1346
+
1347
+ estimatedBoiloff = estimatedBoiloff.toFixed(3) || "N/A";
1348
+ estimatedError = estimatedError.toFixed(3) || "N/A";
1349
+
1350
+ // Warn if values differ
1351
+
1352
+ var renderEstimatedBoiloff = Math.abs(estimatedBoiloff - storedBoiloff) < 0.01 ? estimatedBoiloff : /*#__PURE__*/jsx("strong", {
1353
+ style: {
1354
+ color: AppTheme.palette.primary.main
1355
+ },
1356
+ children: estimatedBoiloff
1357
+ });
1358
+ return /*#__PURE__*/jsxs("div", {
1359
+ children: [/*#__PURE__*/jsx("h4", {
1360
+ children: "Boiloff coefficients (%/day)"
1361
+ }), /*#__PURE__*/jsx(Grid, {
1362
+ container: true,
1363
+ children: /*#__PURE__*/jsxs(AppTable, {
1364
+ children: [/*#__PURE__*/jsx(TableHead, {
1365
+ children: /*#__PURE__*/jsxs(TableRow, {
1366
+ children: [/*#__PURE__*/jsx(TableHeadCell, {
1367
+ children: "Estimated"
1368
+ }), /*#__PURE__*/jsx(TableHeadCell, {
1369
+ children: "Stored"
1370
+ })]
1371
+ })
1372
+ }), /*#__PURE__*/jsx(TableBody, {
1373
+ children: /*#__PURE__*/jsxs(TableRow, {
1374
+ children: [/*#__PURE__*/jsxs(TableCell, {
1375
+ children: [renderEstimatedBoiloff, " ", /*#__PURE__*/jsxs("em", {
1376
+ style: {
1377
+ color: AppTheme.palette.secondary.main
1378
+ },
1379
+ children: ["(\xB1", estimatedError, ")"]
1380
+ })]
1381
+ }), /*#__PURE__*/jsx(TableCell, {
1382
+ children: storedBoiloff
1383
+ })]
1384
+ })
1385
+ })]
1386
+ })
1387
+ })]
1388
+ });
1389
+ }
1390
+
1334
1391
  function EstimateSlope(_ref) {
1335
1392
  var data = _ref.data;
1393
+ _ref.spec;
1336
1394
  // define slope and intercept
1337
1395
 
1338
1396
  var slope = 0;
1339
1397
  var intercept = 0;
1340
1398
 
1341
- // find last time when spectrometer was filled - for this start from last point and go back until the first maximum is found
1399
+ // Define firstMax and firstMaxIndex
1342
1400
 
1343
1401
  var firstMax = Number(data[data.length - 1].level);
1344
1402
  var firstMaxIndex = data.length - 1;
1403
+
1404
+ // Check if the last time when the spectrometer was filled is more than 45 days ago
1405
+
1406
+ var lastMaxIndex = data.length - 1;
1407
+ var lastMax = Number(data[lastMaxIndex].level);
1345
1408
  for (var i = data.length - 2; i >= 0; i--) {
1346
1409
  var level = Number(data[i].level);
1347
1410
  if (level > firstMax) {
1348
- firstMax = level;
1349
- firstMaxIndex = i;
1411
+ lastMax = level;
1412
+ lastMaxIndex = i;
1350
1413
  }
1351
1414
 
1352
1415
  // stop if level decreases from maximum
1353
1416
 
1354
- if (level < firstMax) {
1417
+ if (level < lastMax) {
1355
1418
  break;
1356
1419
  }
1357
1420
  }
1358
1421
 
1422
+ // if the last maximum is less than 45 days ago, use the last maximum as the first maximum
1423
+ // otherwise, the initial firstMaxIndex is the last maximum index
1424
+
1425
+ if (lastMaxIndex >= data.length - 45) {
1426
+ firstMaxIndex = lastMaxIndex - 1;
1427
+ firstMax = Number(data[firstMaxIndex].level);
1428
+ }
1429
+
1359
1430
  // minimum level is the level at firstMaxIndex
1360
1431
 
1361
1432
  var minLevelIndex = firstMaxIndex - 1;
@@ -1388,69 +1459,36 @@ function EstimateSlope(_ref) {
1388
1459
  // Perform linear regression on the points
1389
1460
 
1390
1461
  var result = regression.linear(points, {
1391
- precision: 3
1462
+ precision: 6
1392
1463
  });
1393
1464
  slope = result.equation[0];
1394
1465
  intercept = result.equation[1];
1395
- return {
1396
- slope: slope,
1397
- intercept: intercept
1398
- };
1399
- }
1400
1466
 
1401
- function ownKeys$2(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; }
1402
- function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1403
- function ShowEstimate(_ref) {
1404
- var data = _ref.data,
1405
- spec = _ref.spec;
1406
- var heliumLookupData = useContext(LookupContext);
1467
+ // Determine slope uncertainty based on regression result
1468
+ // For that, create an array of control values
1469
+ var control = [];
1470
+ for (var _i3 = maxLevelIndex; _i3 <= minLevelIndex; _i3++) {
1471
+ control.push([_i3, _i3 * slope + intercept]);
1472
+ }
1407
1473
 
1408
- // Get estimated data
1474
+ // Calculate mean x value
1409
1475
 
1410
- var estimateResult = EstimateSlope(_objectSpread$2({}, {
1411
- data: data,
1412
- spec: spec
1476
+ var meanX = mean(points.map(function (point) {
1477
+ return point[0];
1413
1478
  }));
1414
- var estimatedBoiloff = estimateResult.slope.toFixed(3) || "N/A";
1415
-
1416
- // Get stored data
1417
1479
 
1418
- var storedBoiloff = heliumLookupData.boilOff[spec].toFixed(3) || "N/A";
1419
-
1420
- // Warn if values differ
1480
+ // Calculate standard slope error
1421
1481
 
1422
- var renderEstimatedBoiloff = Math.abs(estimatedBoiloff - storedBoiloff) < 0.1 ? estimatedBoiloff : /*#__PURE__*/jsx("strong", {
1423
- style: {
1424
- color: AppTheme.palette.primary.main
1425
- },
1426
- children: estimatedBoiloff
1427
- });
1428
- return /*#__PURE__*/jsxs("div", {
1429
- children: [/*#__PURE__*/jsx("h4", {
1430
- children: "Boiloff coefficients (%/day)"
1431
- }), /*#__PURE__*/jsx(Grid, {
1432
- container: true,
1433
- children: /*#__PURE__*/jsxs(AppTable, {
1434
- children: [/*#__PURE__*/jsx(TableHead, {
1435
- children: /*#__PURE__*/jsxs(TableRow, {
1436
- children: [/*#__PURE__*/jsx(TableHeadCell, {
1437
- children: "Estimated"
1438
- }), /*#__PURE__*/jsx(TableHeadCell, {
1439
- children: "Stored"
1440
- })]
1441
- })
1442
- }), /*#__PURE__*/jsx(TableBody, {
1443
- children: /*#__PURE__*/jsxs(TableRow, {
1444
- children: [/*#__PURE__*/jsx(TableCell, {
1445
- children: renderEstimatedBoiloff
1446
- }), /*#__PURE__*/jsx(TableCell, {
1447
- children: storedBoiloff
1448
- })]
1449
- })
1450
- })]
1451
- })
1452
- })]
1453
- });
1482
+ var slopeError = sqrt(1 / (control.length - 2) * sum(points.map(function (point, i) {
1483
+ return Math.pow(point[1] - control[i][1], 2);
1484
+ })) / sum(points.map(function (point, i) {
1485
+ return Math.pow(point[0] - meanX, 2);
1486
+ })));
1487
+ return {
1488
+ slope: slope,
1489
+ intercept: intercept,
1490
+ slopeError: slopeError
1491
+ };
1454
1492
  }
1455
1493
 
1456
1494
  function ownKeys$1(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; }
@@ -1472,6 +1510,7 @@ function RenderGraph(_ref) {
1472
1510
  }));
1473
1511
  var estimatedBoiloff = estimateResult.slope;
1474
1512
  var estimatedIntercept = estimateResult.intercept;
1513
+ var estimatedError = estimateResult.slopeError;
1475
1514
 
1476
1515
  // Custom Tooltip for LineChart
1477
1516
 
@@ -1541,10 +1580,16 @@ function RenderGraph(_ref) {
1541
1580
 
1542
1581
  // Get chart data from estimate
1543
1582
 
1583
+ // First, get difference between today and last data point
1584
+
1585
+ var daysSinceUpate = moment().diff(moment(data[data.length - 1].date, "ddd MMM D HH:mm:ss YYYY"), "days");
1586
+
1587
+ // Then calculate estimated data points
1588
+
1544
1589
  showEstimate && (data = data.map(function (item) {
1545
1590
  var days = item.days;
1546
1591
  var level = item.level;
1547
- var estimate = estimatedBoiloff * (data.length - days) + estimatedIntercept;
1592
+ var estimate = estimatedBoiloff * (data.length - days + daysSinceUpate) + estimatedIntercept;
1548
1593
  return {
1549
1594
  date: item.date,
1550
1595
  days: days,
@@ -1668,7 +1713,8 @@ function RenderGraph(_ref) {
1668
1713
  })]
1669
1714
  }), /*#__PURE__*/jsx(ShowEstimate, {
1670
1715
  spec: spec,
1671
- data: data
1716
+ estimatedBoiloff: estimatedBoiloff,
1717
+ estimatedError: estimatedError
1672
1718
  })]
1673
1719
  });
1674
1720
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zac-apps/helium",
3
- "version": "1.3.0-beta.4",
3
+ "version": "1.3.0-beta.6",
4
4
  "scripts": {
5
5
  "rollup": "node_modules/rollup/dist/rollup.js",
6
6
  "dev": "next dev",
@@ -30,9 +30,9 @@
30
30
  "dependencies": {
31
31
  "@mui/icons-material": "^5.17.1",
32
32
  "@mui/material": "^5.17.1",
33
- "@zac-apps/commons": "^1",
33
+ "mathjs": "^14.4.0",
34
34
  "moment": "^2.30.1",
35
- "recharts": "^2.15.1",
35
+ "recharts": "^2.15.3",
36
36
  "regression": "^2.0.1",
37
37
  "use-immer": "^0.11.0"
38
38
  },
@@ -47,25 +47,25 @@
47
47
  "@semantic-release/git": "^10.0.1",
48
48
  "@semantic-release/gitlab": "^13.2.4",
49
49
  "@semantic-release/npm": "^12.0.1",
50
- "@storybook/addon-essentials": "^8.6.10",
51
- "@storybook/addon-interactions": "^8.6.10",
52
- "@storybook/addon-links": "^8.6.10",
53
- "@storybook/addon-onboarding": "^8.6.10",
54
- "@storybook/blocks": "^8.6.10",
55
- "@storybook/nextjs": "^8.6.10",
56
- "@storybook/react": "^8.6.10",
57
- "@storybook/test": "^8.6.10",
50
+ "@storybook/addon-essentials": "^8.6.12",
51
+ "@storybook/addon-interactions": "^8.6.12",
52
+ "@storybook/addon-links": "^8.6.12",
53
+ "@storybook/addon-onboarding": "^8.6.12",
54
+ "@storybook/blocks": "^8.6.12",
55
+ "@storybook/nextjs": "^8.6.12",
56
+ "@storybook/react": "^8.6.12",
57
+ "@storybook/test": "^8.6.12",
58
58
  "babel-loader": "^10.0.0",
59
59
  "eslint": "^9",
60
- "eslint-config-next": "15.2.4",
60
+ "eslint-config-next": "15.3.1",
61
61
  "eslint-plugin-storybook": "^0.12.0",
62
- "rollup": "^4.37.0",
62
+ "next": "^14",
63
+ "rollup": "^4.40.0",
63
64
  "semantic-release": "^24.2.3",
64
- "storybook": "^8.6.10"
65
+ "storybook": "^8.6.12"
65
66
  },
66
67
  "peerDependencies": {
67
68
  "@zac-apps/commons": "^1",
68
- "next": "^14",
69
69
  "react": "^18 || ^19",
70
70
  "react-dom": "^18 || ^19"
71
71
  },