+
{host.username}@{host.ip}
@@ -1158,7 +1158,7 @@ export function HostItem({
{/* Action tray — slides open on hover (default) or via chevron in click-tray mode */}
{isOnline &&
((host.cpu != null && host.cpu > 0) ||
diff --git a/src/ui/sidebar/SnippetsPanel.tsx b/src/ui/sidebar/SnippetsPanel.tsx
index b70bbb34..c779a3ec 100644
--- a/src/ui/sidebar/SnippetsPanel.tsx
+++ b/src/ui/sidebar/SnippetsPanel.tsx
@@ -1,4 +1,4 @@
-import { useState, useEffect, useCallback, useRef } from "react";
+import { useState, useEffect, useCallback, useMemo, useRef } from "react";
import { useTranslation } from "react-i18next";
import { copyToClipboard } from "@/lib/clipboard";
import { useConfirmation } from "@/hooks/use-confirmation.ts";
@@ -29,6 +29,7 @@ import { getSSHHosts } from "@/api/ssh-host-management-api";
import type { SSHHost } from "@/types/index";
import { Button } from "@/components/button";
import { Input } from "@/components/input";
+import { FolderPathPicker } from "./FolderPathPicker";
import { Separator } from "@/components/separator";
import {
Dialog,
@@ -150,6 +151,14 @@ function SnippetFormDialog({
new Set(),
);
+ const folderMeta = useMemo(() => {
+ const map = new Map();
+ for (const f of folders) {
+ map.set(f.name, { color: f.color ?? undefined, icon: f.icon });
+ }
+ return map;
+ }, [folders]);
+
useEffect(() => {
if (open) {
setName(snippet?.name ?? "");
@@ -238,20 +247,12 @@ function SnippetFormDialog({
({t("newUi.sidebar.snippets.optional")})
-
+ onChange={(path) => setFolder(path === "" ? null : path)}
+ folderPaths={folders.map((f) => f.name)}
+ folderMeta={folderMeta}
+ />
+ }
+ open={openSections.has("data")}
+ onToggle={() => toggle("data")}
+ >
+
+
+
+ {t("newUi.sidebar.userProfile.exportData")}
+
+
+ {t("newUi.sidebar.userProfile.exportDataDesc")}
+
+
+
+
+
+ {t("newUi.sidebar.userProfile.importData")}
+
+
+ {importFile
+ ? t("newUi.sidebar.userProfile.importDataSelected", {
+ name: importFile.name,
+ })
+ : t("newUi.sidebar.userProfile.importDataDesc")}
+
+
+
+ setImportFile(e.target.files?.[0] ?? null)}
+ className="absolute inset-0 w-full h-full opacity-0 cursor-pointer"
+ />
+
+
+ {importFile && (
+
+ )}
+
+
+
+
+
{isElectron() && (