11import type { ReactNode } from "react"
22import {
3- BatteryFull , Bot , Bold , CheckSquare , ChevronDown , ChevronRight , Cloud , Code2 ,
4- EllipsisVertical , FilePlus2 , FileText , Filter , Highlighter , History , Italic , Lightbulb ,
5- MessageCircle , MessageSquare , MessageSquareDashed , MessageSquarePlus , Palette , Plus , Quote , Redo2 ,
6- RefreshCw , Search , Send , Settings , ShieldQuestion , SquarePen , Strikethrough ,
7- Trash2 , Underline , Undo2 , User , WandSparkles , Wifi ,
3+ ArrowLeft , BatteryFull , Book , Bot , BotMessageSquare , Bold , Brain , CheckSquare ,
4+ ChevronDown , ChevronRight , Cloud , Code2 , DatabaseBackup , Drama , EllipsisVertical ,
5+ FileCog , FilePlus2 , FileText , Filter , FolderOpen , Globe2 , Highlighter , History ,
6+ ImageUp , Italic , Languages , LayoutTemplate , Lightbulb , MessageCircle , MessageSquare ,
7+ MessageSquareDashed , MessageSquarePlus , Moon , Paintbrush , Palette , PenTool , Plus ,
8+ Puzzle , Quote , Redo2 , RefreshCw , ScanText , Search , Send , Settings , ShieldQuestion ,
9+ Sparkles , SquarePen , Store , Strikethrough , Trash2 , Type , Underline , Undo2 , User ,
10+ Volume2 , WandSparkles , Wifi ,
811} from "lucide-react"
912
1013import type { NoteGenReplicaLanguage } from "@/components/notegen/types"
1114import { cn } from "@/lib/utils"
1215
13- export type NoteGenMobileScreen = "capture" | "chat" | "writing" | "canvas" | "settings"
16+ export type NoteGenMobileScreen = "capture" | "chat" | "writing" | "canvas" | "me" | " settings" | "settings-general "
1417
1518const MOBILE_WIDTH = 402
1619const MOBILE_HEIGHT = 874
@@ -59,7 +62,7 @@ export function NoteGenMobileStatusBar() {
5962}
6063
6164export function NoteGenMobileDock ( { screen = "capture" , lang = "cn" } : { screen ?: NoteGenMobileScreen ; lang ?: NoteGenReplicaLanguage } ) {
62- const active = screen === "settings " ? "chat" : screen
65+ const active = screen === "me " ? "chat" : screen
6366 const items = [
6467 [ "chat" , MessageSquare , lang === "en" ? "Chat" : "对话" ] ,
6568 [ "writing" , SquarePen , lang === "en" ? "Write" : "写作" ] ,
@@ -200,7 +203,7 @@ function StatCard({ title, subtitle }: { title: string; subtitle: string }) {
200203 return < div className = "h-[109px] rounded-[22px] border border-[#e7e7e8] bg-white p-4" > < p className = "text-xs text-[#8b8e93]" > { title } </ p > < b className = "mt-2 block text-2xl font-semibold" > 0</ b > < p className = "mt-1 text-xs text-[#8b8e93]" > { subtitle } </ p > </ div >
201204}
202205
203- export function NoteGenMobileSettings ( { lang = "cn" } : { lang ?: NoteGenReplicaLanguage } ) {
206+ export function NoteGenMobileMe ( { lang = "cn" } : { lang ?: NoteGenReplicaLanguage } ) {
204207 const activeCells = new Set ( [ 18 , 26 , 34 , 35 , 50 , 58 , 66 , 67 , 74 , 75 , 76 , 82 , 83 , 89 , 90 , 91 , 98 ] )
205208 return (
206209 < div className = "relative min-h-0 flex-1 overflow-hidden px-3 pt-9" >
@@ -216,13 +219,91 @@ export function NoteGenMobileSettings({ lang = "cn" }: { lang?: NoteGenReplicaLa
216219 )
217220}
218221
222+ function MobileSettingsHeader ( { title, lang } : { title : string ; lang : NoteGenReplicaLanguage } ) {
223+ return < header className = "flex h-14 shrink-0 items-center border-b border-[#e7e7e8] bg-white px-2" > < span className = "flex size-11 items-center justify-center" > < ArrowLeft className = "size-[18px]" /> </ span > < h1 className = "min-w-0 flex-1 truncate pr-11 text-center text-base font-semibold" > { title } </ h1 > < span className = "sr-only" > { lang === "en" ? "Back" : "返回" } </ span > </ header >
224+ }
225+
226+ const settingsGroups = [
227+ {
228+ key : "basic" ,
229+ cn : "基础设置" ,
230+ en : "Basic settings" ,
231+ items : [
232+ [ Settings , "常规设置" , "General settings" ] ,
233+ [ PenTool , "记录设置" , "Record settings" ] ,
234+ [ FileCog , "编辑器设置" , "Editor settings" ] ,
235+ [ Palette , "画布设置" , "Canvas settings" ] ,
236+ [ ScanText , "图片记录" , "Image capture" ] ,
237+ [ Volume2 , "音频设置" , "Audio settings" ] ,
238+ ] ,
239+ } ,
240+ {
241+ key : "extensions" ,
242+ cn : "AI 与扩展" ,
243+ en : "AI & extensions" ,
244+ items : [
245+ [ BotMessageSquare , "AI 服务" , "AI services" ] ,
246+ [ Globe2 , "联网搜索" , "Web search" ] ,
247+ [ Book , "知识库" , "Knowledge base" ] ,
248+ [ Brain , "记忆" , "Memories" ] ,
249+ [ Drama , "提示词" , "Prompts" ] ,
250+ [ Puzzle , "MCP" , "MCP" ] ,
251+ [ Sparkles , "技能" , "Skills" ] ,
252+ [ LayoutTemplate , "模板" , "Templates" ] ,
253+ ] ,
254+ } ,
255+ {
256+ key : "data" ,
257+ cn : "数据与存储" ,
258+ en : "Data & storage" ,
259+ items : [
260+ [ DatabaseBackup , "同步" , "Sync" ] ,
261+ [ ImageUp , "图床" , "Image hosting" ] ,
262+ [ FolderOpen , "文件" , "Files" ] ,
263+ ] ,
264+ } ,
265+ ] as const
266+
267+ export function NoteGenMobileSettings ( { lang = "cn" } : { lang ?: NoteGenReplicaLanguage } ) {
268+ return (
269+ < div className = "flex min-h-0 flex-1 flex-col overflow-hidden bg-white" >
270+ < MobileSettingsHeader title = { lang === "en" ? "Settings" : "设置" } lang = { lang } />
271+ < div className = "min-h-0 flex-1 overflow-hidden p-3" >
272+ < p className = "text-sm leading-relaxed text-[#83868c]" > { lang === "en" ? "Open each section to manage NoteGen on this device." : "直接在这里进入各项功能设置。" } </ p >
273+ < div className = "mt-5 flex h-9 items-center rounded-[10px] border border-[#dedfe2] px-3 text-sm text-[#96999e]" > < Search className = "mr-2 size-4" /> { lang === "en" ? "Search settings..." : "搜索设置..." } </ div >
274+ < div className = "mt-5" >
275+ { settingsGroups . map ( ( group ) => < div key = { group . key } className = "pb-1 pt-5 first:pt-0" > < h2 className = "mb-1 px-1 text-xs font-medium text-[#85888e]" > { lang === "en" ? group . en : group . cn } </ h2 > { group . items . map ( ( [ ItemIcon , cnLabel , enLabel ] ) => < div key = { cnLabel } className = "flex h-11 items-center rounded-xl px-1" > < span className = "flex size-9 items-center justify-center" > < ItemIcon className = "size-4" /> </ span > < span className = "text-sm" > { lang === "en" ? enLabel : cnLabel } </ span > < ChevronRight className = "ml-auto size-4 text-[#85888e]" /> </ div > ) } </ div > ) }
276+ </ div >
277+ </ div >
278+ </ div >
279+ )
280+ }
281+
282+ function GeneralSettingItem ( { icon : ItemIcon , title, description, value } : { icon : typeof Moon ; title : string ; description : string ; value : string } ) {
283+ return < div className = "flex min-h-[67px] items-center rounded-xl border border-[#dedfe2] bg-white p-3" > < span className = "mr-3 flex size-8 shrink-0 items-center justify-center rounded-lg bg-[#f4f4f5]" > < ItemIcon className = "size-4" /> </ span > < div className = "min-w-0 flex-1" > < h3 className = "text-sm font-medium" > { title } </ h3 > < p className = "mt-1 truncate text-xs text-[#85888e]" > { description } </ p > </ div > < span className = "ml-2 flex shrink-0 items-center gap-1 text-xs text-[#666a70]" > { value } < ChevronRight className = "size-4 text-[#85888e]" /> </ span > </ div >
284+ }
285+
286+ export function NoteGenMobileGeneralSettings ( { lang = "cn" } : { lang ?: NoteGenReplicaLanguage } ) {
287+ const isEn = lang === "en"
288+ return (
289+ < div className = "flex min-h-0 flex-1 flex-col overflow-hidden bg-white" >
290+ < MobileSettingsHeader title = { isEn ? "General settings" : "常规设置" } lang = { lang } />
291+ < div className = "min-h-0 flex-1 overflow-hidden p-3" >
292+ < p className = "text-sm leading-relaxed text-[#83868c]" > { isEn ? "Configure the app theme, display language, fonts and reading size." : "在这里,你可以配置应用的基本设置,包括界面主题、语言等选项。" } </ p >
293+ < section className = "mt-6" > < h2 className = "text-base font-semibold" > { isEn ? "Appearance & language" : "外观与语言" } </ h2 > < p className = "mt-1 text-sm text-[#83868c]" > { isEn ? "Adjust theme, language and global font" : "调整应用主题、显示语言和全局字体" } </ p > < div className = "mt-3 space-y-3" > < GeneralSettingItem icon = { Moon } title = { isEn ? "Theme" : "主题" } description = { isEn ? "Choose the app appearance" : "选择应用的外观主题" } value = { isEn ? "System" : "跟随系统" } /> < GeneralSettingItem icon = { Languages } title = { isEn ? "Language" : "语言" } description = { isEn ? "Choose the display language" : "选择应用的显示语言" } value = { isEn ? "English" : "简体中文" } /> < GeneralSettingItem icon = { Type } title = { isEn ? "App font" : "应用字体" } description = { isEn ? "Use a generic system font" : "移动端使用系统允许的通用字体族" } value = { isEn ? "System" : "跟随系统" } /> < GeneralSettingItem icon = { Paintbrush } title = { isEn ? "Custom theme colors" : "自定义主题颜色" } description = { isEn ? "Customize the app color palette" : "自定义应用的主题颜色" } value = { isEn ? "Edit" : "编辑" } /> </ div > </ section >
294+ < section className = "mt-6" > < h2 className = "text-base font-semibold" > { isEn ? "Reading & scale" : "阅读与缩放" } </ h2 > < p className = "mt-1 text-sm text-[#83868c]" > { isEn ? "Adjust Markdown content text size" : "分别调整界面、正文和列表的显示尺寸" } </ p > < div className = "mt-3" > < GeneralSettingItem icon = { Store } title = { isEn ? "Content scale" : "正文缩放" } description = { isEn ? "Editor and chat Markdown text" : "调整编辑器和对话中 Markdown 内容的文字大小" } value = "100%" /> </ div > </ section >
295+ </ div >
296+ </ div >
297+ )
298+ }
299+
219300export function NoteGenMobileReplica ( { lang = "cn" , screen = "capture" } : { lang ?: NoteGenReplicaLanguage ; screen ?: NoteGenMobileScreen } ) {
220301 return (
221302 < NoteGenMobileFrame >
222303 < div className = "relative flex h-full min-h-0 flex-col bg-white" >
223304 < NoteGenMobileStatusBar />
224- { screen === "capture" ? < NoteGenMobileCapture lang = { lang } /> : screen === "chat" ? < NoteGenMobileChat lang = { lang } /> : screen === "writing" ? < NoteGenMobileWriting lang = { lang } /> : screen === "canvas" ? < NoteGenMobileCanvas lang = { lang } /> : < NoteGenMobileSettings lang = { lang } /> }
225- < NoteGenMobileDock screen = { screen } lang = { lang } />
305+ { screen === "capture" ? < NoteGenMobileCapture lang = { lang } /> : screen === "chat" ? < NoteGenMobileChat lang = { lang } /> : screen === "writing" ? < NoteGenMobileWriting lang = { lang } /> : screen === "canvas" ? < NoteGenMobileCanvas lang = { lang } /> : screen === "me" ? < NoteGenMobileMe lang = { lang } /> : screen === "settings" ? < NoteGenMobileSettings lang = { lang } /> : < NoteGenMobileGeneralSettings lang = { lang } /> }
306+ { screen === "settings" || screen === "settings-general" ? null : < NoteGenMobileDock screen = { screen } lang = { lang } /> }
226307 </ div >
227308 </ NoteGenMobileFrame >
228309 )
0 commit comments