Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@
"Session": "Session",
"Control": "Control",
"Files": "Files",
"FilesPermissionDenied": "File management is unavailable because this session has no upload or download permission.",
"AI": "AI",
"LunaAiTool_list_terminal_targets": "Find connected terminals",
"LunaAiTool_start_terminal_task": "Start terminal task",
Expand Down
1 change: 1 addition & 0 deletions i18n/locales/es.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"Monitor": {
"Unavailable": "La sesión ha finalizado o no se puede supervisar.",

Check warning on line 3 in i18n/locales/es.json

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"supervisar" should be "supervisor".
"PauseSent": "Se ha enviado la tarea de pausa",
"ResumeSent": "Se ha enviado la tarea de reanudación"
},
Expand All @@ -14,24 +14,24 @@
"Play": "Reproducir",
"Pause": "Pausar",
"Restart": "Reiniciar",
"HistoryCommands": "Historial de comandos",

Check warning on line 17 in i18n/locales/es.json

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"comandos" should be "commandos".

Check warning on line 17 in i18n/locales/es.json

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"Historial" should be "Historical".
"Playlist": "Lista de reproducción",
"SearchCommands": "Buscar comandos...",

Check warning on line 19 in i18n/locales/es.json

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"comandos" should be "commandos".
"TextIndex": "Índice de texto",
"SearchIndex": "Buscar texto reconocido...",
"OCRTextEvidence": "Texto en pantalla (OCR)",
"OCREvidenceHint": "Observaciones OCR de los fotogramas, no acciones verificadas del usuario.",
"IndexBaseline": "Pantalla inicial (OCR)",

Check warning on line 24 in i18n/locales/es.json

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"inicial" should be "initial" or "indicial".
"IndexNoText": "No hay texto disponible",
"IndexEmpty": "No hay eventos indexados",
"IndexEmptyHint": "Esta grabación no contiene eventos de texto OCR.",
"IndexNoMatch": "No hay eventos coincidentes",
"IndexNoMatchHint": "Pruebe con otra palabra o frase.",

Check warning on line 29 in i18n/locales/es.json

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"frase" should be "phrase".
"IndexFailed": "No se pudo cargar el índice de texto",
"IndexPartUnavailable": "El segmento de grabación de este evento aún no está disponible.",
"NoCommands": "No hay registros de comandos",

Check warning on line 32 in i18n/locales/es.json

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"comandos" should be "commandos".
"NoCommandsHint": "Esta sesión no tiene comandos grabados",

Check warning on line 33 in i18n/locales/es.json

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"comandos" should be "commandos".
"CommandsFailed": "No se pudieron cargar los comandos",

Check warning on line 34 in i18n/locales/es.json

View workflow job for this annotation

GitHub Actions / Spell Check with Typos

