粘贴整段日语文本后,系统会按换行切成写字板的每一行;也支持类似
-
+
日本語{にほんご}
的注音格式。
@@ -1070,7 +1071,7 @@ export default function App() {
value={importText}
onChange={(e) => setImportText(e.target.value)}
placeholder="在此粘贴整段文本,每一行会变成写字板的一行。"
- className="w-full text-xs font-mono bg-[#FAF9F6] border border-[#E8E4DE] rounded-lg p-3 focus:outline-none focus:ring-1 focus:ring-[#8B7E74] text-[#2D2926] placeholder-[#A69F92]/60 resize-y"
+ className="w-full text-xs font-mono bg-[#FAF9F6] border border-[#E8E4DE] p-2.5 focus:outline-none focus:ring-1 focus:ring-[#8B7E74] text-[#2D2926] placeholder-[#A69F92]/60 resize-y"
/>
@@ -1102,13 +1103,13 @@ export default function App() {
setImportText('');
setShowImportArea(false);
}}
- className="px-3 py-1.5 bg-white border border-[#E8E4DE] hover:bg-[#FAF9F6] text-[#A69F92] hover:text-[#2D2926] font-semibold rounded-lg transition"
+ className="px-3 py-1.5 bg-white border border-[#E8E4DE] hover:bg-[#FAF9F6] text-[#A69F92] hover:text-[#2D2926] font-semibold transition"
>
取消
- ) : (
+ ) : activeView === 'vocab' ? (
+ ) : (
+
)}
{/* Floating Sticky Drawer for Mobile / Tablet screens which normally hides the Sidebar */}
{activeView === 'lyrics' && currentSelection && (
-
+
@@ -1251,7 +1254,7 @@ export default function App() {
showTransientSaveNotice('复制失败', 'error');
}
}}
- className="shrink-0 flex items-center gap-1 rounded-md border border-[#E8E4DE] bg-white px-2 py-1 text-[11px] font-semibold text-[#8B7E74] hover:bg-[#FAF9F6] active:bg-[#E8E4DE]/40"
+ className="shrink-0 flex items-center gap-1 border border-[#E8E4DE] bg-white px-2 py-1 text-[11px] font-semibold text-[#8B7E74] hover:bg-[#FAF9F6] active:bg-[#E8E4DE]/40"
title="复制选中文本"
>
@@ -1289,7 +1292,7 @@ export default function App() {
rows={4}
id="comment-textarea-mobile-existing"
defaultValue={mobileSelectedNote.comment}
- className="w-full text-sm bg-white border border-[#E8E4DE] rounded p-2 focus:outline-none focus:ring-1 focus:ring-[#8B7E74] text-[#2D2926] leading-relaxed"
+ className="w-full text-sm bg-white border border-[#E8E4DE] p-2 focus:outline-none focus:ring-1 focus:ring-[#8B7E74] text-[#2D2926] leading-relaxed"
/>
@@ -1341,7 +1344,7 @@ export default function App() {
rows={3}
id="comment-textarea-mobile"
placeholder="在此为选中字词记录您的日语随笔、语法释义..."
- className="w-full text-xs bg-white border border-[#E8E4DE] rounded p-2 focus:outline-none focus:ring-1 focus:ring-[#8B7E74] mb-2 text-[#2D2926]"
+ className="w-full text-xs bg-white border border-[#E8E4DE] p-2 focus:outline-none focus:ring-1 focus:ring-[#8B7E74] mb-2 text-[#2D2926]"
/>
diff --git a/src/components/AppNav.tsx b/src/components/AppNav.tsx
index f0f8d14..7803dfd 100644
--- a/src/components/AppNav.tsx
+++ b/src/components/AppNav.tsx
@@ -4,9 +4,9 @@
*/
import React from 'react';
-import { BookOpen, Layers3 } from 'lucide-react';
+import { BookOpen, GitMerge, Layers3 } from 'lucide-react';
-export type AppView = 'lyrics' | 'vocab';
+export type AppView = 'lyrics' | 'vocab' | 'compound';
interface AppNavProps {
activeView: AppView;
@@ -16,12 +16,13 @@ interface AppNavProps {
const NAV_ITEMS = [
{ id: 'lyrics' as const, label: '歌词', icon: BookOpen },
{ id: 'vocab' as const, label: '单词卡片', icon: Layers3 },
+ { id: 'compound' as const, label: '动词拼接', icon: GitMerge },
];
export const AppNav: React.FC
= ({ activeView, onChange }) => {
return (
<>
-