feat(w4): ship v1.5.0 timeline, character arc, and compliance

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-08 17:40:42 +08:00
parent c5c0b7329b
commit cb6b4c3731
51 changed files with 1528 additions and 42 deletions
+4
View File
@@ -11,6 +11,7 @@ interface AppState {
inspirationModalOpen: boolean
importBookModalOpen: boolean
exportAllModalOpen: boolean
timelineModalOpen: boolean
focusMode: boolean
namingCheckOpen: boolean
toast: string | null
@@ -22,6 +23,7 @@ interface AppState {
setInspirationModalOpen: (open: boolean) => void
setImportBookModalOpen: (open: boolean) => void
setExportAllModalOpen: (open: boolean) => void
setTimelineModalOpen: (open: boolean) => void
setFocusMode: (on: boolean) => void
setNamingCheckOpen: (open: boolean) => void
showToast: (message: string) => void
@@ -37,6 +39,7 @@ export const useAppStore = create<AppState>((set) => ({
inspirationModalOpen: false,
importBookModalOpen: false,
exportAllModalOpen: false,
timelineModalOpen: false,
focusMode: false,
namingCheckOpen: false,
toast: null,
@@ -48,6 +51,7 @@ export const useAppStore = create<AppState>((set) => ({
setInspirationModalOpen: (inspirationModalOpen) => set({ inspirationModalOpen }),
setImportBookModalOpen: (importBookModalOpen) => set({ importBookModalOpen }),
setExportAllModalOpen: (exportAllModalOpen) => set({ exportAllModalOpen }),
setTimelineModalOpen: (timelineModalOpen) => set({ timelineModalOpen }),
setFocusMode: (focusMode) => set({ focusMode }),
setNamingCheckOpen: (namingCheckOpen) => set({ namingCheckOpen }),
showToast: (toast) => {
+3
View File
@@ -35,6 +35,9 @@ export const useSettingsStore = create<SettingsState>((set, get) => ({
readModeFontTheme: 'serif',
readModeDeviceWidth: 'desktop',
enableFocusAmbientSound: false,
enableComplianceCheck: false,
complianceWords: [] as string[],
customSlashCommands: [] as { id: string; name: string; template: string }[],
loaded: false,
load: async () => {
const data = await ipcCall(() => window.electronAPI.settings.get())