Merge pull request #37 from Jasonzhu1207/fix/insight-settings-ui-polish

fix(settings): polish insight context controls
This commit is contained in:
Jason
2026-04-28 12:59:57 +08:00
committed by GitHub
2 changed files with 113 additions and 67 deletions

View File

@@ -915,6 +915,29 @@
color: var(--text-secondary); color: var(--text-secondary);
} }
.insight-collapsible-setting {
display: grid;
grid-template-rows: 0fr;
opacity: 0;
transform: translateY(-4px);
transition: grid-template-rows 0.22s ease, opacity 0.18s ease, transform 0.2s ease;
&.expanded {
grid-template-rows: 1fr;
opacity: 1;
transform: translateY(0);
}
&.collapsed {
pointer-events: none;
}
}
.insight-collapsible-setting-inner {
min-height: 0;
overflow: hidden;
}
/* Premium Switch Style */ /* Premium Switch Style */
.switch { .switch {
position: relative; position: relative;
@@ -3616,22 +3639,35 @@
} }
&.insight-social-tab { &.insight-social-tab {
--insight-moments-column-width: 76px;
--insight-social-column-width: minmax(220px, 300px);
--insight-status-column-width: 82px;
--insight-social-list-grid: minmax(0, 1fr) var(--insight-moments-column-width) var(--insight-social-column-width) var(--insight-status-column-width);
.anti-revoke-list-header { .anti-revoke-list-header {
grid-template-columns: minmax(0, 1fr) 86px minmax(240px, 340px) auto; grid-template-columns: var(--insight-social-list-grid);
gap: 14px;
.insight-moments-column-title { .insight-moments-column-title {
display: flex;
justify-content: center;
color: var(--text-tertiary); color: var(--text-tertiary);
text-align: center;
} }
.insight-social-column-title { .insight-social-column-title {
min-width: 0;
color: var(--text-tertiary);
}
.anti-revoke-status-column-title {
justify-self: end;
color: var(--text-tertiary); color: var(--text-tertiary);
} }
} }
.anti-revoke-row { .anti-revoke-row {
display: grid; display: grid;
grid-template-columns: minmax(0, 1fr) 86px minmax(240px, 340px) auto; grid-template-columns: var(--insight-social-list-grid);
align-items: center; align-items: center;
gap: 14px; gap: 14px;
} }
@@ -3772,9 +3808,10 @@
} }
.anti-revoke-row-status { .anti-revoke-row-status {
justify-self: flex-end; justify-self: end;
align-items: flex-end; align-items: flex-end;
max-width: none; max-width: none;
min-width: 0;
} }
} }

View File

@@ -3322,27 +3322,30 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
</div> </div>
</div> </div>
{aiInsightAllowContext && ( <div className={`insight-collapsible-setting ${aiInsightAllowContext ? 'expanded' : 'collapsed'}`} aria-hidden={!aiInsightAllowContext}>
<div className="form-group"> <div className="insight-collapsible-setting-inner">
<label></label> <div className="form-group">
<span className="form-hint"> <label></label>
AI token <span className="form-hint">
</span> AI token
<input </span>
type="number" <input
className="field-input" type="number"
value={aiInsightContextCount} className="field-input"
min={1} value={aiInsightContextCount}
max={200} min={1}
onChange={(e) => { max={200}
const val = Math.max(1, Math.min(200, parseInt(e.target.value, 10) || 40)) disabled={!aiInsightAllowContext}
setAiInsightContextCount(val) onChange={(e) => {
scheduleConfigSave('aiInsightContextCount', () => configService.setAiInsightContextCount(val)) const val = Math.max(1, Math.min(200, parseInt(e.target.value, 10) || 40))
}} setAiInsightContextCount(val)
style={{ width: 100 }} scheduleConfigSave('aiInsightContextCount', () => configService.setAiInsightContextCount(val))
/> }}
style={{ width: 100 }}
/>
</div>
</div> </div>
)} </div>
<div className="divider" /> <div className="divider" />
@@ -3369,27 +3372,30 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
</div> </div>
</div> </div>
{aiInsightAllowMomentsContext && ( <div className={`insight-collapsible-setting ${aiInsightAllowMomentsContext ? 'expanded' : 'collapsed'}`} aria-hidden={!aiInsightAllowMomentsContext}>
<div className="form-group"> <div className="insight-collapsible-setting-inner">
<label></label> <div className="form-group">
<span className="form-hint"> <label></label>
XML <span className="form-hint">
</span> XML
<input </span>
type="number" <input
className="field-input" type="number"
value={aiInsightMomentsContextCount} className="field-input"
min={1} value={aiInsightMomentsContextCount}
max={20} min={1}
onChange={(e) => { max={20}
const val = Math.max(1, Math.min(20, parseInt(e.target.value, 10) || 5)) disabled={!aiInsightAllowMomentsContext}
setAiInsightMomentsContextCount(val) onChange={(e) => {
scheduleConfigSave('aiInsightMomentsContextCount', () => configService.setAiInsightMomentsContextCount(val)) const val = Math.max(1, Math.min(20, parseInt(e.target.value, 10) || 5))
}} setAiInsightMomentsContextCount(val)
style={{ width: 100 }} scheduleConfigSave('aiInsightMomentsContextCount', () => configService.setAiInsightMomentsContextCount(val))
/> }}
style={{ width: 100 }}
/>
</div>
</div> </div>
)} </div>
<div className="divider" /> <div className="divider" />
@@ -3428,29 +3434,32 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
)} )}
</div> </div>
{aiInsightAllowSocialContext && ( <div className={`insight-collapsible-setting ${aiInsightAllowSocialContext ? 'expanded' : 'collapsed'}`} aria-hidden={!aiInsightAllowSocialContext}>
<div className="form-group"> <div className="insight-collapsible-setting-inner">
<label></label> <div className="form-group">
<span className="form-hint"> <label></label>
<span className="form-hint">
<br />
<strong> 5</strong> <br />
</span> <strong> 5</strong>
<input </span>
type="number" <input
className="field-input" type="number"
value={aiInsightSocialContextCount} className="field-input"
min={1} value={aiInsightSocialContextCount}
max={5} min={1}
onChange={(e) => { max={5}
const val = Math.max(1, Math.min(5, parseInt(e.target.value, 10) || 3)) disabled={!aiInsightAllowSocialContext}
setAiInsightSocialContextCount(val) onChange={(e) => {
scheduleConfigSave('aiInsightSocialContextCount', () => configService.setAiInsightSocialContextCount(val)) const val = Math.max(1, Math.min(5, parseInt(e.target.value, 10) || 3))
}} setAiInsightSocialContextCount(val)
style={{ width: 100 }} scheduleConfigSave('aiInsightSocialContextCount', () => configService.setAiInsightSocialContextCount(val))
/> }}
style={{ width: 100 }}
/>
</div>
</div> </div>
)} </div>
<div className="divider" /> <div className="divider" />
{/* 自定义 System Prompt */} {/* 自定义 System Prompt */}
@@ -3728,7 +3737,7 @@ function SettingsPage({ onClose }: SettingsPageProps = {}) {
<span>{filteredSessions.length}</span> <span>{filteredSessions.length}</span>
<span className="insight-moments-column-title"></span> <span className="insight-moments-column-title"></span>
<span className="insight-social-column-title"></span> <span className="insight-social-column-title"></span>
<span></span> <span className="anti-revoke-status-column-title"></span>
</div> </div>
{filteredSessions.map((session) => { {filteredSessions.map((session) => {
const isSelected = aiInsightFilterList.has(session.username) const isSelected = aiInsightFilterList.has(session.username)