feat(export): separate voice transcription toggle

This commit is contained in:
aits2026
2026-03-06 14:58:28 +08:00
parent cacb9e449c
commit 344dd3343b
2 changed files with 84 additions and 6 deletions

View File

@@ -3077,16 +3077,18 @@
.media-check-grid { .media-check-grid {
margin-top: 10px; margin-top: 10px;
display: grid; display: flex;
grid-template-columns: repeat(3, minmax(100px, 1fr)); align-items: center;
gap: 8px; flex-wrap: wrap;
gap: 8px 16px;
label { label {
display: flex; display: inline-flex;
align-items: center; align-items: center;
gap: 6px; gap: 6px;
font-size: 12px; font-size: 12px;
color: var(--text-primary); color: var(--text-primary);
white-space: nowrap;
} }
input[type='checkbox'] { input[type='checkbox'] {
@@ -3094,6 +3096,59 @@
} }
} }
.dialog-switch-row {
margin-top: 2px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 14px;
}
.dialog-switch-copy {
min-width: 0;
h4 {
margin: 0;
}
.format-note {
margin-top: 4px;
margin-bottom: 0;
}
}
.dialog-switch {
position: relative;
flex-shrink: 0;
width: 46px;
height: 26px;
border: none;
border-radius: 999px;
background: color-mix(in srgb, var(--text-tertiary) 45%, transparent);
cursor: pointer;
transition: background 0.2s ease;
&.on {
background: var(--primary);
}
}
.dialog-switch-thumb {
position: absolute;
top: 3px;
left: 3px;
width: 20px;
height: 20px;
border-radius: 50%;
background: #fff;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
transition: transform 0.2s ease;
}
.dialog-switch.on .dialog-switch-thumb {
transform: translateX(20px);
}
.display-name-options { .display-name-options {
display: grid; display: grid;
grid-template-columns: 1fr 1fr 1fr; grid-template-columns: 1fr 1fr 1fr;
@@ -3481,7 +3536,7 @@
} }
.media-check-grid { .media-check-grid {
grid-template-columns: repeat(2, minmax(120px, 1fr)); gap: 8px 12px;
} }
} }
@@ -3516,6 +3571,10 @@
justify-content: space-between; justify-content: space-between;
} }
.dialog-switch-row {
align-items: flex-start;
}
.export-defaults-modal { .export-defaults-modal {
width: min(92vw, 720px); width: min(92vw, 720px);
} }

View File

@@ -6224,7 +6224,6 @@ function ExportPage() {
<label><input type="checkbox" checked={options.exportVoices} onChange={event => setOptions(prev => ({ ...prev, exportVoices: event.target.checked }))} /> </label> <label><input type="checkbox" checked={options.exportVoices} onChange={event => setOptions(prev => ({ ...prev, exportVoices: event.target.checked }))} /> </label>
<label><input type="checkbox" checked={options.exportVideos} onChange={event => setOptions(prev => ({ ...prev, exportVideos: event.target.checked }))} /> </label> <label><input type="checkbox" checked={options.exportVideos} onChange={event => setOptions(prev => ({ ...prev, exportVideos: event.target.checked }))} /> </label>
<label><input type="checkbox" checked={options.exportEmojis} onChange={event => setOptions(prev => ({ ...prev, exportEmojis: event.target.checked }))} /> </label> <label><input type="checkbox" checked={options.exportEmojis} onChange={event => setOptions(prev => ({ ...prev, exportEmojis: event.target.checked }))} /> </label>
<label><input type="checkbox" checked={options.exportVoiceAsText} onChange={event => setOptions(prev => ({ ...prev, exportVoiceAsText: event.target.checked }))} /> </label>
</> </>
)} )}
</div> </div>
@@ -6234,6 +6233,26 @@ function ExportPage() {
</div> </div>
)} )}
{isSessionScopeDialog && (
<div className="dialog-section">
<div className="dialog-switch-row">
<div className="dialog-switch-copy">
<h4></h4>
<div className="format-note"></div>
</div>
<button
type="button"
className={`dialog-switch ${options.exportVoiceAsText ? 'on' : ''}`}
aria-pressed={options.exportVoiceAsText}
aria-label="切换语音转文字"
onClick={() => setOptions(prev => ({ ...prev, exportVoiceAsText: !prev.exportVoiceAsText }))}
>
<span className="dialog-switch-thumb" />
</button>
</div>
</div>
)}
{shouldShowDisplayNameSection && ( {shouldShowDisplayNameSection && (
<div className="dialog-section"> <div className="dialog-section">
<h4></h4> <h4></h4>