"comandos" should be "commandos".
"CommandsFailedHint": "El historial de comandos no está disponible temporalmente",
"Loading": "Cargando...",
"HideRail": "Ocultar panel",
Expand Down Expand Up @@ -395,6 +395,7 @@
"Session": "Sesión",
"Control": "Control",
"Files": "Archivos",
"FilesPermissionDenied": "La gestión de archivos no está disponible porque esta sesión no tiene permisos para subir ni descargar archivos.",
"AI": "IA",
"LunaAiTool_list_terminal_targets": "Buscar terminales conectadas",
"LunaAiTool_start_terminal_task": "Iniciar tarea de terminal",
Expand Down
1 change: 1 addition & 0 deletions i18n/locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@
"Session": "Session",
"Control": "Contrôle",
"Files": "Fichiers",
"FilesPermissionDenied": "La gestion des fichiers est indisponible : cette session ne permet ni le téléversement ni le téléchargement.",
"AI": "IA",
"LunaAiTool_list_terminal_targets": "Rechercher les terminaux connectés",
"LunaAiTool_start_terminal_task": "Démarrer une tâche de terminal",
Expand Down
1 change: 1 addition & 0 deletions i18n/locales/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@
"Session": "セッション",
"Control": "コントロール",
"Files": "ファイル",
"FilesPermissionDenied": "このセッションにはファイルのアップロード権限もダウンロード権限もないため、ファイル管理を利用できません。",
"AI": "AI",
"LunaAiTool_list_terminal_targets": "接続済みターミナルを検索",
"LunaAiTool_start_terminal_task": "ターミナルタスクを開始",
Expand Down
1 change: 1 addition & 0 deletions i18n/locales/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@
"Session": "세션",
"Control": "제어",
"Files": "파일",
"FilesPermissionDenied": "이 세션에는 파일 업로드 또는 다운로드 권한이 없어 파일 관리를 사용할 수 없습니다.",
"AI": "AI",
"LunaAiTool_list_terminal_targets": "연결된 터미널 찾기",
"LunaAiTool_start_terminal_task": "터미널 작업 시작",
Expand Down
1 change: 1 addition & 0 deletions i18n/locales/pt_br.json
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@
"Session": "Sessão",
"Control": "Controle",
"Files": "Arquivos",
"FilesPermissionDenied": "O gerenciamento de arquivos está indisponível porque esta sessão não tem permissão para enviar nem baixar arquivos.",
"AI": "IA",
"LunaAiTool_list_terminal_targets": "Encontrar terminais conectados",
"LunaAiTool_start_terminal_task": "Iniciar tarefa de terminal",
Expand Down
1 change: 1 addition & 0 deletions i18n/locales/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@
"Session": "Сеанс",
"Control": "Управление",
"Files": "Файлы",
"FilesPermissionDenied": "Управление файлами недоступно: у сеанса нет прав на отправку или скачивание файлов.",
"AI": "AI",
"LunaAiTool_list_terminal_targets": "Найти подключённые терминалы",
"LunaAiTool_start_terminal_task": "Запустить задачу терминала",
Expand Down
1 change: 1 addition & 0 deletions i18n/locales/vi.json
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@
"Session": "Phiên",
"Control": "Điều khiển",
"Files": "Tệp",
"FilesPermissionDenied": "Không thể quản lý tệp vì phiên này không có quyền tải lên hoặc tải xuống.",
"AI": "AI",
"LunaAiTool_list_terminal_targets": "Tìm terminal đã kết nối",
"LunaAiTool_start_terminal_task": "Bắt đầu tác vụ terminal",
Expand Down
1 change: 1 addition & 0 deletions i18n/locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@
"Session": "会话",
"Control": "控制",
"Files": "文件",
"FilesPermissionDenied": "当前会话没有文件上传或下载权限,无法使用文件管理。",
"AI": "AI",
"LunaAiTool_list_terminal_targets": "查找已连接终端",
"LunaAiTool_start_terminal_task": "启动终端任务",
Expand Down
1 change: 1 addition & 0 deletions i18n/locales/zh_hant.json
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,7 @@
"Session": "會話",
"Control": "控制",
"Files": "檔案",
"FilesPermissionDenied": "目前會話沒有檔案上傳或下載權限,無法使用檔案管理。",
"AI": "AI",
"LunaAiTool_list_terminal_targets": "尋找已連線終端",
"LunaAiTool_start_terminal_task": "啟動終端任務",
Expand Down
43 changes: 26 additions & 17 deletions ui/components/RightPanel/rightPanel.vue
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ const showSftpTab = computed(() => showSftpRightPanelTab(activeSession.value?.pr
const tabs = computed(() => {
if (activeWorkspaceMode.value === "files") return [];

const items: Array<{ value: RightPanelTab; label: string; icon: string; title?: string }> = [
const items: Array<{ value: RightPanelTab; label: string; icon: string; title?: string; disabled?: boolean }> = [
{ value: "session", label: t("RightPanel.Session"), icon: "i-lucide-terminal" }
];

Expand All @@ -82,11 +82,15 @@ const tabs = computed(() => {
label: t("RightPanel.Control"),
icon: "i-lucide-sliders-horizontal"
});
if (lionSession.value.driverName.value) {
const permission = lionSession.value.actionPermission.value;
const filesDisabled = permission.enable_upload === false && permission.enable_download === false;
if (lionSession.value.driverName.value || filesDisabled) {
items.push({
value: "lion-files" as const,
label: t("RightPanel.Files"),
icon: "i-lucide-folder-kanban"
icon: "i-lucide-folder-kanban",
disabled: filesDisabled,
title: filesDisabled ? t("RightPanel.FilesPermissionDenied") : undefined
});
}
}
Expand Down Expand Up @@ -123,7 +127,7 @@ watch(
const paneChanged = prevPaneId !== paneId;
if (paneChanged && prevPaneId) rememberRightPanelTab(prevPaneId, activeTab.value);
const next = nextRightPanelTab({
available: items.map((item) => item.value),
available: items.filter((item) => !item.disabled).map((item) => item.value),
remembered: paneId ? rememberedRightPanelTab(paneId) : undefined,
active: activeTab.value,
sftpResolved: sftpResolved.value,
Expand Down Expand Up @@ -152,18 +156,18 @@ watch(activeTab, (tab) => {
>
<div class="shrink-0 px-3" :style="{ borderBottom: '1px solid var(--app-border)' }">
<div class="right-panel-tab-strip">
<button
v-for="tab in tabs"
:key="tab.value"
type="button"
class="right-panel-tab-button"
:class="{ 'right-panel-tab-button-active': activeTab === tab.value }"
:title="tab.title || tab.label"
@click="setActiveTab(tab.value)"
>
<UIcon :name="tab.icon" class="right-panel-tab-icon" />
<span class="truncate">{{ tab.label }}</span>
</button>
<UTooltip v-for="tab in tabs" :key="tab.value" :text="tab.title || tab.label">
<button
type="button"
class="right-panel-tab-button"
:class="{ 'right-panel-tab-button-active': activeTab === tab.value && !tab.disabled }"
:aria-disabled="tab.disabled || undefined"
@click="!tab.disabled && setActiveTab(tab.value)"
>
<UIcon :name="tab.icon" class="right-panel-tab-icon" />
<span class="truncate">{{ tab.label }}</span>
</button>
</UTooltip>
</div>
</div>

Expand Down Expand Up @@ -205,10 +209,15 @@ watch(activeTab, (tab) => {
border-color 140ms ease;
}

.right-panel-tab-button:hover {
.right-panel-tab-button:not([aria-disabled="true"]):hover {
color: color-mix(in srgb, var(--app-fg) 76%, transparent);
}

.right-panel-tab-button[aria-disabled="true"] {
cursor: not-allowed;
color: color-mix(in srgb, var(--app-fg) 30%, transparent);
}

.right-panel-tab-button:focus-visible {
outline: none;
outline: 2px solid var(--app-focus-ring);
Expand Down
Loading