+
{t("error_boundary_title")}
+
+ {t("error_boundary_desc")}
+
+
+
+ );
+ }
+}
+
+export const ErrorBoundary = withTranslation()(ErrorBoundaryImpl);
diff --git a/src/features/UpdateChecker.tsx b/src/features/UpdateChecker.tsx
new file mode 100644
index 0000000..42ad464
--- /dev/null
+++ b/src/features/UpdateChecker.tsx
@@ -0,0 +1,94 @@
+import { useEffect, useRef, useState } from "react";
+import { useTranslation } from "react-i18next";
+import type { Update } from "@tauri-apps/plugin-updater";
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from "@/components/ui/dialog";
+import { Button } from "@/components/ui/button";
+
+type Status = "idle" | "downloading" | "error";
+
+/**
+ * Проверка обновлений — только десктоп (Windows/macOS/Linux). На мобильных
+ * сборках плагин не зарегистрирован (см. src-tauri/src/lib.rs, #[cfg(desktop)]),
+ * поэтому check() там просто недоступен — ошибка тихо проглатывается ниже,
+ * без падения остального приложения.
+ */
+export function UpdateChecker() {
+ const { t } = useTranslation();
+ const [update, setUpdate] = useState