From 04c63d4ef601876186e5d7fab980d76575c494ec Mon Sep 17 00:00:00 2001 From: bndw Date: Sat, 28 Feb 2026 21:08:40 -0800 Subject: feat: **1. `src/main/db/schema.ts`** — add `settings` table … (+10 more) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ✅ **1. `src/main/db/schema.ts`** — add `settings` table to `initSchema` - ✅ **2. `src/main/db/settings.ts`** — create file with `getSetting`, `getSettings`, `setSetting`, `deleteSetting` - ✅ **3. `src/main/claude/phases.ts`** — add `customSystemPrompt?` param to `getPhaseConfig`; add `getDefaultSystemPromptTemplate` export - ✅ **4. `src/main/claude/index.ts`** — import `getSetting`; load custom prompt in `sendMessage`; pass to `getPhaseConfig` - ✅ **5. `src/main/ipc/handlers.ts`** — import `settingsDb` + `getDefaultSystemPromptTemplate`; register `settings:get`, `settings:set`, `settings:delete`, `settings:getDefaultPrompts` - ✅ **6. `src/main/preload.ts`** — add `getSettings`, `setSetting`, `deleteSetting`, `getDefaultSystemPrompts` to interface + api object - ✅ **7. `renderer/src/styles/globals.css`** — append all new CSS rules - ✅ **8. `renderer/src/components/settings/SystemPromptsSettings.tsx`** — create file (new directory) - ✅ **9. `renderer/src/components/SettingsPage.tsx`** — create file - ✅ **10. `renderer/src/components/Header.tsx`** — add `onOpenSettings` prop + ⚙ button - ✅ **11. `renderer/src/App.tsx`** — add `showSettings` state; import + render ``; pass `onOpenSettings` to Header --- renderer/src/styles/globals.css | 213 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 213 insertions(+) (limited to 'renderer/src/styles/globals.css') diff --git a/renderer/src/styles/globals.css b/renderer/src/styles/globals.css index ef0275e..61a37c0 100644 --- a/renderer/src/styles/globals.css +++ b/renderer/src/styles/globals.css @@ -692,3 +692,216 @@ html[data-theme="light"] .chat-input input:focus { border-left: 3px solid var(--accent); border-radius: 0 2px 2px 0; } + +/* ── Settings Overlay ────────────────────────────────────────── */ +.settings-overlay { + position: fixed; + inset: 0; + background: var(--bg-primary); + z-index: 100; + display: flex; + flex-direction: column; +} + +.settings-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 16px; + background: var(--bg-secondary); + border-bottom: 1px solid var(--border); + -webkit-app-region: drag; +} + +.settings-header-left { + display: flex; + align-items: center; + gap: 10px; + -webkit-app-region: no-drag; +} + +.settings-title { + font-size: 12px; + font-weight: 700; + letter-spacing: 0.15em; + text-transform: uppercase; + color: var(--text-primary); +} + +.settings-close { + background: transparent; + border: 1px solid var(--border); + border-radius: 2px; + color: var(--text-primary); + cursor: pointer; + font-size: 14px; + padding: 4px 9px; + font-family: inherit; + -webkit-app-region: no-drag; + transition: background 0.15s; +} + +.settings-close:hover { + background: var(--bg-tertiary); +} + +.settings-body { + flex: 1; + display: flex; + overflow: hidden; +} + +/* ── Settings Side Nav ───────────────────────────────────────── */ +.settings-nav { + width: 180px; + background: var(--bg-secondary); + border-right: 1px solid var(--border); + padding: 16px 0; + flex-shrink: 0; +} + +.settings-nav-item { + display: block; + width: 100%; + text-align: left; + padding: 8px 16px; + background: none; + border: none; + border-left: 2px solid transparent; + cursor: pointer; + font-family: inherit; + font-size: 12px; + letter-spacing: 0.05em; + color: var(--text-secondary); + transition: background 0.1s, color 0.1s; +} + +.settings-nav-item:hover { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +.settings-nav-item.active { + color: var(--text-primary); + border-left-color: var(--accent); + background: var(--bg-tertiary); +} + +/* ── Settings Content Area ───────────────────────────────────── */ +.settings-content { + flex: 1; + overflow-y: auto; + padding: 32px 40px; + max-width: 860px; +} + +.settings-section-title { + font-size: 13px; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--text-primary); + margin-bottom: 6px; +} + +.settings-section-desc { + font-size: 12px; + color: var(--text-secondary); + line-height: 1.6; + margin-bottom: 24px; +} + +/* ── Phase Tab Strip ─────────────────────────────────────────── */ +.settings-tabs { + display: flex; + border-bottom: 1px solid var(--border); + margin-bottom: 16px; +} + +.settings-tab { + padding: 6px 16px; + background: none; + border: none; + border-bottom: 2px solid transparent; + margin-bottom: -1px; + cursor: pointer; + font-family: inherit; + font-size: 11px; + letter-spacing: 0.07em; + text-transform: uppercase; + color: var(--text-secondary); + transition: color 0.1s; +} + +.settings-tab:hover { + color: var(--text-primary); +} + +.settings-tab.active { + color: var(--accent); + border-bottom-color: var(--accent); +} + +/* ── Prompt Textarea ─────────────────────────────────────────── */ +.settings-textarea { + width: 100%; + min-height: 420px; + padding: 14px; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: 2px; + color: var(--text-primary); + font-family: inherit; + font-size: 12px; + line-height: 1.7; + resize: vertical; + transition: border-color 0.15s, box-shadow 0.15s; +} + +.settings-textarea:focus { + outline: none; + border-color: var(--accent); + box-shadow: 0 0 0 2px rgba(96, 165, 250, 0.15); +} + +html[data-theme="light"] .settings-textarea:focus { + box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15); +} + +.settings-textarea.is-custom { + border-color: var(--warning); +} + +/* ── Settings Actions Row ────────────────────────────────────── */ +.settings-actions { + display: flex; + align-items: center; + gap: 10px; + margin-top: 12px; +} + +.settings-custom-badge { + margin-left: auto; + font-size: 10px; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--warning); +} + +/* ── Header Settings Button ──────────────────────────────────── */ +.settings-btn { + padding: 5px 8px; + background: transparent; + border: 1px solid var(--border); + border-radius: 2px; + color: var(--text-secondary); + cursor: pointer; + font-size: 14px; + font-family: inherit; + transition: background 0.15s, color 0.15s; +} + +.settings-btn:hover { + background: var(--bg-tertiary); + color: var(--text-primary); +} -- cgit v1.2.3