@plutonhq/core-frontend 0.1.32 → 0.1.34

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 (135) hide show
  1. package/dist-lib/@types/plans.d.ts +4 -0
  2. package/dist-lib/@types/plans.d.ts.map +1 -1
  3. package/dist-lib/components/Device/DeviceResticSettings/DeviceResticSettings.js +4 -4
  4. package/dist-lib/components/Device/DeviceResticSettings/DeviceResticSettings.js.map +1 -1
  5. package/dist-lib/components/Plan/AddPlan/AddPlan.d.ts.map +1 -1
  6. package/dist-lib/components/Plan/AddPlan/AddPlan.js +29 -24
  7. package/dist-lib/components/Plan/AddPlan/AddPlan.js.map +1 -1
  8. package/dist-lib/components/Plan/BackupProgress/BackupProgress.js +34 -33
  9. package/dist-lib/components/Plan/BackupProgress/BackupProgress.js.map +1 -1
  10. package/dist-lib/components/Plan/FilterPlans/FilterPlans.d.ts +9 -0
  11. package/dist-lib/components/Plan/FilterPlans/FilterPlans.d.ts.map +1 -0
  12. package/dist-lib/components/Plan/FilterPlans/FilterPlans.js +117 -0
  13. package/dist-lib/components/Plan/FilterPlans/FilterPlans.js.map +1 -0
  14. package/dist-lib/components/Plan/FilterPlans/FilterPlans.module.scss.js +20 -0
  15. package/dist-lib/components/Plan/FilterPlans/FilterPlans.module.scss.js.map +1 -0
  16. package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts +4 -2
  17. package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts.map +1 -1
  18. package/dist-lib/components/Plan/PlanForm/PlanForm.js +33 -29
  19. package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
  20. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.d.ts +2 -1
  21. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.d.ts.map +1 -1
  22. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.js +85 -57
  23. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.js.map +1 -1
  24. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.module.scss.js +11 -9
  25. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.module.scss.js.map +1 -1
  26. package/dist-lib/components/Plan/PlanItems/PlanItem.js +1 -1
  27. package/dist-lib/components/Plan/PlanItems/PlanItem.js.map +1 -1
  28. package/dist-lib/components/Plan/PlanRepair/PlanRepair.d.ts +9 -0
  29. package/dist-lib/components/Plan/PlanRepair/PlanRepair.d.ts.map +1 -0
  30. package/dist-lib/components/Plan/PlanRepair/PlanRepair.js +262 -0
  31. package/dist-lib/components/Plan/PlanRepair/PlanRepair.js.map +1 -0
  32. package/dist-lib/components/Plan/PlanRepair/PlanRepair.module.scss.js +14 -0
  33. package/dist-lib/components/Plan/PlanRepair/PlanRepair.module.scss.js.map +1 -0
  34. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.d.ts +4 -2
  35. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.d.ts.map +1 -1
  36. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js +24 -22
  37. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js.map +1 -1
  38. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.d.ts +4 -2
  39. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.d.ts.map +1 -1
  40. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.js +39 -28
  41. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.js.map +1 -1
  42. package/dist-lib/components/Plan/PlanSettings/PlanPerformanceSettings.js +2 -2
  43. package/dist-lib/components/Plan/PlanSettings/PlanPerformanceSettings.js.map +1 -1
  44. package/dist-lib/components/Plan/PlanSettings/PlanSettings.module.scss.js +66 -64
  45. package/dist-lib/components/Plan/PlanSettings/PlanSettings.module.scss.js.map +1 -1
  46. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.d.ts +7 -0
  47. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.d.ts.map +1 -0
  48. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.js +116 -0
  49. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.js.map +1 -0
  50. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.module.scss.js +20 -0
  51. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.module.scss.js.map +1 -0
  52. package/dist-lib/components/Plan/PlanStats/PlanStats.d.ts.map +1 -1
  53. package/dist-lib/components/Plan/PlanStats/PlanStats.js +29 -30
  54. package/dist-lib/components/Plan/PlanStats/PlanStats.js.map +1 -1
  55. package/dist-lib/components/Plan/PlanStats/PlanStats.module.scss.js +16 -14
  56. package/dist-lib/components/Plan/PlanStats/PlanStats.module.scss.js.map +1 -1
  57. package/dist-lib/components/common/FileManager/FileManager.module.scss.js +18 -16
  58. package/dist-lib/components/common/FileManager/FileManager.module.scss.js.map +1 -1
  59. package/dist-lib/components/common/Icon/Icon.d.ts.map +1 -1
  60. package/dist-lib/components/common/Icon/Icon.js +395 -378
  61. package/dist-lib/components/common/Icon/Icon.js.map +1 -1
  62. package/dist-lib/components/common/SortItems/SortItems.d.ts +2 -1
  63. package/dist-lib/components/common/SortItems/SortItems.d.ts.map +1 -1
  64. package/dist-lib/components/common/SortItems/SortItems.js +14 -14
  65. package/dist-lib/components/common/SortItems/SortItems.js.map +1 -1
  66. package/dist-lib/components/common/SortItems/SortItems.module.scss.js +1 -1
  67. package/dist-lib/components/common/form/MultiSelect/MultiSelect.module.scss.js +16 -16
  68. package/dist-lib/components/index.d.ts +2 -0
  69. package/dist-lib/components/index.d.ts.map +1 -1
  70. package/dist-lib/components.js +199 -195
  71. package/dist-lib/components.js.map +1 -1
  72. package/dist-lib/hooks/usePlanSingleActions.d.ts.map +1 -1
  73. package/dist-lib/hooks/usePlanSingleActions.js +22 -19
  74. package/dist-lib/hooks/usePlanSingleActions.js.map +1 -1
  75. package/dist-lib/node_modules/.pnpm/@kurkle_color@0.3.4/node_modules/@kurkle/color/dist/color.esm.js +449 -0
  76. package/dist-lib/node_modules/.pnpm/@kurkle_color@0.3.4/node_modules/@kurkle/color/dist/color.esm.js.map +1 -0
  77. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chart.js +5219 -0
  78. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chart.js.map +1 -0
  79. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chunks/helpers.dataset.js +1691 -0
  80. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chunks/helpers.dataset.js.map +1 -0
  81. package/dist-lib/node_modules/.pnpm/react-chartjs-2@5.3.1_chart.js@4.5.1_react@18.3.1/node_modules/react-chartjs-2/dist/index.js +93 -0
  82. package/dist-lib/node_modules/.pnpm/react-chartjs-2@5.3.1_chart.js@4.5.1_react@18.3.1/node_modules/react-chartjs-2/dist/index.js.map +1 -0
  83. package/dist-lib/routes/Login/Login.d.ts.map +1 -1
  84. package/dist-lib/routes/Login/Login.js +45 -36
  85. package/dist-lib/routes/Login/Login.js.map +1 -1
  86. package/dist-lib/routes/PlanSingle/PlanSingle.d.ts.map +1 -1
  87. package/dist-lib/routes/PlanSingle/PlanSingle.js +131 -118
  88. package/dist-lib/routes/PlanSingle/PlanSingle.js.map +1 -1
  89. package/dist-lib/routes/Plans/Plans.d.ts.map +1 -1
  90. package/dist-lib/routes/Plans/Plans.js +77 -51
  91. package/dist-lib/routes/Plans/Plans.js.map +1 -1
  92. package/dist-lib/services/plans.d.ts +33 -5
  93. package/dist-lib/services/plans.d.ts.map +1 -1
  94. package/dist-lib/services/plans.js +92 -67
  95. package/dist-lib/services/plans.js.map +1 -1
  96. package/dist-lib/services.js +93 -91
  97. package/dist-lib/styles/core-frontend.css +1 -1
  98. package/dist-lib/utils/helpers.d.ts +2 -0
  99. package/dist-lib/utils/helpers.d.ts.map +1 -1
  100. package/dist-lib/utils/helpers.js +68 -42
  101. package/dist-lib/utils/helpers.js.map +1 -1
  102. package/dist-lib/utils.js +36 -34
  103. package/package.json +3 -1
  104. package/src/@types/plans.ts +5 -0
  105. package/src/components/Device/DeviceResticSettings/DeviceResticSettings.tsx +2 -2
  106. package/src/components/Plan/AddPlan/AddPlan.tsx +22 -16
  107. package/src/components/Plan/BackupProgress/BackupProgress.tsx +1 -1
  108. package/src/components/Plan/FilterPlans/FilterPlans.module.scss +65 -0
  109. package/src/components/Plan/FilterPlans/FilterPlans.tsx +126 -0
  110. package/src/components/Plan/PlanForm/PlanForm.tsx +7 -1
  111. package/src/components/Plan/PlanIntegrity/PlanIntegrity.module.scss +19 -0
  112. package/src/components/Plan/PlanIntegrity/PlanIntegrity.tsx +40 -3
  113. package/src/components/Plan/PlanItems/PlanItem.tsx +1 -1
  114. package/src/components/Plan/PlanRepair/PlanRepair.module.scss +53 -0
  115. package/src/components/Plan/PlanRepair/PlanRepair.tsx +243 -0
  116. package/src/components/Plan/PlanSettings/PlanAdvancedSettings.tsx +6 -2
  117. package/src/components/Plan/PlanSettings/PlanGeneralSettings.tsx +14 -2
  118. package/src/components/Plan/PlanSettings/PlanPerformanceSettings.tsx +2 -2
  119. package/src/components/Plan/PlanSettings/PlanSettings.module.scss +8 -0
  120. package/src/components/Plan/PlanSizeChart/PlanSizeChart.module.scss +76 -0
  121. package/src/components/Plan/PlanSizeChart/PlanSizeChart.tsx +166 -0
  122. package/src/components/Plan/PlanStats/PlanStats.module.scss +16 -2
  123. package/src/components/Plan/PlanStats/PlanStats.tsx +8 -11
  124. package/src/components/common/FileManager/FileManager.module.scss +7 -0
  125. package/src/components/common/Icon/Icon.tsx +21 -0
  126. package/src/components/common/SortItems/SortItems.module.scss +3 -2
  127. package/src/components/common/SortItems/SortItems.tsx +6 -3
  128. package/src/components/common/form/MultiSelect/MultiSelect.module.scss +1 -0
  129. package/src/components/index.ts +2 -0
  130. package/src/hooks/usePlanSingleActions.tsx +26 -23
  131. package/src/routes/Login/Login.tsx +8 -2
  132. package/src/routes/PlanSingle/PlanSingle.tsx +17 -0
  133. package/src/routes/Plans/Plans.tsx +70 -35
  134. package/src/services/plans.ts +40 -4
  135. package/src/utils/helpers.ts +25 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanSizeChart.js","sources":["../../../../src/components/Plan/PlanSizeChart/PlanSizeChart.tsx"],"sourcesContent":["import { useMemo, useRef, useState, useEffect } from 'react';\r\nimport { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, Filler, Tooltip, Legend, ChartOptions } from 'chart.js';\r\nimport { Line } from 'react-chartjs-2';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport { Backup } from '../../../@types/backups';\r\nimport { formatBytes, formatNumberToK, isDarkMode } from '../../../utils/helpers';\r\nimport classes from './PlanSizeChart.module.scss';\r\n\r\nChartJS.register(CategoryScale, LinearScale, PointElement, LineElement, Filler, Tooltip, Legend);\r\n\r\ntype RangeKey = '7d' | '14d' | '1m' | '3m' | '6m';\r\n\r\nconst RANGE_OPTIONS: { key: RangeKey; label: string; labelFull: string; days: number }[] = [\r\n { key: '7d', label: '7d', labelFull: '7 days', days: 7 },\r\n { key: '14d', label: '14d', labelFull: '14 days', days: 14 },\r\n { key: '1m', label: '1m', labelFull: '1 month', days: 30 },\r\n { key: '3m', label: '3m', labelFull: '3 months', days: 90 },\r\n { key: '6m', label: '6m', labelFull: '6 months', days: 180 },\r\n];\r\n\r\ninterface PlanSizeChartProps {\r\n backups: Backup[];\r\n}\r\n\r\nconst PlanSizeChart = ({ backups }: PlanSizeChartProps) => {\r\n const [range, setRange] = useState<RangeKey>('3m');\r\n const [open, setOpen] = useState(false);\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (!open) return;\r\n const onClick = (e: MouseEvent) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {\r\n setOpen(false);\r\n }\r\n };\r\n document.addEventListener('mousedown', onClick);\r\n return () => document.removeEventListener('mousedown', onClick);\r\n }, [open]);\r\n\r\n const activeRange = RANGE_OPTIONS.find((r) => r.key === range) || RANGE_OPTIONS[3];\r\n\r\n const filtered = useMemo(() => {\r\n const cutoff = Date.now() - activeRange.days * 24 * 60 * 60 * 1000;\r\n // if there is only one backup duplicate the first backup to make 2 items\r\n // so that the graph is never empty and shows the size even if there is only one backup in the selected range\r\n const theBackups = backups && backups.length === 1 ? [backups[0], backups[0]] : backups || [];\r\n return [...theBackups]\r\n .filter((b) => {\r\n const t = new Date(b.started).getTime();\r\n return !isNaN(t) && t >= cutoff;\r\n })\r\n .sort((a, b) => new Date(a.started).getTime() - new Date(b.started).getTime());\r\n }, [backups, activeRange.days]);\r\n\r\n const labels = filtered.map((b) => new Date(b.started).toLocaleString());\r\n const sizeData = filtered.map((b) => b.totalSize || 0);\r\n const filesData = filtered.map((b) => b.totalFiles || 0);\r\n\r\n const data = {\r\n labels,\r\n datasets: [\r\n {\r\n label: 'Size',\r\n data: sizeData,\r\n yAxisID: 'ySize',\r\n borderColor: 'transparent',\r\n backgroundColor: 'rgba(87, 132, 255, 0.12)',\r\n fill: true,\r\n tension: 0.4,\r\n borderWidth: 1.5,\r\n pointRadius: 0,\r\n pointHoverRadius: 4,\r\n pointHoverBackgroundColor: 'rgba(87, 90, 255, 1)',\r\n },\r\n {\r\n label: 'Files',\r\n data: filesData,\r\n yAxisID: 'yFiles',\r\n borderColor: '#9a9bff',\r\n backgroundColor: 'transparent',\r\n borderDash: [3, 3],\r\n fill: false,\r\n tension: 0.4,\r\n borderWidth: 1.2,\r\n pointRadius: 0,\r\n pointHoverRadius: 4,\r\n pointHoverBackgroundColor: 'rgba(87, 90, 255, 1)',\r\n },\r\n ],\r\n };\r\n\r\n const options: ChartOptions<'line'> = {\r\n responsive: true,\r\n animation: false,\r\n maintainAspectRatio: false,\r\n interaction: { mode: 'index', intersect: false },\r\n plugins: {\r\n legend: { display: false },\r\n tooltip: {\r\n displayColors: false,\r\n backgroundColor: isDarkMode ? 'rgba(0, 0, 0, 0.9)' : 'rgba(255, 255, 255, 1)',\r\n titleColor: isDarkMode ? '#fff' : '#666',\r\n bodyColor: isDarkMode ? '#ccc' : '#888',\r\n padding: 8,\r\n titleFont: { size: 11 },\r\n bodyFont: { size: 11 },\r\n callbacks: {\r\n title: (items) => {\r\n const idx = items[0]?.dataIndex ?? 0;\r\n const b = filtered[idx];\r\n return b ? new Date(b.started).toLocaleString() : '';\r\n },\r\n label: (ctx) => {\r\n if (ctx.dataset.label === 'Size') return `Size: ${formatBytes(ctx.parsed.y || 0)}`;\r\n return `Files: ${formatNumberToK(ctx.parsed.y || 0)}`;\r\n },\r\n },\r\n },\r\n },\r\n scales: {\r\n x: { display: false },\r\n ySize: { display: false, beginAtZero: true },\r\n yFiles: { display: false, beginAtZero: true, position: 'right' },\r\n },\r\n };\r\n\r\n return (\r\n <div className={classes.chartWrap}>\r\n <div className={classes.rangeSelector} ref={dropdownRef}>\r\n <button type=\"button\" className={classes.rangeBtn} onClick={() => setOpen((v) => !v)}>\r\n {activeRange.label}\r\n </button>\r\n {open && (\r\n <ul className={classes.rangeMenu}>\r\n {RANGE_OPTIONS.slice()\r\n .reverse()\r\n .map((opt) => (\r\n <li\r\n key={opt.key}\r\n className={opt.key === range ? classes.active : ''}\r\n onClick={() => {\r\n setRange(opt.key);\r\n setOpen(false);\r\n }}\r\n >\r\n {opt.labelFull}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n {filtered.length === 0 ? (\r\n <div className={classes.empty}>\r\n <Icon type=\"folders\" size={16} /> No data in range\r\n </div>\r\n ) : (\r\n <div className={classes.chartCanvas}>\r\n <Line data={data} options={options} />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PlanSizeChart;\r\n"],"names":["ChartJS","CategoryScale","LinearScale","PointElement","LineElement","Filler","Tooltip","Legend","RANGE_OPTIONS","PlanSizeChart","backups","range","setRange","useState","open","setOpen","dropdownRef","useRef","useEffect","onClick","e","activeRange","r","filtered","useMemo","cutoff","b","a","labels","sizeData","filesData","data","options","isDarkMode","items","idx","_a","ctx","formatBytes","formatNumberToK","jsxs","classes","jsx","v","opt","Icon","Line"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ const a = "_chartWrap_bo3py", t = "_chartCanvas_xBRxt", e = "_rangeSelector_6Z1Hx", n = "_rangeBtn_6fPjz", r = "_rangeMenu_xBLqh", c = "_active_oXxJW", s = "_empty_OstSL", o = {
2
+ chartWrap: a,
3
+ chartCanvas: t,
4
+ rangeSelector: e,
5
+ rangeBtn: n,
6
+ rangeMenu: r,
7
+ active: c,
8
+ empty: s
9
+ };
10
+ export {
11
+ c as active,
12
+ t as chartCanvas,
13
+ a as chartWrap,
14
+ o as default,
15
+ s as empty,
16
+ n as rangeBtn,
17
+ r as rangeMenu,
18
+ e as rangeSelector
19
+ };
20
+ //# sourceMappingURL=PlanSizeChart.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanSizeChart.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlanStats.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/PlanStats/PlanStats.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAM7C,UAAU,cAAc;IACrB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,GAAG,CAAC;CACtB;AAED,QAAA,MAAM,SAAS,GAAI,kCAAkC,cAAc,4CA0ElE,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"PlanStats.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/PlanStats/PlanStats.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAQ7C,UAAU,cAAc;IACrB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,GAAG,CAAC;CACtB;AAED,QAAA,MAAM,SAAS,GAAI,kCAAkC,cAAc,4CAqElE,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -1,24 +1,25 @@
1
1
  import { jsxs as i, jsx as e } from "react/jsx-runtime";
2
- import s from "../../common/Icon/Icon.js";
3
- import { formatIntervalDisplay as T, formatNumberToK as S, formatBytes as z } from "../../../utils/helpers.js";
4
- import x from "../PlanHistory/PlanHistory.js";
2
+ import n from "../../common/Icon/Icon.js";
3
+ import { formatIntervalDisplay as y, formatNumberToK as S, formatBytes as u } from "../../../utils/helpers.js";
4
+ import z from "../PlanHistory/PlanHistory.js";
5
+ import b from "../PlanSizeChart/PlanSizeChart.js";
5
6
  import t from "./PlanStats.module.scss.js";
6
- import u from "../PlanStorageInfo/PlanStorageInfo.js";
7
- const A = ({ plan: o, isSync: r, lastBackupItem: n }) => {
8
- const { sourceConfig: a, storage: m, storagePath: g, isActive: h, settings: f } = o, { interval: N } = f, p = (n == null ? void 0 : n.totalFiles) || 0, v = (n == null ? void 0 : n.totalSize) || 0, y = (l) => {
7
+ import x from "../PlanStorageInfo/PlanStorageInfo.js";
8
+ const F = ({ plan: o, isSync: r, lastBackupItem: s }) => {
9
+ const { sourceConfig: a, storage: p, storagePath: m, isActive: h, settings: v } = o, { interval: g } = v, f = (s == null ? void 0 : s.totalFiles) || 0, N = (s == null ? void 0 : s.totalSize) || 0, T = (l) => {
9
10
  let d = "";
10
11
  return l && l.includes && l.includes.length > 0 && (d += "<div><strong>Includes</strong></div>", d += l.includes.map((c) => `<div>${o.device.name} -> ${c}</div>`).join("")), l && l.excludes && l.excludes.length > 0 && (d += "<div><strong>Excludes</strong></div>", d += l.excludes.map((c) => `<div>${c}</div>`).join("")), d;
11
12
  };
12
13
  return /* @__PURE__ */ i("div", { className: t.planStats, children: [
13
14
  /* @__PURE__ */ i("div", { className: t.sources, children: [
14
15
  /* @__PURE__ */ i("div", { className: t.widgetTitle, children: [
15
- /* @__PURE__ */ e(s, { type: "backup", size: 12 }),
16
+ /* @__PURE__ */ e(n, { type: "backup", size: 12 }),
16
17
  " ",
17
18
  r ? "Syncing" : "Backing Up"
18
19
  ] }),
19
20
  /* @__PURE__ */ i("div", { className: t.sourceContent, children: [
20
- /* @__PURE__ */ i("div", { "data-tooltip-id": "htmlToolTip", "data-tooltip-place": "top", "data-tooltip-html": y(a), children: [
21
- /* @__PURE__ */ e(s, { type: "folders", size: 18 }),
21
+ /* @__PURE__ */ i("div", { "data-tooltip-id": "htmlToolTip", "data-tooltip-place": "top", "data-tooltip-html": T(a), children: [
22
+ /* @__PURE__ */ e(n, { type: "folders", size: 18 }),
22
23
  /* @__PURE__ */ i("span", { children: [
23
24
  a == null ? void 0 : a.includes.length,
24
25
  " Sources"
@@ -29,52 +30,50 @@ const A = ({ plan: o, isSync: r, lastBackupItem: n }) => {
29
30
  {
30
31
  "data-tooltip-id": "htmlToolTip",
31
32
  "data-tooltip-place": "top",
32
- "data-tooltip-html": h ? `${r ? "Syncing" : "Copying"} changes ${T(N)}` : "Plan is Not Active",
33
+ "data-tooltip-html": h ? `${r ? "Syncing" : "Copying"} changes ${y(g)}` : "Plan is Not Active",
33
34
  children: [
34
- /* @__PURE__ */ e(s, { type: h ? r ? "reload" : "copy" : "pause", size: 16 }),
35
+ /* @__PURE__ */ e(n, { type: h ? r ? "reload" : "copy" : "pause", size: 16 }),
35
36
  /* @__PURE__ */ e("div", { className: t.sourceArrow, children: "→" })
36
37
  ]
37
38
  }
38
39
  ),
39
40
  /* @__PURE__ */ e(
40
- u,
41
+ x,
41
42
  {
42
43
  disableTooltip: !1,
43
44
  inline: !1,
44
45
  replicationSettings: o.settings.replication,
45
- storage: m,
46
- storagePath: g
46
+ storage: p,
47
+ storagePath: m
47
48
  }
48
49
  )
49
50
  ] })
50
51
  ] }),
51
52
  /* @__PURE__ */ i("div", { className: t.snapshots, children: [
52
53
  /* @__PURE__ */ i("div", { className: t.widgetTitle, children: [
53
- /* @__PURE__ */ e(s, { type: "folders", size: 12 }),
54
- " Source Stats"
55
- ] }),
56
- /* @__PURE__ */ i("div", { className: t.snapshotsContent, children: [
57
- /* @__PURE__ */ i("div", { children: [
58
- /* @__PURE__ */ e("span", { children: p ? S(p) : 0 }),
59
- /* @__PURE__ */ e("span", { children: "Files" })
60
- ] }),
61
- /* @__PURE__ */ e("div", {}),
62
- /* @__PURE__ */ i("div", { children: [
63
- /* @__PURE__ */ e("span", { children: v ? z(v) : "0.00B" }),
64
- /* @__PURE__ */ e("span", { children: "Size" })
54
+ /* @__PURE__ */ e(n, { type: "folders", size: 12 }),
55
+ " Stats",
56
+ " ",
57
+ /* @__PURE__ */ i("span", { className: t.widgetSubTitle, children: [
58
+ S(f),
59
+ " files ",
60
+ /* @__PURE__ */ e("i", { children: "|" }),
61
+ " ",
62
+ u(N)
65
63
  ] })
66
- ] })
64
+ ] }),
65
+ /* @__PURE__ */ e("div", { className: t.snapshotsContent, children: /* @__PURE__ */ e(b, { backups: o.backups }) })
67
66
  ] }),
68
67
  /* @__PURE__ */ i("div", { className: t.health, children: [
69
68
  /* @__PURE__ */ i("div", { className: t.widgetTitle, children: [
70
- /* @__PURE__ */ e(s, { type: "speed", size: 12 }),
69
+ /* @__PURE__ */ e(n, { type: "speed", size: 12 }),
71
70
  " Health"
72
71
  ] }),
73
- /* @__PURE__ */ e("div", { className: t.healthContent, children: /* @__PURE__ */ e(x, { planId: o.id, history: o.backups, itemsCount: 90 }) })
72
+ /* @__PURE__ */ e("div", { className: t.healthContent, children: /* @__PURE__ */ e(z, { planId: o.id, history: o.backups, itemsCount: 90 }) })
74
73
  ] })
75
74
  ] });
76
75
  };
77
76
  export {
78
- A as default
77
+ F as default
79
78
  };
80
79
  //# sourceMappingURL=PlanStats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlanStats.js","sources":["../../../../src/components/Plan/PlanStats/PlanStats.tsx"],"sourcesContent":["import Icon from '../../common/Icon/Icon';\r\nimport { Plan } from '../../../@types/plans';\r\nimport { formatBytes, formatNumberToK, formatIntervalDisplay } from '../../../utils/helpers';\r\nimport PlanHistory from '../PlanHistory/PlanHistory';\r\nimport classes from './PlanStats.module.scss';\r\nimport PlanStorageInfo from '../PlanStorageInfo/PlanStorageInfo';\r\n\r\ninterface PlanStatsProps {\r\n plan: Plan;\r\n isSync: boolean;\r\n lastBackupItem: any;\r\n}\r\n\r\nconst PlanStats = ({ plan, isSync, lastBackupItem }: PlanStatsProps) => {\r\n const { sourceConfig, storage, storagePath, isActive, settings } = plan;\r\n const { interval } = settings;\r\n\r\n const totalFiles = lastBackupItem?.totalFiles || 0;\r\n const totalSize = lastBackupItem?.totalSize || 0;\r\n\r\n const sourceTooltipHTML = (sources: Plan['sourceConfig']) => {\r\n let html = '';\r\n if (sources && sources.includes && sources.includes.length > 0) {\r\n html += `<div><strong>Includes</strong></div>`;\r\n html += sources.includes.map((p) => `<div>${plan.device.name} -> ${p}</div>`).join('');\r\n }\r\n if (sources && sources.excludes && sources.excludes.length > 0) {\r\n html += `<div><strong>Excludes</strong></div>`;\r\n html += sources.excludes.map((p) => `<div>${p}</div>`).join('');\r\n }\r\n return html;\r\n };\r\n\r\n return (\r\n <div className={classes.planStats}>\r\n <div className={classes.sources}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"backup\" size={12} /> {isSync ? 'Syncing' : 'Backing Up'}\r\n </div>\r\n <div className={classes.sourceContent}>\r\n <div data-tooltip-id=\"htmlToolTip\" data-tooltip-place=\"top\" data-tooltip-html={sourceTooltipHTML(sourceConfig)}>\r\n <Icon type=\"folders\" size={18} />\r\n <span>{sourceConfig?.includes.length} Sources</span>\r\n </div>\r\n <div\r\n data-tooltip-id=\"htmlToolTip\"\r\n data-tooltip-place=\"top\"\r\n data-tooltip-html={isActive ? `${isSync ? 'Syncing' : 'Copying'} changes ${formatIntervalDisplay(interval)}` : 'Plan is Not Active'}\r\n >\r\n <Icon type={isActive ? (isSync ? 'reload' : 'copy') : 'pause'} size={16} />\r\n <div className={classes.sourceArrow}>→</div>\r\n </div>\r\n <PlanStorageInfo\r\n disableTooltip={false}\r\n inline={false}\r\n replicationSettings={plan.settings.replication}\r\n storage={storage}\r\n storagePath={storagePath}\r\n />\r\n </div>\r\n </div>\r\n <div className={classes.snapshots}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"folders\" size={12} /> Source Stats\r\n </div>\r\n <div className={classes.snapshotsContent}>\r\n <div>\r\n <span>{totalFiles ? formatNumberToK(totalFiles) : 0}</span>\r\n <span>Files</span>\r\n </div>\r\n <div></div>\r\n <div>\r\n <span>{totalSize ? formatBytes(totalSize) : '0.00B'}</span>\r\n <span>Size</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={classes.health}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"speed\" size={12} /> Health\r\n </div>\r\n <div className={classes.healthContent}>\r\n <PlanHistory planId={plan.id} history={plan.backups} itemsCount={90} />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default PlanStats;\r\n"],"names":["PlanStats","plan","isSync","lastBackupItem","sourceConfig","storage","storagePath","isActive","settings","interval","totalFiles","totalSize","sourceTooltipHTML","sources","html","p","jsxs","classes","jsx","Icon","formatIntervalDisplay","PlanStorageInfo","formatNumberToK","formatBytes","PlanHistory"],"mappings":"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"}
1
+ {"version":3,"file":"PlanStats.js","sources":["../../../../src/components/Plan/PlanStats/PlanStats.tsx"],"sourcesContent":["import Icon from '../../common/Icon/Icon';\r\nimport { Plan } from '../../../@types/plans';\r\nimport { formatIntervalDisplay } from '../../../utils/helpers';\r\nimport PlanHistory from '../PlanHistory/PlanHistory';\r\nimport PlanSizeChart from '../PlanSizeChart/PlanSizeChart';\r\nimport classes from './PlanStats.module.scss';\r\nimport PlanStorageInfo from '../PlanStorageInfo/PlanStorageInfo';\r\nimport { formatBytes, formatNumberToK } from '../../../utils/helpers';\r\n\r\ninterface PlanStatsProps {\r\n plan: Plan;\r\n isSync: boolean;\r\n lastBackupItem: any;\r\n}\r\n\r\nconst PlanStats = ({ plan, isSync, lastBackupItem }: PlanStatsProps) => {\r\n const { sourceConfig, storage, storagePath, isActive, settings } = plan;\r\n const { interval } = settings;\r\n\r\n const totalFiles = lastBackupItem?.totalFiles || 0;\r\n const totalSize = lastBackupItem?.totalSize || 0;\r\n\r\n const sourceTooltipHTML = (sources: Plan['sourceConfig']) => {\r\n let html = '';\r\n if (sources && sources.includes && sources.includes.length > 0) {\r\n html += `<div><strong>Includes</strong></div>`;\r\n html += sources.includes.map((p) => `<div>${plan.device.name} -> ${p}</div>`).join('');\r\n }\r\n if (sources && sources.excludes && sources.excludes.length > 0) {\r\n html += `<div><strong>Excludes</strong></div>`;\r\n html += sources.excludes.map((p) => `<div>${p}</div>`).join('');\r\n }\r\n return html;\r\n };\r\n\r\n return (\r\n <div className={classes.planStats}>\r\n <div className={classes.sources}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"backup\" size={12} /> {isSync ? 'Syncing' : 'Backing Up'}\r\n </div>\r\n <div className={classes.sourceContent}>\r\n <div data-tooltip-id=\"htmlToolTip\" data-tooltip-place=\"top\" data-tooltip-html={sourceTooltipHTML(sourceConfig)}>\r\n <Icon type=\"folders\" size={18} />\r\n <span>{sourceConfig?.includes.length} Sources</span>\r\n </div>\r\n <div\r\n data-tooltip-id=\"htmlToolTip\"\r\n data-tooltip-place=\"top\"\r\n data-tooltip-html={isActive ? `${isSync ? 'Syncing' : 'Copying'} changes ${formatIntervalDisplay(interval)}` : 'Plan is Not Active'}\r\n >\r\n <Icon type={isActive ? (isSync ? 'reload' : 'copy') : 'pause'} size={16} />\r\n <div className={classes.sourceArrow}>→</div>\r\n </div>\r\n <PlanStorageInfo\r\n disableTooltip={false}\r\n inline={false}\r\n replicationSettings={plan.settings.replication}\r\n storage={storage}\r\n storagePath={storagePath}\r\n />\r\n </div>\r\n </div>\r\n <div className={classes.snapshots}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"folders\" size={12} /> Stats{' '}\r\n <span className={classes.widgetSubTitle}>\r\n {formatNumberToK(totalFiles)} files <i>|</i> {formatBytes(totalSize)}\r\n </span>\r\n </div>\r\n <div className={classes.snapshotsContent}>\r\n <PlanSizeChart backups={plan.backups} />\r\n </div>\r\n </div>\r\n <div className={classes.health}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"speed\" size={12} /> Health\r\n </div>\r\n <div className={classes.healthContent}>\r\n <PlanHistory planId={plan.id} history={plan.backups} itemsCount={90} />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default PlanStats;\r\n"],"names":["PlanStats","plan","isSync","lastBackupItem","sourceConfig","storage","storagePath","isActive","settings","interval","totalFiles","totalSize","sourceTooltipHTML","sources","html","p","jsxs","classes","jsx","Icon","formatIntervalDisplay","PlanStorageInfo","formatNumberToK","formatBytes","PlanSizeChart","PlanHistory"],"mappings":"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"}
@@ -1,22 +1,24 @@
1
- const s = "_planStats_Q8GaX", t = "_widgetTitle_2cQ1i", o = "_sources_Ddf4g", n = "_snapshots_LJ3RW", e = "_health_BlVH1", c = "_sourceContent_X5Yf9", a = "_sourceArrow_XqRux", r = "_snapshotsContent_juzd3", _ = {
2
- planStats: s,
3
- widgetTitle: t,
4
- sources: o,
1
+ const t = "_planStats_I6QMh", s = "_widgetTitle_5fzuw", o = "_widgetSubTitle_C8nLq", e = "_sources_GOFPP", n = "_snapshots_scBR4", c = "_health_S6a4I", a = "_sourceContent_BOF4S", _ = "_sourceArrow_W4iFP", r = "_snapshotsContent_Och1K", h = {
2
+ planStats: t,
3
+ widgetTitle: s,
4
+ widgetSubTitle: o,
5
+ sources: e,
5
6
  snapshots: n,
6
- health: e,
7
- sourceContent: c,
8
- sourceArrow: a,
7
+ health: c,
8
+ sourceContent: a,
9
+ sourceArrow: _,
9
10
  snapshotsContent: r
10
11
  };
11
12
  export {
12
- _ as default,
13
- e as health,
14
- s as planStats,
13
+ h as default,
14
+ c as health,
15
+ t as planStats,
15
16
  n as snapshots,
16
17
  r as snapshotsContent,
17
- a as sourceArrow,
18
- c as sourceContent,
19
- o as sources,
20
- t as widgetTitle
18
+ _ as sourceArrow,
19
+ a as sourceContent,
20
+ e as sources,
21
+ o as widgetSubTitle,
22
+ s as widgetTitle
21
23
  };
22
24
  //# sourceMappingURL=PlanStats.module.scss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlanStats.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
1
+ {"version":3,"file":"PlanStats.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -1,34 +1,36 @@
1
- const e = "_fileManager_aDrwc", i = "_navigationBar_1AroU", t = "_currentPath_cVdV9", n = "_fileList_AXO80", a = "_empty_pIu2Y", l = "_fileHeader_pDFDU", o = "_fileListContainer_k31sv", s = "_fileRow_mUxpD", f = "_selected_40OaM", _ = "_fileName_HLD33", c = "_fileNameText_OCYAF", r = "_fileSize_TQRkB", m = "_loading_CmWSR", d = "_mobileFileInfo_KiAvd", g = {
1
+ const e = "_fileManager_P4pn0", i = "_navigationBar_x4ZpO", t = "_currentPath_9bxS8", l = "_fileList_EuASU", n = "_empty_fDxgu", a = "_fileHeader_rdcxy", o = "_fileListContainer_865J4", f = "_fileRow_dcz21", _ = "_selected_K7B0e", s = "_fileName_8odvK", c = "_fileNameText_BEWX5", r = "_fileSize_InVxT", d = "_fileDate_dfRAk", m = "_loading_Wi2lx", g = "_mobileFileInfo_At6wj", x = {
2
2
  fileManager: e,
3
3
  navigationBar: i,
4
4
  currentPath: t,
5
- fileList: n,
6
- empty: a,
7
- fileHeader: l,
5
+ fileList: l,
6
+ empty: n,
7
+ fileHeader: a,
8
8
  fileListContainer: o,
9
- fileRow: s,
10
- selected: f,
11
- fileName: _,
9
+ fileRow: f,
10
+ selected: _,
11
+ fileName: s,
12
12
  fileNameText: c,
13
13
  fileSize: r,
14
+ fileDate: d,
14
15
  loading: m,
15
- mobileFileInfo: d
16
+ mobileFileInfo: g
16
17
  };
17
18
  export {
18
19
  t as currentPath,
19
- g as default,
20
- a as empty,
21
- l as fileHeader,
22
- n as fileList,
20
+ x as default,
21
+ n as empty,
22
+ d as fileDate,
23
+ a as fileHeader,
24
+ l as fileList,
23
25
  o as fileListContainer,
24
26
  e as fileManager,
25
- _ as fileName,
27
+ s as fileName,
26
28
  c as fileNameText,
27
- s as fileRow,
29
+ f as fileRow,
28
30
  r as fileSize,
29
31
  m as loading,
30
- d as mobileFileInfo,
32
+ g as mobileFileInfo,
31
33
  i as navigationBar,
32
- f as selected
34
+ _ as selected
33
35
  };
34
36
  //# sourceMappingURL=FileManager.module.scss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileManager.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"FileManager.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../../src/components/common/Icon/Icon.tsx"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAOF,QAAA,MAAM,IAAI,GAAI,uCAAuE,SAAS,4CAo/C7F,CAAC;AAmBF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../../src/components/common/Icon/Icon.tsx"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAOF,QAAA,MAAM,IAAI,GAAI,uCAAuE,SAAS,4CAygD7F,CAAC;AAmBF,eAAe,IAAI,CAAC"}