mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-21 00:21:25 +00:00
* UI changs * Update webview-ui/src/components/marketplace/MarketplaceView.tsx Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> * i18n --------- Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
113 lines
3.7 KiB
TypeScript
113 lines
3.7 KiB
TypeScript
import { HTMLAttributes } from "react"
|
|
import { useAppTranslation } from "@/i18n/TranslationContext"
|
|
import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
|
|
|
|
import { SetCachedStateField } from "./types"
|
|
import { SectionHeader } from "./SectionHeader"
|
|
import { Section } from "./Section"
|
|
import { SearchableSetting } from "./SearchableSetting"
|
|
import { Slider } from "../ui"
|
|
|
|
type NotificationSettingsProps = HTMLAttributes<HTMLDivElement> & {
|
|
ttsEnabled?: boolean
|
|
ttsSpeed?: number
|
|
soundEnabled?: boolean
|
|
soundVolume?: number
|
|
setCachedStateField: SetCachedStateField<"ttsEnabled" | "ttsSpeed" | "soundEnabled" | "soundVolume">
|
|
}
|
|
|
|
export const NotificationSettings = ({
|
|
ttsEnabled,
|
|
ttsSpeed,
|
|
soundEnabled,
|
|
soundVolume,
|
|
setCachedStateField,
|
|
...props
|
|
}: NotificationSettingsProps) => {
|
|
const { t } = useAppTranslation()
|
|
return (
|
|
<div {...props}>
|
|
<SectionHeader>{t("settings:sections.notifications")}</SectionHeader>
|
|
|
|
<Section>
|
|
<SearchableSetting
|
|
settingId="notifications-tts"
|
|
section="notifications"
|
|
label={t("settings:notifications.tts.label")}>
|
|
<VSCodeCheckbox
|
|
checked={ttsEnabled}
|
|
onChange={(e: any) => setCachedStateField("ttsEnabled", e.target.checked)}
|
|
data-testid="tts-enabled-checkbox">
|
|
<span className="font-medium">{t("settings:notifications.tts.label")}</span>
|
|
</VSCodeCheckbox>
|
|
<div className="text-vscode-descriptionForeground text-sm mt-1">
|
|
{t("settings:notifications.tts.description")}
|
|
</div>
|
|
</SearchableSetting>
|
|
|
|
{ttsEnabled && (
|
|
<div className="flex flex-col gap-3 pl-3 border-l-2 border-vscode-button-background">
|
|
<SearchableSetting
|
|
settingId="notifications-tts-speed"
|
|
section="notifications"
|
|
label={t("settings:notifications.tts.speedLabel")}>
|
|
<label className="block font-medium mb-1">
|
|
{t("settings:notifications.tts.speedLabel")}
|
|
</label>
|
|
<div className="flex items-center gap-2">
|
|
<Slider
|
|
min={0.1}
|
|
max={2.0}
|
|
step={0.01}
|
|
value={[ttsSpeed ?? 1.0]}
|
|
onValueChange={([value]) => setCachedStateField("ttsSpeed", value)}
|
|
data-testid="tts-speed-slider"
|
|
/>
|
|
<span className="w-10">{((ttsSpeed ?? 1.0) * 100).toFixed(0)}%</span>
|
|
</div>
|
|
</SearchableSetting>
|
|
</div>
|
|
)}
|
|
|
|
<SearchableSetting
|
|
settingId="notifications-sound"
|
|
section="notifications"
|
|
label={t("settings:notifications.sound.label")}>
|
|
<VSCodeCheckbox
|
|
checked={soundEnabled}
|
|
onChange={(e: any) => setCachedStateField("soundEnabled", e.target.checked)}
|
|
data-testid="sound-enabled-checkbox">
|
|
<span className="font-medium">{t("settings:notifications.sound.label")}</span>
|
|
</VSCodeCheckbox>
|
|
<div className="text-vscode-descriptionForeground text-sm mt-1">
|
|
{t("settings:notifications.sound.description")}
|
|
</div>
|
|
</SearchableSetting>
|
|
|
|
{soundEnabled && (
|
|
<div className="flex flex-col gap-3 pl-3 border-l-2 border-vscode-button-background">
|
|
<SearchableSetting
|
|
settingId="notifications-sound-volume"
|
|
section="notifications"
|
|
label={t("settings:notifications.sound.volumeLabel")}>
|
|
<label className="block font-medium mb-1">
|
|
{t("settings:notifications.sound.volumeLabel")}
|
|
</label>
|
|
<div className="flex items-center gap-2">
|
|
<Slider
|
|
min={0}
|
|
max={1}
|
|
step={0.01}
|
|
value={[soundVolume ?? 0.5]}
|
|
onValueChange={([value]) => setCachedStateField("soundVolume", value)}
|
|
data-testid="sound-volume-slider"
|
|
/>
|
|
<span className="w-10">{((soundVolume ?? 0.5) * 100).toFixed(0)}%</span>
|
|
</div>
|
|
</SearchableSetting>
|
|
</div>
|
|
)}
|
|
</Section>
|
|
</div>
|
|
)
|
|
}
|