Эх сурвалжийг харах

Rework Language Translator toolbar layout for a cleaner source panel header.

Move Paste, Upload, Translate, and Clear into the From language row, replace the bottom gradient button with a matching toolbar action, and remove the swap languages control.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 1 сар өмнө
parent
commit
637186c8fe

+ 27 - 50
gramora/Views/LanguageTranslatorView.swift

@@ -16,13 +16,6 @@ struct LanguageTranslatorView: View {
                         .padding(.bottom, 28)
 
                     contentCard(panelHeight: dynamicPanelHeight)
-                        .padding(.bottom, 24)
-
-                    GradientButton(title: "Translate") {
-                        viewModel.translate()
-                    }
-                    .disabled(!viewModel.canTranslate)
-                    .opacity(viewModel.canTranslate ? 1 : 0.55)
                 }
                 .frame(maxWidth: 1200, alignment: .topLeading)
                 .frame(maxWidth: .infinity, alignment: .topLeading)
@@ -86,24 +79,6 @@ struct LanguageTranslatorView: View {
 
             sourcePanel(height: panelHeight)
 
-            HStack(spacing: 8) {
-                ToolbarButton(title: "Paste Text", iconName: "doc.on.clipboard") {
-                    viewModel.pasteText()
-                }
-
-                ToolbarButton(title: "Upload File", iconName: "square.and.arrow.up") {
-                    viewModel.uploadFile()
-                }
-
-                Spacer()
-
-                swapLanguagesButton
-
-                ClearButton {
-                    viewModel.clearText()
-                }
-            }
-
             targetPanel(height: panelHeight)
 
             Text("Press ⌘ + Return to translate")
@@ -122,11 +97,33 @@ struct LanguageTranslatorView: View {
 
     private func sourcePanel(height: CGFloat) -> some View {
         VStack(alignment: .leading, spacing: 12) {
-            LanguagePicker(
-                title: "From",
-                selection: $viewModel.sourceLanguage,
-                languages: viewModel.sourceLanguageOptions
-            )
+            HStack(spacing: 8) {
+                LanguagePicker(
+                    title: "From",
+                    selection: $viewModel.sourceLanguage,
+                    languages: viewModel.sourceLanguageOptions
+                )
+
+                ToolbarButton(title: "Paste Text", iconName: "doc.on.clipboard") {
+                    viewModel.pasteText()
+                }
+
+                ToolbarButton(title: "Upload File", iconName: "square.and.arrow.up") {
+                    viewModel.uploadFile()
+                }
+
+                ToolbarButton(title: "Translate", iconName: "sparkles") {
+                    viewModel.translate()
+                }
+                .disabled(!viewModel.canTranslate)
+                .opacity(viewModel.canTranslate ? 1 : 0.55)
+
+                Spacer()
+
+                ClearButton {
+                    viewModel.clearText()
+                }
+            }
 
             ZStack(alignment: .bottomTrailing) {
                 ThinCaretTextEditor(text: $viewModel.sourceText, onSubmit: viewModel.translate)
@@ -209,26 +206,6 @@ struct LanguageTranslatorView: View {
         )
         .clipShape(RoundedRectangle(cornerRadius: AppTheme.inputCornerRadius))
     }
-
-    private var swapLanguagesButton: some View {
-        Button {
-            viewModel.swapLanguages()
-        } label: {
-            Image(systemName: "arrow.up.arrow.down")
-                .font(.system(size: 12, weight: .semibold))
-                .foregroundStyle(AppTheme.textSecondary)
-                .padding(.horizontal, 10)
-                .padding(.vertical, 7)
-                .background(Color.white)
-                .clipShape(RoundedRectangle(cornerRadius: 8))
-                .overlay(
-                    RoundedRectangle(cornerRadius: 8)
-                        .stroke(AppTheme.border, lineWidth: 1)
-                )
-        }
-        .buttonStyle(.plain)
-        .accessibilityLabel("Swap languages")
-    }
 }
 
 private struct LanguagePicker: View {