feat: 实现笔临 P0/P1 Electron 桌面应用 v0.1.0
交付写作核心(TipTap、自动保存、分卷分章)、Onboarding、7 主题与双语 i18n、快捷键设置;主进程使用 node:sqlite;补全 Vitest 与 Playwright E2E;统一 design/ 目录并移除 desigin 拼写错误路径。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
export type ThemeId =
|
||||
| 'default'
|
||||
| 'bamboo'
|
||||
| 'moonlit'
|
||||
| 'ricepaper'
|
||||
| 'mist'
|
||||
| 'teagarden'
|
||||
| 'twilight'
|
||||
|
||||
export type Language = 'zh-CN' | 'en'
|
||||
export type ChapterStatus = 'draft' | 'review' | 'done'
|
||||
export type BookStatus = 'draft' | 'ongoing' | 'done'
|
||||
|
||||
export type ActionId =
|
||||
| 'saveChapter'
|
||||
| 'newChapter'
|
||||
| 'focusMode'
|
||||
| 'globalSearch'
|
||||
| 'closeTab'
|
||||
| 'openReference'
|
||||
| 'insertLandmark'
|
||||
| 'openLandmarks'
|
||||
| 'exportBook'
|
||||
| 'toggleTTS'
|
||||
| 'captureInspiration'
|
||||
|
||||
export enum ErrorCode {
|
||||
DB_READ_FAILED = 'DB_READ_FAILED',
|
||||
DB_WRITE_FAILED = 'DB_WRITE_FAILED',
|
||||
FILE_NOT_FOUND = 'FILE_NOT_FOUND',
|
||||
IMPORT_INVALID = 'IMPORT_INVALID',
|
||||
UNKNOWN = 'UNKNOWN'
|
||||
}
|
||||
|
||||
export interface IpcError {
|
||||
code: ErrorCode
|
||||
message: string
|
||||
recoverable: boolean
|
||||
}
|
||||
|
||||
export type IpcResult<T> = { ok: true; data: T } | { ok: false; error: IpcError }
|
||||
|
||||
export interface GlobalSettings {
|
||||
penName: string
|
||||
onboardingCompleted: boolean
|
||||
theme: ThemeId
|
||||
language: Language
|
||||
dailyWordGoal: number
|
||||
shortcuts: Record<ActionId, string>
|
||||
}
|
||||
|
||||
export interface BookMeta {
|
||||
id: string
|
||||
name: string
|
||||
category: string
|
||||
targetWordCount: number | null
|
||||
dbPath: string
|
||||
status: BookStatus
|
||||
lastOpenedAt: string
|
||||
lastChapterId: string | null
|
||||
createdAt: string
|
||||
}
|
||||
|
||||
export interface CreateBookParams {
|
||||
name: string
|
||||
category: string
|
||||
targetWordCount?: number | null
|
||||
createSampleChapter?: boolean
|
||||
}
|
||||
|
||||
export interface Volume {
|
||||
id: string
|
||||
name: string
|
||||
description: string
|
||||
sortOrder: number
|
||||
}
|
||||
|
||||
export interface Chapter {
|
||||
id: string
|
||||
volumeId: string | null
|
||||
title: string
|
||||
content: string
|
||||
status: ChapterStatus
|
||||
wordCount: number
|
||||
sortOrder: number
|
||||
cursorOffset: number
|
||||
}
|
||||
|
||||
export interface BookOpenResult {
|
||||
meta: BookMeta
|
||||
volumes: Volume[]
|
||||
chapters: Chapter[]
|
||||
}
|
||||
|
||||
export interface UpdateChapterParams {
|
||||
bookId: string
|
||||
chapterId: string
|
||||
title?: string
|
||||
content?: string
|
||||
status?: ChapterStatus
|
||||
cursorOffset?: number
|
||||
}
|
||||
Reference in New Issue
Block a user