feat: ship v1.2.0 Wave 1 foundation with book settings, chapter management, and focus mode

Deliver schema v9, book/chapter IPC extensions, BookSettingsTab, chapter meta/tags,
AI session menu, focus mode and TTS, template context enrich, and Wave 1 E2E coverage.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-08 15:22:58 +08:00
parent 64da95f7e1
commit fe127ec3ed
57 changed files with 1963 additions and 139 deletions
+218
View File
@@ -67,6 +67,59 @@
-webkit-app-region: drag;
}
.top-daily-progress {
width: 72px;
height: 4px;
background: var(--bg-tertiary);
border-radius: 2px;
overflow: hidden;
flex-shrink: 0;
}
.top-daily-progress-fill {
height: 100%;
background: var(--accent);
transition: width 0.3s ease;
}
.top-daily-progress.goal-near .top-daily-progress-fill {
background: #e67e22;
}
.top-daily-progress.goal-met .top-daily-progress-fill {
background: var(--green);
}
#app.focus-mode #left-sidebar,
#app.focus-mode #right-panel,
#app.focus-mode #reference-panel.open {
display: none !important;
}
#app.focus-mode #topbar .tab-bar,
#app.focus-mode #topbar .top-btn:not([data-testid='topbar-focus-mode']) {
display: none;
}
.focus-mode-exit {
position: fixed;
top: 10px;
right: 10px;
z-index: 10001;
padding: 8px 14px;
border-radius: var(--radius-sm);
border: 1px solid var(--border);
background: var(--bg-secondary);
color: var(--text-primary);
font-size: 12px;
cursor: pointer;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
}
.focus-mode-exit:hover {
background: var(--bg-hover);
}
.top-btn {
width: 32px;
height: 32px;
@@ -1070,6 +1123,171 @@
opacity: 1;
}
.ch-delete-btn {
background: none;
border: none;
cursor: pointer;
font-size: 14px;
line-height: 1;
padding: 0 4px;
opacity: 0;
color: var(--red, #c44);
}
.chapter-item:hover .ch-delete-btn {
opacity: 0.7;
}
.ch-delete-btn:hover {
opacity: 1;
}
.chapter-rename-input {
flex: 1;
min-width: 0;
font-size: 12px;
padding: 2px 4px;
border: 1px solid var(--accent);
border-radius: 4px;
background: var(--bg-primary);
color: var(--text-primary);
}
.context-menu {
position: fixed;
z-index: 10000;
min-width: 140px;
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: 8px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
padding: 4px;
}
.context-menu button {
display: block;
width: 100%;
text-align: left;
padding: 8px 12px;
border: none;
background: none;
color: var(--text-primary);
font-size: 12px;
cursor: pointer;
border-radius: 4px;
}
.context-menu button:hover {
background: var(--bg-hover);
}
.context-menu button.danger {
color: var(--red, #c44);
}
.chapter-meta-modal .modal-body {
display: flex;
flex-direction: column;
gap: 8px;
}
.chapter-meta-tags {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.tag-chip {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 2px 8px;
border-radius: 12px;
background: var(--bg-tertiary);
font-size: 12px;
}
.tag-chip button {
border: none;
background: none;
cursor: pointer;
padding: 0;
line-height: 1;
}
.chapter-meta-tag-add {
display: flex;
gap: 8px;
align-items: center;
}
.chapter-meta-published,
.status-published-at {
font-size: 11px;
color: var(--text-secondary);
}
.status-word-over-threshold {
color: #e67e22;
font-weight: 600;
}
.status-meta-btn {
margin-left: 4px;
}
.ai-session-menu-wrap {
position: relative;
}
.ai-session-menu-btn {
padding: 4px 8px;
min-width: 32px;
}
.ai-session-menu {
right: 0;
left: auto;
top: 100%;
}
.ai-session-export-submenu {
padding-left: 8px;
}
.ai-session-export-submenu button {
font-size: 11px;
}
.book-settings-tab {
padding: 12px;
display: flex;
flex-direction: column;
gap: 10px;
}
.book-settings-cover-row {
display: flex;
align-items: center;
gap: 8px;
}
.book-settings-cover-path {
font-size: 12px;
color: var(--text-secondary);
}
.book-settings-danger {
margin-top: 16px;
padding-top: 12px;
border-top: 1px solid var(--border);
}
.btn-danger {
color: #fff;
background: var(--red, #c44);
}
.status-stock-warning {
color: var(--warning, #e6a23c);
margin-left: 12px;