From fe6cdc3e232980c2005349d333fe21e256a1892e Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 30 Mar 2026 10:17:05 +0000 Subject: [PATCH 1/3] Remove passcode card, unlock 4K for API key users, remove testimonials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove the "购买口令 (Passcode)" card from API config modal - Update Google AI Studio card to show it supports both 2K & 4K - Allow API key users to freely switch between 2K and 4K resolution - Remove the 4K lock/paywall on the ActionBar resolution switcher - Remove the Testimonial/user reviews section from the landing page - Update tip text and descriptions in both EN and CN translations https://claude.ai/code/session_01H5FEdv4GpVDie8N5tsigdR --- src/App.tsx | 5 -- src/components/modals/ApiKeyModal.tsx | 93 ++------------------------- src/components/viewer/ActionBar.tsx | 32 ++------- src/hooks/useImageProcessing.ts | 8 +-- src/i18n/translations.ts | 12 ++-- 5 files changed, 19 insertions(+), 131 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 8584afe..74ef30d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -6,7 +6,6 @@ import { Zap, AlertCircle } from 'lucide-react'; -import { Testimonial } from './components/ui/Testimonial'; // Hooks import { useAuth } from './hooks/useAuth'; @@ -426,10 +425,6 @@ const App: React.FC = () => { - {/* Social Proof (Testimonial) */} -
- -
)} diff --git a/src/components/modals/ApiKeyModal.tsx b/src/components/modals/ApiKeyModal.tsx index f080e13..d4a8e90 100644 --- a/src/components/modals/ApiKeyModal.tsx +++ b/src/components/modals/ApiKeyModal.tsx @@ -1,6 +1,5 @@ import React, { useState, useEffect } from 'react'; -import { Key, X, ExternalLink, ShieldCheck, Save, Eye, EyeOff, Zap, Copy, Check } from 'lucide-react'; -import wechatQr from '../../assets/wechat.png'; +import { Key, X, ExternalLink, ShieldCheck, Save, Eye, EyeOff } from 'lucide-react'; import { QuotaInfo } from '../../types'; import { TRANSLATIONS } from '../../i18n/translations'; @@ -16,9 +15,6 @@ export const ApiKeyModal: React.FC = ({ isOpen, onClose, onSav const [showKey, setShowKey] = useState(false); const [verifying, setVerifying] = useState(false); const [error, setError] = useState(''); - const [copied, setCopied] = useState(false); - const [showQr, setShowQr] = useState(false); - // Dictionary const t = TRANSLATIONS[lang]; @@ -33,12 +29,6 @@ export const ApiKeyModal: React.FC = ({ isOpen, onClose, onSav } }, [isOpen]); - const copyWechat = () => { - navigator.clipboard.writeText('JaffryD'); - setCopied(true); - setTimeout(() => setCopied(false), 2000); - }; - const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const value = apiKey.trim(); @@ -163,14 +153,13 @@ export const ApiKeyModal: React.FC = ({ isOpen, onClose, onSav - {/* Options Grid */} -
- {/* Option A: Google */} + {/* Get API Key */} +
{t.googleTitle} @@ -178,84 +167,12 @@ export const ApiKeyModal: React.FC = ({ isOpen, onClose, onSav

{t.googleDesc1}
- {t.googleDesc2} + {t.googleDesc2}

- - {/* Option B: Passcode */} -
-
- {t.passcodeTitle} - -
-

- {t.passcodeDesc1}
- {t.passcodeDesc2} -

- - {/* Contact Section - Compact Inline */} -
- {t.contactMe} -
- {/* WeChat Button with Popover */} -
setShowQr(true)} - onMouseLeave={() => setShowQr(false)} - > - - - {/* Premium QR Popover */} -
- {/* CRITICAL: Invisible Bridge - extends downward to fully cover the gap */} -
- {/* QR Image */} -
- WeChat QR -
- {/* Action Bar */} - -
-
- - {/* X/Twitter Button */} - - {/* X (Twitter) Icon SVG */} - - - - -
-
-
-

{t.tip}

diff --git a/src/components/viewer/ActionBar.tsx b/src/components/viewer/ActionBar.tsx index ef0788f..2cace4b 100644 --- a/src/components/viewer/ActionBar.tsx +++ b/src/components/viewer/ActionBar.tsx @@ -6,7 +6,6 @@ import { FileText, Presentation, Zap, - Lock, Download } from 'lucide-react'; import { ProcessedPage } from '../../types'; @@ -107,36 +106,17 @@ export const ActionBar: React.FC = ({
-